Home Assistant

Home Assistant: truy cập từ xa qua duckdns, domain riêng hoặc cloudflare

Truy cập Hass từ mọi nơi

Hướng dẫn truy cập để quản lý Smart Home của bạn từ mọi nơi

Photo: bemi.fi
37 phút để đọc hết nội dung

Mặc dù Home Assistant (Hass) đề cao local control – điều khiển nội bộ và bảo vệ user privacy – quyền riêng tư, để đánh đổi sự tiện lợi hay một số tính năng, bạn cũng có thể cấu hình để “mở cửa” một phần máy chủ Hass và các dịch vụ của nó để truy cập từ bên ngoài. Một cấu hình tốt, đề cao bảo mật sẽ giúp Home Assistant mở cửa với thế giới (internet) trong khi các tính năng bảo mật gần như không bị suy yếu.
Một trong các cánh cửa cơ bản là mở cửa giao diện web hay tích hợp http của Home Assistant với thế giới Internet.

Với hướng dẫn ở bài này, bạn sẽ truy cập được Hass từ xa (tức là bên ngoài mạng nhà bạn) qua kết nối mã hoá HTTPS sử dụng một chứng chỉ SSL miễn phí nhưng hợp lệ, được xác thực bởi các dịch vụ xác thực – trusted third party được công nhận toàn cầu.

Truy cập từ mọi nơi
Truy cập Hass từ bất cứ đâu

Để 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ộ

Một số trường hợp sử dụng mà bạn bắt buộc phải thực hiện điều này:

  • Sử dụng ứng dụng Home Assistant hoặc một số ứng dụng như Hasskit trên điện thoại, máy tính bảng chạy iOS
  • Liên kết với một số dịch vụ qua API – Giao diện lập trình ứng dụng như Google Assistant, Google Calendar, Spotify, Fitbit v.v..
  • Sử dụng dịch vụ TTS để thông báo bằng giọng nói đến thiết bị hỗ trợ Google Cast (như loa Google Home) Có thể sử dụng TTS đến các loa Google Cast qua giao thức http với địa chỉ ip nội bộ.
  • v.v..

Bạn vẫn có thể truy cập Hass từ xa mà không cần thực hiện hướng dẫn ở bài này khi sử dụng:

  • Dịch vụ Home Assistant Cloud được cung cấp bởi nhóm phát triển Home Assistant tại nabucasa.com. Nếu được, bạn hãy sử dụng dịch vụ này để hỗ trợ việc phát triển Home Assistant.
    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.
  • Truy cập vào giao diện Hass qua một kết nối bảo mật như SSH Tunnel hoặc VPN. Hass hoàn toàn có thể chạy song song với một OpenVPN server trên thiết bị Raspberry Pi 4B 2GB RAM (là thiết bị khuyến khích sử dụng của chúng tôi). Tuy nhiên, bạn vẫn sẽ cần một domain để “dẫn đường” cho kết nối VPN hoặc phải thay đổi IP thủ công.

Di chuyển nhanh đến hướng dẫn nếu bạn muốn dùng
DuckDNS / Dịch vụ DDNS khác / Tên miền riêng + Cloudflare

Phần đầu: Nếu bạn sử dụng Duckdns.org

Dịch vụ DDNS cung cấp miễn phí bởi duckdns.org là dịch vụ tên miền được sử dụng phổ biến nhất của cộng đồng người dùng Hass. Dù có vài sự cố gần đây, duckdns vẫn là dịch vụ bạn nên ưu tiên do đặc tính dễ sử dụng với Hass.

Đă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.

DuckDNS successfully added
Thêm thành công tên miền con vào Duckdns

Tiếp theo, bạn hãy chọn menu install ở trên cùng để lấy token. Chọn domain vừa tạo trong mục choose domain rồi chờ trang DuckDNS.org tải xong.
Kéo xuống dưới rồi copy token như trong ảnh bên dưới (phần sau “token=” và trước “&ip=“) để sử dụng khi cấu hình Hass hoặc cập nhật ip cho domain này.

DuckDNS Token
Copy phần trong khung màu đỏ

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.

! Home Assistant Core

Nếu đang sử dụng Home Assistant Core, bạn sẽ không có menu Supervisor và cũng không thể cài đặt các addons. Việc cập nhật IP cho tên miền Duckdns và lấy chứng chỉ SSL cũng như làm mới chứng chỉ định kỳ phải được cấu hình riêng trên hệ điều hành.
* Integration – tích hợp Cloudflare có thể giúp bạn cập nhật IP cho tên miền quản lý bởi Cloudflare mà không cần cấu hình thủ công hay addon.

