Để nhắc mọi người, Home Assistant, ngay từ ban đầu, được phát triển và xây dựng với tiêu chí
“là nền tảng nhà thông minh đặt điều khiển nội bộ và riêng tư của người dùng lên trên hết”
home-assistant.io – Home Assistant là gì?
Tuy nhiên, trong quá trình triển khai, vì muốn đáp ứng nhu cầu của các thành viên trong gia đình, đa phần các máy chủ Home Assistant (Hass) đều được cấu hình để đánh đổi một phần khả năng điều khiển nội bộ và quyền riêng tư cho các tính năng khác: truy cập từ bên ngoài, sử dụng trợ lý ảo Google Assistant hay Alexa v.v.. Các tính năng này, ít hay nhiều, đều làm suy yếu khả năng điều khiển nội bộ và đảm bảo riêng tư của Hass.
Tin tốt là ta có thể khắc phục một phần các hạn chế này bằng cách cấu hình lại mạng nội bộ và Hass, như triển khai DNS nội bộ, V-LAN và Tường lửa.
Tin xấu là việc này tuỳ thuộc vào từng cá nhân và đôi khi đòi hỏi các thao tác phức tạp, có khả năng biến mạng nhà bạn thành vô dụng.
Hôm nay, ta sẽ bắt đầu với phần dễ nhất: xây dựng DNS nội bộ (local DNS).
Tại sao?
Xây dựng DNS nội bộ sẽ giúp bạn và Hass những lợi ích sau đây:
- Truy cập máy chủ Hass từ mạng nội bộ, qua tên miền mà không cần kết nối internet
- Không cần chuyển sang sử dụng địa chỉ IP nội bộ khi không có kết nối internet hoặc lỗi port forwarding, lỗi cập nhật IP DDNS
- Giải quyết tình trạng một số router không hỗ trợ Nat Loopback (Hairpinning) dẫn đến không thể truy cập Hass qua tên miền từ trong mạng nội bộ trong khi vẫn truy cập được từ bên ngoài
- Cấu hình các thiết bị SmartHome khác trong nhà sử dụng tên miền cho MQTT server, HTTP api, Websocket thay vì địa chỉ IP, do vậy khi thay đổi địa chỉ IP của máy chủ MQTT (Hass), không cần cấu hình lại tất cả thiết bị (như các thiết bị Tasmota) (1)
- Tăng tốc độ truy cập Hass/Web/Internet service từ mạng nội bộ
- Kiểm soát truy cập web và chặn quảng cáo qua tên miền một cách đơn giản (2)
- Tăng cường bảo mật và riêng tư khi sử dụng các dịch vụ của máy chủ Hass
(1) Điều này cũng có thể thực hiện được khi sử dụng tên miền .local trên các mạng hỗ trợ Multicast DNS (mDNS)
(2) Xem phần Biến máy chủ Hass thành máy chủ nội bộ ở dưới
Tình huống
Các vấn đề trong bài viết này chỉ có thể “ảnh hưởng” đến máy chủ Home Assistant của bạn nếu:
- Bạn sử dụng domain (kể cả duckdns.org) để truy cập Hass thay vì địa chỉ IP (nội bộ/công khai) như trong hướng dẫn này: truy cập Hass từ bên ngoài
- Bạn đang kết nối Hass vào một mạng gia đình thông thường, không phải là các mạng doanh nghiệp được cấu hình riêng
- Bạn có thể bị mất kết nối internet trong khi mạng nội bộ vẫn hoạt động như khi bị ngừng dịch vụ bởi nhà cung cấp dịch vụ, bị lỗi đường truyền và thiết bị v.v..
- Máy chủ Hass phải sử dụng IP nội bộ cố định và bạn đang thực hiện port forwarding – mở port với cùng một cổng giống nhau (ví dụ: 8123 -> 8123)
DNS
Viết tắt của Domain Name System – hệ thống phân giải tên miền. Các DNS phổ biến bao gồm:
- 208.67.222.222, 208.67.220.220 (OpenDNS)
- 8.8.8.8, 8.8.4.4 (GoogleDNS)
- 1.1.1.1,1.0.0.1 (CloudFlareDNS)
- 176.103.130.130, 176.103.130.131 (AdguardDNS)
- DNS của nhà cung cấp dịch vụ (210.245.24.20 – FPT, 203.113.131.1 – Viettel, 203.162.4.191 – VNPT)
Mỗi khi (thực ra không hẳn là mọi khi) bạn truy cập đến một trang web/dịch vụ, trình duyệt/ứng dụng sẽ gửi (nhiều) yêu cầu đến các máy chủ DNS để tìm kiếm địa chỉ IP của máy chủ ứng với tên miền đang truy cập. Hiểu nôm na tên miền dành cho con người còn IP dành cho máy và máy cần DNS để hiểu được giữa thế giới Internet mênh mông ngoài kia, cái con người cần phải lấy ở đâu.
Cùng với sự phổ biến của giao thức HTTPS, vai trò của tên miền và DNS càng trở nên quan trọng.
Tuy nhiên, như bạn có thể thấy, đa số DNS đều nằm trên Internet (và được quản lý bởi các bên thứ 3). Tức là sử dụng dịch vụ DNS đồng nghĩa với việc phải có kết nối internet.
Biến máy chủ Hass thành máy chủ DNS nội bộ
Như thường lệ, hướng dẫn này dành cho Home Assistant (đầy đủ, đi cùng Supervisor). Nếu chỉ sử dụng Home Assistant Core
, bạn cần cài đặt nó trực tiếp trên OS/Docker của máy chủ.
Bạn có thể dùng một trong hai addon sau:
- dnsmasq nếu chỉ muốn tạo máy chủ DNS đơn giản, nhanh gọn và nhẹ
- adguard nếu muốn triển khai chặn quảng cáo, truy cập đến các trang cấm, local DNS chỉ là tính năng phụ (tương tự pihole – đã bị loại bỏ)
Sử dụng Dnsmasq
Để tạo máy chủ DNS sử dụng dnsmasq trên cùng máy chủ vận hành Hass, bạn vào mục Supervisor, Add-on store, tìm kiếm “dns” như ảnh dưới.
Dnsmasq là một addon của Home Assistant vận hành như một máy chủ DNS gọn nhẹ và siêu đơn giản, sử dụng dnsmasq (xem thêm tại Archlinux).
Bạn vào addon Dnsmasq trong kết quả tìm kiếm rồi chọn CÀI ĐẶT.
Cấu hình của Dnsmasq như sau:
defaults: - 208.67.222.222 - 8.8.8.8 forwards: [] hosts: - host: domain_hass.duckdns.org ip: 192.168.1.10
Trong đó:
- 1
defaults:
là danh sách các máy chủ DNS mặc định được sử dụng khi tên miền cần phân giải IP không thuộc các nhóm được khai báo ở dưới - 4
forwards:
là danh sách tên miền và máy chủ DNS tương ứng được sử dụng cho tên miền đó, các yêu cầu DNS chứa tên miền sẽ được chuyển tiếp đến máy chủ DNS đã chọn (DNS forwarding) - 5
hosts:
là danh sách các tên miền và địa chỉ IP sẽ được trả về, đây là mục cần quan tâm nhất
Mỗi mục trong hosts
sẽ bao gồm host
là tên miền và ip
là địa chỉ IP tương ứng. Ví dụ ở đây ta sẽ cấu hình host
là domain dùng truy cập Hass từ bên ngoài nhưng ip
sẽ là ip nội bộ.
Tương tự, bạn cũng có thể cấu hình trả về IP cho các tên miền khác, ví dụ trả về IP của konnected.vn và facebook
... hosts: - host: domain_hass.duckdns.org ip: 192.168.1.10 - host: konnected.vn ip: 104.18.45.105 - host: facebook.com ip: 157.240.217.35
Hoặc chặn truy cập đến facebook.com (chỉ cho mục đích minh hoạ)
- host: facebook.com ip: 127.0.0.1
Sau mỗi lần cấu hình, bạn chọn LƯU LẠI rồi khởi động lại addon Dnsmasq.
Lưu ý: Bạn phải đánh dấu tuỳ chọn cho phép addon này khởi động cùng với Hass (mặc định).
Sử dụng Adguard
Adguard vốn là một addon dùng cho mục đích biến máy chủ Hass thành “cửa ngõ” chặn truy cập đến các mạng phân phối quảng cáo, tracking hoặc các trang web dành cho người lớn. Adguard được hỗ trợ chính thức bởi Home Assistant, thay cho PiHole trước đây.
Để cài đặt Adguard, bạn tìm “adg” trong mục Supervisor, Add-on store rồi chọn Adguard và CÀI ĐẶT.
Addon này không cần cấu hình phức tạp, sau khi cài đặt, bạn chọn KHỞI ĐỘNG để chạy addon.
Để thêm tên miền và ip nội bộ của máy chủ Home Assistant vào Adguard, bạn chọn MỞ TRANG QUẢN TRỊ (OPEN WEB UI) để truy cập giao diện báo cáo và cấu hình của Adguard.
Bạn chọn Menu như ảnh trên, chọn Filter, DNS rewrites.
Tiếp theo chọn Add DNS rewrite rồi thêm tên miền và địa chỉ IP nội bộ của máy chủ Hass tương tự như ảnh dưới.
Chạy song song Adguard và Dnsmasq
Không có lí do để bạn vận hành cả hai addon trên cùng lúc, tuy nhiên nếu bạn muốn, cần lưu ý:
- Cấu hình addon chính trong hai addon trên sử dụng cổng 53/udp là cổng mặc định của dịch vụ DNS
- Cấu hình addon còn lại sử dụng một cổng dịch vụ khác
- Thêm ip và cổng của addon phụ vào cấu hình tương ứng của addon chính hoặc điều chỉnh trong cấu hình dns của mạng như ở dưới
Cấu hình mạng sử dụng DNS vừa tạo
Sau khi cấu hình và vận hành thành công máy chủ DNS trên cùng máy chủ Hass như ở trên, bạn cần cấu hình mạng nội bộ sử dụng DNS này làm máy chủ DNS mặc định.
Cấu hình này có thể được thực hiện trên:
- Router hoặc mỗi router của một network segment (subnework) mà bạn muốn triển khai nếu bạn muốn áp dụng cho toàn mạng
- Trên cài đặt của mỗi thiết bị nếu bạn muốn áp dụng cho một vài thiết bị đơn lẻ
Cấu hình trên router
Thông thường, bạn sẽ cần truy cập vào giao diện quản lý của router (web) và cấu hình máy chủ DNS sẽ nằm trong mục LAN network, DHCP.
Lưu ý rằng nếu thiết bị được cấu hình để không sử dụng DHCP server hoặc sử dụng máy chủ DNS riêng, cài đặt trên Router sẽ không có tác dụng.
Trong cấu hình của Router, thêm địa chỉ IP nội bộ của máy chủ DNS/Hass vừa tạo làm DNS Server đầu tiên. Bạn nên thêm một địa chỉ DNS khác (như OpenDNS/GoogleDNS) làm địa chỉ DNS phụ, phòng trường hợp máy chủ DNS/Hass không thể truy cập.
Cấu hình trên thiết bị
Hầu hết các thiết bị (bao gồm máy tính, điện thoại, thiết bị Smart) đều cho phép cấu hình IP và DNS độc lập.
Trên điện thoại, bạn truy cập vào Cài đặt, WiFi, chọn mạng WiFi nội bộ. Sau đó chọn cấu hình DNS.
Cách hoạt động
Kiểm tra DNS
Sau khi hoàn tất các bước cấu hình ở trên, có thể bạn phải chờ một thời gian để thiết bị và router xoá bỏ bộ đệm DNS (DNS resolver cache) trước khi thay đổi có hiệu lực. Thời gian hiệu lực của bộ đệm DNS tuỳ thuộc vào thiết bị (OS) và thường sẽ ngắn hơn trên thiết bị di động so với máy tính. Bạn có thể “thúc đẩy” quá trình này bằng cách ngắt kết nối rồi kết nối lại vào mạng WiFi.
Để kiểm tra địa chỉ máy chủ DNS, trên máy tính, bạn có thể làm như sau để tạo một DNS request (yêu cầu phân giải tên miền):
Trong cả 2 ví dụ trên, nếu thành công, bạn sẽ thấy:
- Địa chỉ máy chủ DNS mặc định là IP nội bộ của máy chủ Hass (192.168.9.1)
- Địa chỉ IP nội bộ được trả về khi truy cập tên miền đã cấu hình thay vì IP công khai
Truy cập Hass trong nội bộ
Từ lúc này, khi bạn truy cập đến tên miền của máy chủ Hass, bạn sẽ được hướng về một IP nội bộ thay vì IP công khai (do nhà cung cấp dịch vụ cấp).
Các DNS request (yêu cầu phân giải tên miền) cũng không đi ra khỏi mạng nội bộ mà được chuyển đến máy chủ DNS/Hass đã cấu hình.
Lúc này, truy cập đến máy chủ Hass qua tên miền sẽ tương đương với truy cập qua IP nội bộ, bất kể có kết nối Internet hay không.
SSL Verify
Nếu bạn đang truy cập máy chủ Home Assistant qua một tên miền qua https với một chứng chỉ hợp lệ:
- Không ảnh hưởng khi có kết nối internet
- Không ảnh hưởng khi mạng nội bộ không có kết nối internet nhưng thiết bị có (Mobile Broadband WiFi Assist như trên iOS)
- Sẽ bị cảnh báo chứng chỉ không hợp lệ sau một thời gian với các trường hợp khác (3)
(3) Để tăng tốc, trình duyệt sẽ lưu tạm (cache) các yêu cầu xác thực chứng chỉ SSL trong một thời gian. Trình duyệt cần kết nối internet và kết nối đến tổ chức xác thực chứng chỉ để xác định một tên miền là hợp lệ.
Tăng tốc truy cập với local DNS
Việc đầu tiên một trình duyệt/ứng dụng làm khi nhận yêu cầu mở trang web chính là thực hiện truy vấn phân giải tên miền thành địa chỉ IP của máy chủ. Tiết kiệm được thời gian trả về kết quả phân giải tên miền chính là tăng tốc truy cập.
Ảnh dưới là những gì xảy ra khi truy cập giao diện của Hass qua tên miền, so sánh tốc độ truy cập từ mạng nội bộ sử dụng máy chủ DNS bên ngoài (8.8.8.8) và máy chủ nội bộ. Bên trên là thời gian chờ phân giải tên miền khi dùng máy chủ DNS bên ngoài (mainstream DNS), bên dưới là của máy chủ nội bộ.
Kết quả tương tự cũng áp dụng được cho các trang web khác.
Riêng tư và bảo mật
Điều quan trọng là các truy vấn DNS gửi đi sẽ không ra khỏi mạng nội bộ của bạn, tức không thể bị bên thứ 3 nghe lén. Tất nhiên, trừ phi bên thứ 3 lại là một thành viên của mạng (trojan?).
Mặc dù DNS request (truy vấn tên miền) có thể được thực hiện qua kết nối https trên nền tcp thay vì udp, hầu như toàn bộ DNS request vẫn được thực hiện dưới dạng văn bản thô sơ (plain text) và do đó dễ dàng bị nắm giữ bởi các bên thứ 3.
Và bạn đừng quên, Google chính là kẻ nghe lén vĩ đại nhất (kẻ thứ nhì chắc bạn cũng biết là ai rồi).
Sử dụng DNS nội bộ sẽ giữ cho tất cả các truy cập (ít nhất là đến máy chủ Hass) chỉ nằm trong mạng nội bộ của bạn. Trừ các truy vấn xác thực tên miền khi dùng https, tất nhiên.
Cuối bài
Có thể bạn cho rằng những điều trên không có gì quan trọng hoặc tình huống trên sẽ không bao giờ xảy ra với mình.
Hãy nhớ: phòng bệnh hơn chữa bệnh và luôn có ai đó rình rập bạn trên internet. Không phải vì bạn đặc biệt, vì bạn dễ bị khai thác hơn người khác.
Hãy làm mọi thứ có thể để giữ gia đình bạn an toàn!
- Sử dụng nhiều DNS server hoặc sử dụng nhiều IP cho cùng một domain? Được, bạn hãy đọc lại bài viết! Thiết bị sẽ tự động chuyển giữa các DNS hoặc giữa các IP trả về nếu các IP ban đầu không thể kết nối.
- Bạn đang sử dụng router có khả năng làm máy chủ DNS? Lời khuyên của chúng tôi là hãy sử dụng máy chủ trên Router trước.
Về Bài viết
Bài viết chưa đầy đủ hoặc bạn còn có ý kiến khác? Bạn có thắc mắc và cần thêm thông tin. Vui lòng đăng ý kiến vào mục bình luận để tác giả và Team có thêm thông tin cải thiện chất lượng bài viết. Chúng tôi sẽ giải đáp các thắc mắc ngay trong mục bình luận để giúp được nhiều đọc giả với cùng vấn đề hơn hoặc chúng tôi sẽ trả lời trong một bài viết riêng. Trân trọng cảm ơn bạn!
Cảm ơn bạn đã xem bài viết này!
konnectED Team.