HƯỚNG DẪN CẤU HÌNH DUCKDNS VÀ LETS ENCRYPT ĐỂ TRUY CẬP HOME ASSISTANT TỪ INTERNET

Hi các bạn,

Lâu lắm rồi mới tự viết lại bài, viết thì mất thời gian hơn copy paster và chỉ take note những chỗ cần lưu ý nhưng mà được cái là thỏa sức chém gió với lại thỏa sức mang văn phong 5 điểm thời cấp 3 vào bài post 🙂

OK, bài trước mình đã cùng các bạn đi vào chi tiết việc cài đặt hoàn chỉnh 1 phiên bản Home Assistant bằng cách flash trực tiếp vào thẻ nhớ và chạy bằng haspberry ( nói qua thì có vài cách để làm việc này, bạn nào có Pi mạnh tầm Pi 4 4GB trở lên có thể cài theo kiểu docker và tận dụng phần còn lại của HĐH Rasbian để cài nhiều thứ khác như Smart Mirror hoặc Pi-Hole vân vân và mây mây thứ có thể tích hợp vào em Raspberry nhỏ xíu)

Về cơ bản thì tốt nhất bạn nên để Hass ở trong mạng Local vì dù sao mục đích của nó cũng chỉ là để quản lý các thiết bị smart home của nhiều hãng ở trong nhà và tích hợp vào nó để quản lý tập trung.

Thay vì muốn mở đèn thì phải mở app e-Wilink , mở RF thì BroadLink hay mở cảm biến thì dùng Mi .. thì nay chỉ cần mở App HomeAssistant là đủ.

Cũng cần nói thêm việc mở cổng cũng như cấu hình cho Hass ra ngoài Internet là yêu cầu bắt buộc nếu bạn muốn thực hiện tích hợp Google Asssistant với Home Assistant mà mình sẽ viết ở các bài tiếp theo!

Đây là cấu hình để xài Free, bạn nào có Fee thì nên đăng ký dịch vụ Home Assistant Cloud ở Tab Configuration trong trang dashboard của HA ngay trên cùng luôn.

  • Dịch vụ Home Assistant Cloud được cung cấp bởi nhóm phát triển Home Assistant tại nabucasa.com. Với mức phí thuê bao $5 mỗi tháng (dùng thử 31 ngày), dịch vụ này cung cấp một tên miền con để truy cập Hass và đóng vai trò trung gian liên kết các dịch vụ như Google Assistant vào Hass mà bạn không cần phải cấu hình thủ công.

Gio thì bắt đầu nhé!

Để làm được bạn sẽ cần:

  1. Một tên miền để chỉ hướng truy cập về địa chỉ máy chủ Hass của bạn (tên miền riêng hay DDNS)
  2. Một bộ chứng chỉ SSL hợp lệ, ở đây ta sử dụng chứng chỉ cung cấp miễn phí bởi Letsencrypt
  3. Port Forward – mở cổng trên Router để cho phép truy cập từ bên ngoài vào máy chủ Hass trong mạng nội bộ

ĐĂNG KÝ TÊN MIỀN VÀ LẤY TOKEN

Truy cập vào https://www.duckdns.org, chọn đăng nhập bằng tài khoản tại 1 trong 4 dịch vụ: Google/ Twitter/ Github và Reddit. Tuỳ chọn đăng nhập/đăng ký sử dụng email và mật khẩu trước đây đã bị huỷ bỏ. Sau khi chọn dịch vụ, đăng nhập vào tài khoản của dịch vụ đó rồi đồng ý cấp cho Duckdns quyền truy cập, thường bao gồm địa chỉ email, họ và tên của bạn. Nếu bạn đang sử dụng một tài khoản chính/quan trọng có nhiều thông tin cá nhân, hãy đọc kĩ phần cấp quyền hoặc đơn giản là chuyển sang sử dụng một tài khoản khác có ít dữ liệu cá nhân hơn.

DuckDNS - Signin with Twitter
Cấp cho Duckdns quyền truy cập vào một số thông tin tài khoản
DuckDNS Add Sub Domain

Sau khi cấp quyền cho DuckDNS, trong trang kế tiếp, bạn hãy thêm một domain – tên miền tuỳ thích vào ô sub domain. Chỉ có chữ cái, số và dấu ‘-‘ được chấp nhận, tên miền không phân biệt chữ hoa và thường.
Lưu ý chọn tên không quá khó nhớ nhưng cũng không quá dễ đoán để tránh bị làm phiền.

Tiếp theo bạn copy chuỗi số token lại để dùng ở bước tiếp theo

CẤU HÌNH ADDON DUCKDNS

Tiếp theo, trên giao diện Hass, bạn truy cập vào menu Supervisor, mục Add-on Store, tìm addon DuckDNS như ảnh dưới rồi chọn INSTALL để cài đặt.

Chờ một lúc để addon hoàn tất cài đặt rồi bấm START để khởi động addon này.
Tiếp theo, bạn chuyển sang menu Configuration trên cùng để truy cập cấu hình của addon DuckDNS.