Hass Install DuckDNS Addon
Tìm addon DuckDNS

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.

Hass Cấu hình DuckDNS
Cấu hình DuckDNS Addon

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.

Hass DuckDNS Logs
Lấy chứng chỉ từ Letsencrypt thành công

Tiếp theo bạn cần cấu hình Hass sử dụng kết nối HTTPS và các chứng chỉ đã lấy được. Vui lòng xem bước 4.

Nếu bạn gặp vấn đề với việc cập nhật hoặc sự ổn định của add Duckdns, hãy thêm một phương án dự phòng như trong bài viết: Khắc phục lỗi chậm cập nhật IP đến DuckDNS

Addon Duckdns xác thực domain với Letsencrypt.org qua phương thức dns-challenge, không phải http-challenge, do vậy bạn không cần forward – mở port 80 hay bất cứ port nào khác để lấy và làm mới chứng chỉ.

! Về Letsencrypt.org và chứng chỉ SSL

Letsencrypt.org là một dự án của tổ chức Internet Security Research Group (ISRG) nhằm thúc đẩy bảo mật và quyền riêng tư trên môi trường internet. Letsencrypt cung cấp cho người dùng các chứng chỉ mã hoá SSL miễn phí cho phép họ kích hoạt, triển khai và hỗ trợ kết nối HTTPS trên các trang web của mình. Tháng 2 vừa rồi đánh dấu cột mốc 1 tỷ chứng chỉ đã được cung cấp bởi Letsencrypt.
Các chứng chỉ này hết hạn sau mỗi 90 ngày và bạn phải làm mới chúng trước khi hết hạn thông qua các công cụ cung cấp bởi Letsencrypt hay bên thứ 3.

Chứng chỉ SSL được cấp cho mỗi domain hoặc sub domain và chỉ có thể được chứng thực khi được phục vụ/cấp từ chính domain/sub domain đó. Bạn có thể dùng cùng chứng chỉ để triển khai HTTPS cho nhiều domain/sub domain, tuy nhiên chỉ có domain/sub domain đã đăng ký mới có thể được chứng thực.

Phần 2: Bạn sử dụng một dịch vụ DDNS khác hoặc tên miền riêng

Ngoài Duckdns.org, có rất nhiều dịch vụ DDNS – Dynamic DNS khác cung cấp cho bạn một tên miền (sub domain) như noip.com, dyndns.org, changeip.com v.v.. miễn phí hay có phí. Rất nhiều trong số này được hỗ trợ sẵn bởi các bộ định tuyến – router. Bạn có thể xem dịch vụ nào được hỗ trợ bằng cách truy cập vào giao diện web quản lý router của mình, tìm đến mục Dynamic DNS. Sau đó bạn có thể làm theo hướng dẫn của router, thông thường bao gồm đăng ký tài khoản trên trang web tương ứng rồi nhập tên miền cùng với username/password đã đăng ký vào mục DDNS Account của router. Router sẽ đảm nhận nhiệm vụ cập nhật IP đến tên miền bạn đã đăng ký, bạn sẽ sử dụng tên miền này để truy cập Hass.

FPT Supported DDNS
Các dịch vụ DDNS được hỗ trợ sẵn trên Router của nhà mạng FPT

Nếu bạn dùng tên miền riêng, hãy tham khảo tài liệu của nhà cung cấp tên miền để xem họ có hỗ trợ cập nhật IP động hay không. Hoặc bạn có thể chuyển tên miền này về Cloudflare để quản lí và sử dụng dịch vụ cập nhật IP tự động của Cloudflare (xem Bước 3).

Sau khi cập nhật được IP lên tên miền thành công, trên Hass, bạn hãy tìm và cài đặt addon Letsencrypt để lấy chứng chỉ SSL. Tìm Letsencrypt trong mục Supervisor > Add-on Store rồi ấn INSTALL để cài đặt.

Hass Letsencrypt Addons
Tìm Letsencrypt trong Supervisor
! Home Assistant Core

Nếu đang sử dụng Home Assistant Core, bạn sẽ không có menu Supervisor và cũng không thể cài đặt các addons. Việc cập nhật IP cho tên miền Duckdns và lấy chứng chỉ SSL cũng như làm mới chứng chỉ định kỳ phải được cấu hình riêng trên hệ điều hành.
* Integration – tích hợp Cloudflare có thể giúp bạn cập nhật IP cho tên miền Cloudflare mà không cần cấu hình thủ công hay addon.

