Home Assistant

Home Assistant: DNS và truy cập nội bộ

Nest Service Down

Truy cập Home Assistant khi kết nối internet gián đoạn và biến máy chủ Hass thành máy chủ chặn quảng cáo, tăng tốc độ truy cập internet

Photo: androidpolice.com
23 phút để đọc hết nội dung

Để 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ộriêng tư của người dùng lên trên hết”

home-assistant.io – Home Assistant là gì?

Home Assistant: nền tảng nhà thông minh cho điều khiển nội bộ và riêng tư
Tiêu chí được đặt ngay đầu trang chủ home-assistant.io

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:

  1. Truy cập máy chủ Hass từ mạng nội bộ, qua tên miềnkhông cần kết nối internet
  2. 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
  3. 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
  4. 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)
  5. Tăng tốc độ truy cập Hass/Web/Internet service từ mạng nội bộ
  6. Kiểm soát truy cập webchặn quảng cáo qua tên miền một cách đơn giản (2)
  7. Tăng cường bảo mậtriê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)

(?) Không truy cập được qua domain thì chuyển sang IP, có gì đâu?
Không sai nhưng bất tiện. Bạn sẽ phải nhớ domain và ip, bạn sẽ phải “canh” chuyển sang IP khi domain không hoạt động. Các thành viên khác sẽ không thể nào phân biệt được lúc nào dùng domain, lúc nào dùng IP. Và bạn sẽ không sử dụng được các lợi ích còn lại của local DNS.

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.

DNS Hass

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 hostdomain 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.vnfacebook

...
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 AdguardCÀI ĐẶT.

Hass Chặn Quảng Cáo
AdGuard trong Hass

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ềnip 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.

Hass Adguard Settings
Truy cập phần thiết lập 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.

Truy cập Hass nội bộ
Thay đổi bằng tên miền và IP của bạn

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ài đặt DNS trên TP-Link
Cấu hình DNS trên router TP-Link
Cài đặt DNS trên router Asus/Padavan
Cấu hình DNS trên router ASUS/Padavan
Cấu hình DNS trên router GPON FPT
Cấu hình DNS trên router GPON FPT

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ấu hình DNS trên iPhone iOS
Cấu hình DNS trên iOS
Cấu hình DNS trên MacOS
MacOS cho phép thêm số lượng DNS server tuỳ ý
Cấu hình DNS trên Windows
Windows yêu cầu không sử dụng máy chủ DHCP nếu muốn dùng DNS tuỳ chỉnh

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):

Mac NS Lookup
Trên MAC, sử dụng Terminal
Windows NS Lookup
Trên Windows, sử dụng CMD

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

DNS bên ngoài so với DNS nội bộ
DNS nội bộ giảm đáng kể thời gian phân giải khi không có cache

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.

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