Bạn điền tên miền duckdns đã tạo và token đã lấy từ bước 1 tương tự như trên ảnh. Sau đó bấm SAVE rồi chọn Info trên menu. Bấm START để khởi động addon DuckDNS với cấu hình mới.

Bạn lưu ý thay đổi tuỳ chọn accept_terms: false thành accept_terms: true.

Bạn có thể xem logs – nhật ký của Addons để biết kết quả cập nhật IP lên Duckdns và lấy chứng chỉ SSL từ Letsencrypt. Kết quả tương tự như ảnh dưới là thành công.

Tiếp theo chúng ta sẽ cấu hình HTTPS sử dụng lets encrypt để có thể có được kết quả như hình trên nhé!

CẤU HÌNH TÍCH HỢP HTTP

Toàn bộ các truy cập đến giao diện Frontend của Hass được phục vụ bởi tích hợp có tên http. Sau khi đã cấu hình cập nhật ip đến domain và lấy chứng chỉ SSL thành công theo 1 trong 3 cách trên (trừ cách sử dụng Cloudflare Proxy với tuỳ chọn SSL Flexible), bạn cần cấu hình lại tích hợp này để khai báo sử dụng giao thức HTTPS với chứng chỉ mới lấy. Cấu hình mẫu căn bản của tích hợp này trong file cấu hình chung của Hass tại /config/configuration.yaml như bên dưới.

http:
base_url: https://tenwebbandat.duckdns.org:4433
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem

Cần lưu ý do mình đặt website https://fullstore.vn tại cùng 1 network với HA nên mình phải chọn qua port khác 443 mà trong ví dụ này mình chọn ngẫu nhiên là 4433, với nhà các bạn nếu port 443 chưa bị chiếm thì khai báo là :443 mặc định của https nhé!

* Lưu ý: một khi đã được cấu hình, Hass sẽ không sử dụng giao thức HTTP nữa, kể cả qua IP nội bộ. Chỉ một trong hai giao thức HTTP hoặc HTTPS có thể được sử dụng. Nếu muốn sử dụng cả hai, bạn cần cấu hình phức tạp hơn, ví dụ, phục vụ HTPPS thông qua một reverse proxy.

OK bước cuối cùng là mở port trong router hoặc modem nhà mạng cấp, cái này thì tùy modem hay router mỗi thiết bị khác nhau có cách làm khác nhau, mình ví dụ ở đây là con FPT nhé cho đơn giản, với các con khác các bạn google từ khóa port forwarding hoặc NAT port kèm model Router nhé!

PHẦN CUỐI: CẤU HÌNH HASS

PORT FORWARD – MỞ PORT

Thông thường, tất cả router đều đặt IPv4 – địa chỉ IP phiên bản 4 của các máy con ở sau một NAT – bộ biên dịch địa chỉ mạng. NAT có nhiệm vụ thay thế các địa chỉ IP công khai bên ngoài thành IP nội bộ và ngược lại tuỳ vào hướng đi của dữ liệu. Mặc định, NAT sẽ huỷ – drop bất cứ luồng truy cập nào từ bên ngoài mà nó không tìm thấy khai báo đích đến và cổng dịch vụ – port từ trước.
NAT hay được sử dụng như một firewall, tuy nhiên nó không phải.

Để truy cập được Hass từ bên ngoài internet (hay nói cách khác từ phía bên kia của Router), ta cần khai báo cho NAT:

  • Địa chỉ IP của máy nội bộ sẽ nhận dữ liệu đi từ bên ngoài vào (ở đây là IP của Hass)
  • Cổng nào trên máy nội bộ sẽ phục vụ dữ liệu (ở đây là cổng mặc định 8123 của Hass)
  • Cổng tương ứng bên ngoài để nhận dữ liệu đến, chỉ các dữ liệu đến trên cổng này mới được NAT thực hiện đổi IP và chuyển đến IP nội bộ trên cổng dịch vụ (8123)

Kĩ thuật này được gọi là DNAT – Destination NAT hay Port Forwarding hay “mở cổng” trong tiếng Việt. Để hoạt động ổn định, yêu cầu bạn phải gán cho máy chủ Hass một địa chỉ IP cố định bằng cách cấu hình Router mạng hoặc cấu hình trên máy chủ Hass 

Các bạn nên cài thêm Lets Encrypt và NGinx cho đủ bộ

OK Tới đây là xong, các bạn có thể truy cập vào HA từ mạng nội bộ thông thường với https hoặc từ internet với địa chỉ https://youraddress.duckdns.org:yourport (ví dụ: https://mdung.duckdns.org:3004)

CHÚC CÁC BẠN CẤU HÌNH THÀNH CÔNG !

Bài viết vào tháng 2/2021 – cách thức cấu hình có thể có thay đổi trong tương lai! Bye !

3 Comments

  1. ad ơi. e ko thể mở port 443 trên modem được ạ. mong ad có cách nào khác nưa ko ạ

    Like

Leave a comment