Sau khi cài đặt thành công, bạn chuyển sang menu Configuration ở trên cùng để truy cập cấu hình addon này.

Hass Letsencrypt Config
Cấu hình mẫu Letsencrypt

Bạn cần cấu hình ít nhất 3 mục trong danh sách bên dưới:

  1. email: địa chỉ email liên hệ của bạn, sẽ được sử dụng để đăng ký với Letsencrypt.org
  2. domains: tên miền bạn sử dụng cho Hass
  3. challenge: http hoặc dns, loại phương thức xác thực để Letsencrypt xác nhận quyền sở hữu của bạn với tên miền. Chi tiết ở dưới.

challenge: dns

Quyền sở hữu tên miền của bạn sẽ được xác nhận bởi giá trị của một bản ghi loại TXT, giá trị này được tạo ra mỗi khi Letsencrypt bắt đầu quá trình xác thực và addon Letsencrypt sẽ cập nhật giá trị này lên bản ghi của tên miền. Để sử dụng phương thức này, bạn cần khai báo thêm mục dns: (như trong ảnh trên).

Danh sách các nhà cung cấp dịch vụ tên miền hỗ trợ phương thức này:

  1. cloudflare: bạn sẽ phải đăng nhập vào tài khoản cloudflare trước rồi tạo một API Token bằng cách chọn tên miền con > tài khoản của bạn (Profile) > API Tokens > Create Token. Sau đó chọn Edit Zone DNS, chọn như ảnh dưới ở mục Permission và Zone Resouces. Ấn tiếp Continue rồi Create Token để tạo token.
    Cấu hình tuỳ chọn dns: của addon Letsencrypt cho Cloudflare như sau:
dns:
  provider: dns-cloudflare
  cloudflare_api_token: 0123456789abcdef0123456789abcdef01234
Cloudflare Create Token Zone Permision
Cấu hình Zone Permision cho Letsencrypt Addon
  1. google dns challenge: dành cho tên miền quản lý bởi Google, bạn sẽ phải lấy file service_account có phần mở rộng json, chép file này vào thư mục cấu hình của Hass rồi cấu hình dns mẫu như bên dưới. (Google domain)
dns:
  provider: dns-google
  google_creds: google.json
  1. dns-cloudxns, dns-digitalocean, dns-dnsimple, dns-dnsmadeeasy, dns-gehirn, dns-linode, dns-luadns, dns-nsone, dns-ovh, dns-rfc2136, dns-route53, dns-sakuracloud, dns-netcup

challenge: http

Với phương thức này, addon Letsencrypt sẽ đặt một file có tên ngẫu nhiên trên web server của bạn và Letsencrypt truy cập vào file này từ xa để xác thực quyền sở hữu domain. Đây là phương thức thông dụng nhất và áp dụng được với mọi domain, tuy nhiên đòi hỏi bạn forward – mở port 80 từ bên ngoài đến port 8123 (nếu bạn sử dụng cấu hình mặc định) trên máy chủ Hass.

Cách mở port, bạn xem ở bước 4: cấu hình Hass.

Cấu hình addon Letsencrypt để sử dụng cách này (sau khi mở port):

email: [email protected]
domains:
  - ha.konnected.vn
certfile: fullchain.pem
keyfile: privkey.pem
challenge: http

Sau khi cấu hình thành công theo một trong 2 cách http hoặc dns trên đây, bạn SAVE (lưu lại cấu hình) rồi restart addon Letsencrypt để bắt đầu quá trình lấy chứng chỉ SSL từ Letsencrypt.org. Bạn có thể truy cập log – nhật ký của Addons từ mục Log trên cùng để xem kết quả.

Sau khi addon lấy chứng chỉ thành công, bạn hãy chuyển sang menu Info rồi mở lựa chọn Start on boot để cho phép addon này tự khởi động cùng Hass. Mỗi khi khởi động, addon sẽ kiểm tra thời hạn của chứng chỉ, nếu thời hạn còn lại dưới 30 ngày, addon sẽ tự làm mới. Lựa chọn này sẽ thuận tiện cho bạn, tuy nhiên bạn vẫn có thể tự nhớ lịch khởi động addon này mỗi khi chứng chỉ sắp hết hạn.

Phần 3: Bạn sử dụng Cloudflare

