Thông thường, các phương thức cấu hình máy chủ Home Assistant (Hass) để truy cập từ xa bao gồm dịch vụ Nabucasa – Home Assistant Cloud (nếu được bạn hãy sử dụng để ủng hộ nhóm phát triển) & thông qua Domain. Dịch vụ Nabucasa có phí 5USD (khoảng 120,000VND) mỗi tháng, không chỉ giúp truy cập từ xa mà còn giúp bạn dễ dàng liên kết Home Assistant với một số dịch vụ khác như Google Assistant, Alexa.
Trong khi đó, truy cập Hass thông qua DDNS (như duckdns.org) hay domain là miễn phí (ngoại trừ chi phí mua và duy trì domain riêng) tuy nhiên đòi hỏi bạn phải cấu hình mạng (cấu hình IP tĩnh, port-forwarding – “mở port”) phù hợp.
Vậy nếu bạn chỉ cần truy cập từ xa nhưng lại không muốn sử dụng Nabucasa và vì lí do gì đó không thể sử dụng DDNS thì sao?
Không thể sử dụng DDNS/Domain?
Một số lí do không thể sử dụng DDNS/domain:
- Bạn không có quyền truy cập và cấu hình router
- Home Assistant thuộc về một mạng bị hạn chế, không thể thực hiện port-forwarding như mạng 3G/4G hoặc sau CGNAT
- Bạn không thể cấu hình IP tĩnh cho máy chủ Home Assistant
- Home Assistant nằm trong một mạng bị giới hạn bởi firewall chỉ cho phép truy cập một số dịch vụ nhất định như web, smtp, pop (phổ biến với mạng doanh nghiệp)
Khi vướng phải các hạn chế trên, một số cách tương đối “đơn giản” để có thể truy cập Hass từ xa bao gồm:
- Kết nối máy chủ Hass và các thiết bị cần truy cập đến Hass qua một máy chủ VPN riêng, thông thường bạn sẽ phải tốn phí để tạo/thuê và duy trì máy chủ này
- Sử dụng SSH reverse tunnel (xem cách dùng) khá bất tiện
- Sử dụng mạng ngang hàng – p2p – peer-to-peer như ZeroNet
Tuy nói rằng đơn giản, trên môi trường máy chủ Home Assistant (HassOS/Linux), việc cấu hình và khởi tạo các kết nối trên đều rất phức tạp với người dùng thông thường.
Truy cập qua ZeroTier
ZeroTier và ZeroTier One
ZeroTier (zerotier.com) là dịch vụ và cũng là phần mềm giúp bạn kết nối tất cả các thiết bị của mình vào một mạng ngang hàng riêng qua kết nối Internet. Để dễ hiểu, ZeroTier sẽ giúp tạo một mạng ảo (virtual network) bao gồm tất cả các thiết bị (node) kết nối vào đó, thông qua đó, các thiết bị này có thể giao tiếp với nhau gần tương tự như khi ở trong cùng một mạng nội bộ (lan).
Để sử dụng dịch vụ này trên máy chủ Home Assistant, ta sẽ sử dụng addon ZeroTier One và các ứng dụng ZeroTier One trên máy khác.
Home Assistant Core
Nếu bạn không sử dụng Home Assistant Supervisor, bạn có thể cài đặt ZeroTier ngay trên hệ điều hành (OS) hoặc sử dụng Docker.
Cài đặt trực tiếp trên Linux: curl -s https://install.zerotier.com | sudo bash
Kết nối vào mạng sau khi cài đặt: sudo zerotier-cli join network-id
Ưu điểm của ZeroTier
Ưu điểm của việc sử dụng ZeroTier truy cập Hass từ xa:
- Cài đặt và cấu hình đơn giản trên Hass & các thiết bị dùng để truy cập (điện thoại, máy tính)
- Hỗ trợ rất nhiều nền tảng vận hành máy chủ Hass (Pi/SMC/NUC/VM/NAS v.v..)
- Không đòi hỏi bất cứ cấu hình đặc biệt nào trên máy chủ Hass và mạng như không đòi hỏi IP tĩnh, không cần port-forwarding
- Tốc độ truy cập Hass khá tốt
- Truy cập được tất cả các dịch vụ mạng khác trên máy chủ Hass như SMB, chặn quảng cáo, SSH
- Hỗ trợ đa dạng thiết bị cuối (iOS/Android/Windows/MacOS/Linux)
- Không ảnh hưởng đến việc truy cập đến các tài nguyên khác trên thiết bị cuối
- Có thể sử dụng với bất cứ cổng – port hợp lệ nào, do đó gần như không bị hạn chế bởi firewall
- Không ảnh hưởng đến hiệu năng & năng lượng của máy chủ và thiết bị cuối
Nhược điểm khi truy cập Hass qua ZeroTier
Nhược điểm chính khi bạn chỉ có thể truy cập Hass qua ZeroTier chính là không thể sử dụng domain, do vậy cũng không thể chứng thực quyền sở hữu domain khi triển khai https. Một số dịch vụ như Google Assistant, Google Translate đòi hỏi xác thực domain, do đó không thể sử dụng được, trong khi các dịch vụ không đòi hỏi xác thực domain như Spotify, Accuweather v.v.. không bị ảnh hưởng.
Một số nhược điểm khác:
- Phải cài đặt và kích hoạt ứng dụng hỗ trợ ZeroTier trên mỗi thiết bị tham gia mạng
- Trên một số thiết bị (như thiết bị chạy iOS), ZeroTier không thể đồng thời được kích hoạt cùng với dịch vụ VPN khác
Cài đặt và cấu hình ZeroTier trên Hass
Tạo tài khoản ZeroTier
Trước khi cấu hình addon ZeroTier One, bạn cần tạo một tài khoản (Free) trên website https://zerotier.com để sử dụng dịch vụ.
Truy cập: my.zerotier.com rồi chọn Login To ZeroTier > Register để đăng ký tài khoản. Đăng kí khá đơn giản với địa chỉ email và password.
Sau khi hoàn tất đăng ký, bạn sẽ nhận được email từ ZeroTier Central để xác thực địa chỉ email. Bấm vào liên kết trong email để xác thực và chuyển đến ZeroTier Central (my.zerotier.com), tất cả các networks (mạng) và nodes (thiết bị) của bạn sẽ được quản lý từ đây.
ZeroTier Free
Tài khoản ZeroTier miễn phí cho phép kết nối tối đa 100 thiết bị vào mạng. Các dạng tài khoản trả phí không giới hạn số thiết bị và chủ yếu khác nhau ở dịch vụ hỗ trợ.
Tạo network riêng cho các thiết bị truy cập Hass
Một tài khoản ZeroTier có thể tạo nhiều network (mạng). Để tạo network, bạn truy cập vào địa chỉ my.zerotier.com/network.
Bấm + Create a Network để tạo một mạng mới.
Tiếp theo điền các thông tin mô tả cho mạng mới tạo này.
Lưu ý: Không chọn PUBLIC cho mạng này
Tiếp theo, bạn có thể lựa chọn dải địa chỉ IP sẽ được gán cho các máy con, tương tự như khi cấu hình máy chủ DHCP. Lưu ý, chọn dải IP ít phổ biến để tránh lỗi định tuyến khi các thiết bị ở trong mạng nội bộ có dải IP tương tự (1).
Cuối cùng, copy lại Network ID để sử dụng cấu hình addon ZeroTier One và các thiết bị khác. Đây là chìa khoá duy nhất để kết nối vào mạng.
Các cấu hình bạn đã thực hiện sẽ được lưu tự động nhưng bạn đừng đóng cửa sổ trình duyệt vội.
(1) Thiết bị sẽ không phân biệt được địa chỉ IP 192.168.1.10 nằm trong mạng LAN hay trong mạng ZeroTier nếu 2 dải IP này trùng nhau.
Cài đặt addon ZeroTier One
Để cài đặt addon ZeroTier One, bạn vào Supervisor > Add-on store, tìm kiếm “zero” rồi chọn addon ZeroTier One trong kết quả tìm kiếm, bấm INSTALL để cài đặt.
* Sau khi hoàn tất cài đặt, bạn nhớ chọn Start on boot.
Chuyển đến mục Configuration trên addon ZeroTier One rồi thêm Network ID đã copy ở trên vào phần cấu hình networks:
của addon.
Lưu ý: có thể cấu hình để máy chủ Hass tham gia vào nhiều network khác nhau tạo bởi ZeroTier, ví dụ như khi bạn muốn tất cả các thiết bị đều truy cập được máy chủ Hass nhưng một số thiết bị sẽ không “nhìn thấy” những thiết bị khác trong mạng.
Sau khi cấu hình networks
, bạn chọn SAVE và START addon ZeroTier One để bắt đầu kết nối vào mạng ZeroTier đã tạo.
Cài đặt và tham gia mạng ZeroTier trên thiết bị
Trên các thiết bị còn lại (các thiết bị cần truy cập máy chủ Hass từ xa), bạn tải và cài đặt ứng dụng ZeroTier One để tham gia vào mạng.
Bạn có thể tải ứng dụng cho Windows/MacOS/Linux/iOS/Android/OpenWrt/FreeBSD/NAT tại: ZeroTier Download.
Bạn cũng có thể quét – scan QRcode bên dưới để tải ứng dụng ZeroTier One trên iOS & Android.
Sau khi cài đặt, mở ứng dụng ZeroTier One, chọn Tham gia mạng – Join network hoặc Thêm mạng rồi nhập cùng Network ID đã tạo trong ZeroTier Central (my.zerotier.com) để tham gia mạng.
Cho phép thiết bị tham gia mạng ZeroTier
Sau khi hoàn tất cài đặt, cấu hình và tham gia mạng trên máy chủ Home Assistant lẫn các thiết bị cuối, bạn quay lại trang ZeroTier Central (my.zerotier.com) để cho phép các thiết bị tham gia mạng. (với mỗi thiết bị mới, bạn phải làm lại bước này)
Chọn menu Networks (hoặc quay lại trang cấu hình mạng lúc nãy), chọn Network ID đã tạo để truy cập trang cấu hình.
Kéo xuống dưới để tìm mục Members, là nơi thể hiện danh sách các thiết bị tham gia mạng và cấu hình cho các thiết bị này.
Để CHO PHÉP một thiết bị được tham gia mạng (từ bây giờ về sau), bạn đánh dấu vào cột Auth?
tương ứng với thiết bị đó.
Bạn cũng có thể nhập tên và mô tả cho từng thiết bị để dễ quản lý.
Truy cập Hass từ xa qua mạng ZeroTier
Sau khi cho phép máy chủ Hass và thiết bị khác tham gia vào cùng một mạng, bạn có thể truy cập đến máy chủ Hass từ xa trên các thiết bị khác qua địa chỉ nội bộ (Managed IPs) thể hiện trong ZeroTier Central. Địa chỉ này sẽ không thay đổi cho đến khi bạn cấu hình lại network
hoặc thay đổi một số cài đặt trên thiết bị (xoá addon, xoá app).
Trong ví dụ trên, bạn có thể truy cập đến giao diện máy chủ Hass qua địa chỉ:
http://10.147.20.66:8123
hoặc https://10.147.20.66:8123
trong trường hợp sử dụng giao thức https.
Tương tự như trong mạng nội bộ – LAN, bạn cũng có thể kết nối đến dịch vụ Samba trên máy chủ Hass qua địa chỉ này.
Một vài lưu ý
Truy cập từ thiết bị cùng mạng nội bộ
Bạn có thể truy cập đến máy chủ Hass trên cùng mạng nội bộ qua cả hai địa chỉ thật và ảo (tạo bởi ZeroTier). Trong các mạng cho phép UDP Broadcast, không có khác biệt đáng kể nào giữa 2 cách này.
Cấu hình Firewall cho phép ZeroTier
Trên nhiều hệ điều hành – như Windows, bạn cần cấu hình Firewall/Chương trình bảo mật để cho phép ứng dụng ZeroTier One kết nối Internet. Cách cấu hình tương tự như khi bạn cấu hình cho phép các ứng dụng khác.
Cấu hình cổng – port cho ZeroTier
Mặc định, ZeroTier sử dụng cổng 9993 (cổng ra) và giao thức UDP (trên mỗi thiết bị) để kết nối. Giữ nguyên cổng này có lợi về hiệu suất hoạt động của ZeroTier cũng như thiết bị.
Tuy nhiên nếu không thể kết nối trên cổng này (như khi bị Firewall chặn), bạn có thể cấu hình một cổng khác trong addon ZeroTier One, mục Network.
Cần lưu ý:
- Các cổng ít bị chặn ở môi trường doanh nghiệp: 80/443 (web-http/https), 25/465/587 (email)
- Bạn có thể sử dụng hầu như mọi cổng hợp lệ, tuy nhiên KHÔNG sử dụng các cổng đang sử dụng trên thiết bị (máy chủ Hass). Các cổng này thường là 8123 (Hass), 445 (Samba), 1194 (OpenVPN) v.v..
Cấu hình Router
ZeroTier được biết (từ nhiều năm trước) là hoạt động “trơn tru” trong đa số trường hợp. Tuy nhiên, đôi khi có thể gặp vấn đề kết nối và tốc độ cũng như độ ổn định khi:
- Thiết bị nằm sau quá nhiều bộ biên dịch địa chỉ (NAT)
- Thiết bị nằm sau một NAT dạng symmetric (đối xứng – ít phổ biến)
- Thiết bị nằm trong một mạng bị giới hạn, vô hiệu hoá kết nối UDP
Sử dụng ZeroTier như VPN
Mặc dù khá giống VPN (mạng riêng ảo), ZeroTier sử dụng trong bài này chưa phải là một giải pháp VPN. Để thực sự biến máy chủ Hass chạy ZeroTier thành một máy chủ VPN (tham khảo: Home Assistant – máy chủ VPN Wireguard), bạn cần phải kích hoạt NAT và IP Forwarding cũng như cấu hình network route phù hợp trên máy chủ Hass. Bên cạnh đó, cũng cần bổ sung một số route (định tuyến) trong network bạn đã tạo, sử dụng ZeroTier Central (my.zerotier.com).
Sử dụng Adguard/Pi-Hole từ bên ngoài
Nếu bạn đang vận hành dịch vụ chặn quảng cáo sử dụng DNS như Adguard/Pi-Hole và muốn sử dụng từ bên ngoài, chỉ cần cài đặt địa chỉ IP của máy chủ Adguard/Pi-Hole làm địa chỉ DNS đầu tiên trên các thiết bị tham gia cùng mạng trong ZeroTier.
Bên cạnh đó, bạn cũng có thể cấu hình Flow Rules
, sử dụng ZeroTier Central để “chuyển” các yêu cầu phân giải gửi đến một địa chỉ máy chủ DNS (như 8.8.8.8 – Google DNS) về địa chỉ máy chủ Adguard/Pi-Hole.
Như rule sau:
# Accept anything else. This is required since default is 'drop'. accept; # Redirect DNS Requests to 8.8.8.8 redirect 10.147.20.66 ipdest 8.8.8.8/32 or ipdest 8.8.4.4/32 ; # End redirect DNS Request to 8.8.8.8
Lỗi kết nối trên thiết bị di động
Đôi khi bạn sẽ gặp lỗi không thể truy cập web và một số dịch vụ khác sau khi ngắt kết nối vào mạng ZeroTier đã tạo. Lỗi này thường do hệ điều hành không thực hiện đúng việc routing (định tuyến) và có thể gặp trên cả iOS lẫn Android.
Để khắc phục bạn có thể thử vô hiệu hoá kết nối (WiFi) rồi kích hoạt lại kết nối.
Sử dụng song song ZeroTier và các giải pháp truy cập từ xa khác
Bạn hoàn toàn có thể sử dụng ZeroTier như một giải pháp truy cập từ xa chính hoặc phụ cùng với các giải pháp thông thường như DDNS. Sẽ rất có ích nếu vì lỗi gì đó mà DDNS không thể cập nhật IP hoặc port-forwarding bị vô hiệu hoá v.v.. (xem thêm: khắc phục nhanh lỗi Duckdns)
Cảm ơn bạn đã xem bài viết này!
konnectED Team.