Bạn chỉ sử dụng được Cloudflare để quản lý các tên miền do mình sở hữu. Bạn sẽ phải chuyển tên miền về Cloudflare quản lý bằng cách thay đổi DNS Server trên bản ghi của tên miền (trên trang web của nhà cung cấp dịch vụ tên miền).

Nếu đang có một tên miền bỏ không hoặc đã có sẵn tên miền đang quản lý bởi Cloudflare, bạn nên tạo thêm một tên miền con sub-domain dùng riêng cho Hass để dễ quản lý và tăng cường bảo mật.
Hoặc bạn cũng có thể mua một tên miền mới với giá khá rẻ (thường cho năm đầu sử dụng) tại các nhà cung cấp tên miền quốc tế như namecheap.com hay godaddy.com.

Cloudflare – cloudflare.com là một dạng dịch vụ DNS trung gian, giúp bạn điều phối hay ngăn chặn, bảo vệ và tăng tốc website của mình thông qua các dịch vụ họ cung cấp.

Ở đây, ta giả sử bạn đã hoàn thành việc đó và hiện tại truy cập đến tên miền do Cloudflare quản lý. Lúc này bạn có 2 lựa chọn:

  1. Chỉ sử dụng dịch vụ cập nhật IP động của Cloudflare rồi lấy chứng chỉ Letsencrypt như bước 2
  2. Sử dụng cả dịch vụ cập nhật IP động của Cloudflare lẫn chứng chỉ do Cloudflare cung cấp thông qua tính năng Proxy của dịch vụ này. Lúc này bạn sẽ không cần phải lấy hay quan tâm đến việc làm mới chứng chỉ miễn phí từ Letsencrypt nữa. Cloudflare sẽ tự làm mới chứng chỉ của họ cấp cho chúng ta.

Cloudflare – cập nhật IP

Ta sử dụng integration – tích hợp Cloudflare trong Hass để cập nhật IP. Để sử dụng được, bạn cần đăng nhập vào tài khoản Cloudflare đang quản lý tên miền này, chọn My Profile > API Tokens > API Keys > Global API Key > Create hoặc View. Sử dụng Global API Key này trong cấu hình mẫu bên dưới.

Lưu ý: Global API Key này có rất nhiều quyền đối với toàn bộ domain quản lý bởi account Cloudflare này, bạn phải cẩn thận bảo mật các file cấu hình, các bản sao lưu Hass để tránh bị rò rỉ.

cloudflare:
  email: [email protected]
  api_key: Global_API_Key
  zone: konnected.vn
  records:
    - homeassistant

Trong đó,

  • email: emai đăng nhập tài khoản Cloudflare của bạn
  • api_key: Global API Key bạn đã lấy ở trên
  • zone: tên miền chính
  • records: danh sách các sub domain sẽ được cập nhật IP. Ví dụ bạn chọn homeassistant.konnected.vn làm tên miền cho Hass, thì records sẽ là homeassistant tương tự cấu hình mẫu.
    Bạn chọn records là www để cập nhật IP cho tên miền chính.

Vì bạn chỉ sử dụng dịch vụ DNS của Cloudflare, cần chuyển domain/subdomain của bạn về chế độ DNS only (tắt Proxy) bằng cách trong trang quản lý tên miền của Cloudflare, mục DNS. Tắt chế độ Proxied của record kiểu A của domain/subdomain tương ứng.

Cloudflare DNS Only
Chuyển tuỳ chọn Proxy sang DNS only (đám mây xám)

Sử dụng chứng chỉ SSL của Cloudflare

Để sử dụng chứng chỉ SSL của Cloudflare thì các điều kiện sau là bắt buộc:

  1. Bạn phải mở tính năng Proxy của Cloudflare cho tên miền/ tên miền con sử dụng cho Hass. Tính năng này mặc định là mở.
  2. Hass phải truy cập được từ bên ngoài qua giao thức http (mặc định) hoặc https trên một trong các cổng sau (bắt buộc phải là 1 trong các cổng này):
    http: 80, 8080, 8880, 2052, 2082, 2086, 2095
    https: 443, 2053, 2083, 2087, 2096, 8443
    Cách forward port, bạn xem ở bước 4: cấu hình Hass.

* Lưu ý rằng nếu có thể, bạn hãy forward cổng dịch vụ của Hass ra 80 nếu dùng HTTP và ra 443 nếu dùng HTTPS. Nếu dùng các cổng khác (trong số các cổng trên), bạn phải:

  1. Nhập đầy đủ cả cổng vào địa chỉ trình duyệt khi truy cập Hass
  2. Phải tắt tính năng Caching của Cloudflare cho toàn bộ tên miền dù bạn chỉ sử dụng tên miền con – sub domain cho Hass. Để tắt Caching, bạn bật chế độ Developement Mode trong tab Caching tại trang quản lý Cloudflare.
CloudFlare Proxy
Tính năng Proxy của Cloudflare, màu cam là kích hoạt cho tên miền tương ứng

Để sử dụng tính năng Proxy, Hass có thể sử dụng phương thức http hoặc https. Trên tài khoản Cloudflare quản lý tên miền, chọn mục SSL/TLS và cấu hình như bên dưới.

Cloudflare SSL Options

Chọn Flexible nếu Hass sử dụng giao thức HTTP.

Chọn Full nếu Hass sử dụng giao thức HTTPS.

Tuỳ chọn Full (strict) yêu cầu chứng chỉ SSL hợp lệ nên không có ý nghĩa cho lắm ở đây.

Rõ hơn về các tuỳ chọn này:

  • Tuỳ chọn Full sẽ yêu cầu máy chủ Hass phải phục vụ qua kết nối HTTPS với một chứng chỉ bất kỳ như chứng chỉ tự ký (sử dụng openSSL), chứng chỉ hết hạn hoặc của domain nào khác v.v.. Dữ liệu giữa Cloudflare và máy chủ Hass được mã hoá bằng chứng chỉ này trong khi dữ liệu từ Cloudflare đến trình duyệt (hay ứng dụng, hay bên thứ 3 như Google Cloud) sẽ được mã hoá và chứng thực bởi Cloudflare, là chứng chỉ hợp lệ.
  • Tuỳ chọn Flexible sẽ sử dụng cùng chứng chỉ Cloudflare hợp lệ để phục vụ người dùng, còn dữ liệu từ Hass đến Cloudflare sẽ sử dụng giao thức http không mã hoá.
Giải thích Cloudflare SSL Option

Nếu bạn có sử dụng hoặc dự định sử dụng ứng dụng Home Assistant trên thiết bị iOS (iPhone, iPad), trong mục SSL/TLS, chọn tab Edge Certificates rồi chọn TLS 1.2 trong tuỳ chọn Minimum TLS Version.

!Hass: http hay httpS

Cloudflare sẽ che dấu địa chỉ IP thật sự của máy chủ Hass trong tất cả các truy cập qua domain. Vì vậy, để thuận tiện, bạn có thể chọn giao thức http cho máy chủ Hass. Lúc này bạn không cần cài đặt gì thêm trên Hass, chỉ cần forward port của Hass (8123) ra một trong các port quy định cho giao thức HTTP của Cloudflare. Ưu điểm của việc này là các truy cập trong mạng nội bộ đến Hass vẫn có thể sử dụng giao thức HTTP qua địa chỉ IP mà không bị cảnh báo sai chứng chỉ.

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 (xem Cố định IP trên HassOS / Armbian).

Tính năng Port Forwarding được cung cấp bởi hầu hết các router thông dụng và tuỳ vào mỗi router. Thông thường tính năng này nằm trong phần cấu hình Security hoặc WAN của router.

FPT G-97RG6M Router Port Forwarding
Tính năng Port Forwarding trên một mẫu router
Port Forwarding Padavan
Tính năng Port Forwarding trên router Padavan

Tuỳ theo router mà cách gọi khác nhau, thông thường là:

  • source port hay external port có nghĩa là port dùng nhận dữ liệu từ bên ngoài
  • destination port hay local port có nghĩa là port dịch vụ của máy chủ nội bộ
  • destination ip hay local ip / server có nghĩa là IP của máy chủ nội bộ
  • Protocol – phương thức, với Hass, bạn chọn TCP.
! Một số lưu ý về Port

Bạn hoàn toàn có thể chọn port bên ngoài là 8123 hoặc 443 (port mặc định của giao thức HTTPS), tuy nhiên nếu được, hãy chọn port ngẫu nhiên nằm ở khoảng 30,000 để hạn chế nguy cơ bảo mật.
Một số router hoặc mạng của bạn sử dụng port 80, 443 làm port truy cập giao diện điều khiển, do vậy không thể sử dụng các port này.

! Về Double NAT, HairPinning và CGNAT
  1. Double NAT có nghĩa là máy chủ Hass của bạn nằm sau một NAT nhưng NAT này lại nằm sau một NAT khác (dạng mô hình Router nhà mạng (LAN) —– (WAN) Router chính (LAN) —– máy chủ Hass).
    Khi này bạn cần forward port trên cả 2 router (NAT). Chỉ cần đảm bảo port ở giữa 2 NAT khớp nhau, ví dụ forward – chuyển dữ liệu từ port 32222 bên ngoài qua NAT 1 đến port 32222 (hoặc 8123 tuỳ ý) của NAT 2 rồi từ NAT 2 lại chuyển dữ liệu từ port 32222 bên ngoài đến port 8123 nội bộ của Hass.
    32222 —> NAT_1 – 32222 —> 32222 – NAT_2 —> 8123 Hass
  2. HairPinning là tính năng trên router giúp 2 máy nội bộ giao tiếp được với nhau qua địa chỉ IP bên ngoài (thay vì IP nội bộ). Nếu router của bạn không hỗ trợ tính năng này, bạn không thể truy cập Hass từ một máy cùng mạng (như điện thoại) qua IP bên ngoài (hay domain).
    Khi đó bạn cần mở tính năng này trên router hoặc khắc phục bằng cách khác (đổi router/cấu hình DNS server nội bộ/sửa file hosts v.v..)
  3. CGNAT – NAT ở mức độ doanh nghiệp, ở đây chính là nhà cung cấp dịch vụ Internet (VNPT, FPT, Viettel). Do số lượng địa chỉ IPv4 đã cạn kiệt, khả năng cao là nhà cung cấp dịch vụ của bạn sẽ áp dụng CGNAT giữa router của bạn và mạng bên ngoài. Khi này, chỉ Port forwarding trên router là không đủ. Bạn cần liên hệ với nhà cung cấp dịch vụ để yêu cầu thêm thông tin hoặc yêu cầu bỏ kết nối của bạn ra khỏi CGNAT. (câu “thần chú” thường dùng với tổng đài CSKH là “mở port để xem camera“, tuy nhiên bạn tự chịu trách nhiệm nếu “thần chú” không có tác dụng hoặc phản tác dụng)

Sau khi cấu hình Port Fordwarding thành công, bạn có thể thử truy cập vào trang web canyouseeme.org rồi nhập external port để xem có truy cập thành công qua port này hay không. Hass phải đang hoạt động bình thường để có kết quả chính xác.

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://konnected-vn.duckdns.org:32222
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Trong đó,

  • ssl_certificate: đường dẫn đến file chứng chỉ SSL đã lấy, nếu bạn cài đặt các cách 1, 2 hoặc 3 như mặc định thì không cần thay đổi
  • ssl_key: tương tự, là đường dẫn đến file chứa khóa riêng của server Hass
  • base_url: tuỳ chọn, là địa chỉ đầy đủ để truy cập Hass qua internet. Một số tích hợp khác sử dụng địa chỉ này để hoạt động hoặc hỗ trợ như platform tts.google_translate. Bạn có thể khai báo ở đây hoặc phải cấu hình riêng với mỗi tích hợp cần cấu hình này.
    Lưu ý port 32222 ở đây là port bên ngoài internet, không phải port 8123 nội bộ của Hass. Xem phần forward port ở trên.

* 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.

update Retina Cập nhật ngày 22/05/2020
Loại bỏ cấu hình base_url:

Home Assistant phiên bản 0.110 chuyển sang sử dụng tuỳ chọn internal_urlexternal_url thay vì base_url. Các tuỳ chọn này có thể được thiết lập tại trang quản lý tài khoản của người dùng chung Configuration > General hoặc bên dưới cấu hình homeassistant:(lưu ý, không phải http:) trong /config/configuration.yaml.

Đây là cấu hình cơ bản nhất của intergration http. Sau khi cấu hình, bạn khởi động lại Hass để áp dụng và lần này, nhớ thay đổi địa chỉ trình duyệt web truy cập Hass sang giao thức và địa chỉ mới (ví dụ http://192.168.1.9:8123 thành https://domain:32222).

Nếu bạn cấu hình thành công, từ giờ bạn sẽ truy cập được Hass qua địa chỉ domain với hình ổ khoá trên thanh địa chỉ web, báo hiệu cho kết nối HTTPS an toàn.

Lên Đầu
  • Đăng ký
Bạn quên mất mật khẩu? Vui lòng nhập tên đăng nhập và địa chỉ email đã đăng ký. Bạn sẽ nhận được liên kết tạo mật khẩu mới qua email (bạn nhớ kiểm tra hộp spam trong trường hợp email đi lạc).