Máy chủ VPN (trên Hass trong hướng dẫn này) sẽ giúp bạn kết nối từ bên ngoài vào trong mạng nội bộ của mình thông qua kết nối Internet. Khi này, bạn sẽ “được đối xử” như đang truy cập từ một máy trong mạng nội bộ (về lý thuyết), do đó có thể:
- Truy cập đến tài nguyên bên trong mạng gia đình như bộ lưu trữ mạng (NAS)
- Truy cập đến các thiết bị khác trên mạng nội bộ như đang ở nhà
- Truy cập đến các dịch vụ cung cấp bởi máy chủ trong mạng, kể cả dịch vụ cung cấp bởi máy chủ Home Assistant qua địa chỉ ip nội bộ
- Truy cập đến tất cả dịch vụ bên ngoài qua đường truyền và định danh (IP) của mạng nội bộ (như IPTV, web)
Ngoài ra, kết nối internet thông qua VPN từ máy chủ gia đình còn giúp mã hoá toàn bộ thông tin nhận/gửi từ thiết bị của bạn kể cả DNS request – yêu cầu phân giải tên miền. Do vậy, bạn sẽ tránh được việc bị “theo dõi/nghe lén” các trang web đã truy cập thông qua tên miền, thông tin nhận gửi, cũng như tránh được một số giới hạn các dịch vụ hay cổng không được phép truy cập từ mạng hiện tại.
Hạn chế của VPN
Tuy vậy, VPN cũng có một số hạn chế sau:
- Một số dịch vụ/giao thức mặc định không được tự động chuyển tiếp hay cho phép đi qua VPN như multicast, do vậy các dịch vụ như mDNS, Zeroconf không khả dụng qua VPN
- Bạn vẫn sẽ vấp phải giới hạn của mạng nội bộ (như băng thông) và cả giới hạn của mạng hiện tại
- Một số mạng chỉ mở các cổng hạn chế, do vậy kết nối VPN có thể không thực hiện được
- Phải cài đặt phần mềm/ứng dụng trên mỗi thiết bị truy cập và phải thao tác kết nối/ngừng kết nối
Các giao thức VPN phổ biến
PPTP: giao thức phát triển bởi Microsoft, có từ thời Windows 95 đã rất cũ. PPTP có thể không còn được hỗ trợ trên thiết bị/hệ điều hành của bạn. Mac OS mới nhất (Catalina) đã loại bỏ hoàn toàn việc hỗ trợ PPTP khỏi nhân – kernel.
L2TP/IPSec: được thiết kế bởi Cisco, vẫn được dùng phổ biến cho đến tận ngày nay.
OpenVPN: mã nguồn mở, được tạo ra bởi James Yonan. Có lẽ là giao thức VPN phổ biến nhất hiện tại.
WireGuard: giao thức VPN mới, nhẹ hơn, dễ cài đặt hơn OpenVPN. Wireguard cũng được cho là có tốc độ cao hơn OpenVPN.
(trong một số bài test, WireGuard cho tốc độ nhanh đến hơn 50% so với OpenVPN khi kết nối đến máy chủ ở gần – độ trễ thấp)
VPN trên Hass
Hay nói cách khác là:
cài đặt, cấu hình và vận hành một máy chủ VPN trên cùng máy chủ vật lý đang vận hành Home Assistant
Trong bài viết này ta sẽ cài đặt máy chủ VPN sử dụng giao thức Wireguard và quản lý máy chủ này qua công cụ Supervisor của Home Assistant.
OpenVPN
Bạn quen sử dụng OpenVPN hơn? Có thể cài đặt máy chủ OpenVPN riêng rẽ trên cùng máy chủ vật lý Home Assistant, sử dụng các hướng dẫn cài đặt OpenVPN có rất nhiều trên Internet.
Lưu ý các vấn đề bảo mật khi sử dụng các hướng dẫn hoặc script hỗ trợ có sẵn.
Để quản lý các máy chủ OpenVPN này trên Home Assistant, bạn có thể sử dụng iframe để “nhúng” giao diện quản lý của OpenVPN vào giao diện của Home Assistant.
Các yêu cầu tối thiểu
Để sử dụng được và dễ dàng quản lý máy chủ VPN WireGuard từ Home Assistant, bạn phải đáp ứng được các yêu cầu sau:
- Máy chủ Home Assistant (ít nhất bao gồm Home Assistant Core và Supervisor) với kết nối internet
- Địa chỉ IP của mạng gia đình do ISP (nhà cung cấp dịch vụ internet cấp). Có thể bạn sẽ cần dịch vụ DDNS nếu IP không phải là IP tĩnh.
- Khả năng forward port – chuyển tiếp cổng từ router chính đến máy chủ Hass/VPN (chi tiết về NAT và portforwarding)
- Ứng dụng WireGuard được cài đặt trên thiết bị cuối – gần như mọi thiết bị đều cài đặt được (xem ở dưới: cài đặt ứng dụng WireGuard)
Cài đặt Wireguard trên Hass
Trên giao diện quản lý của Home Assistant, bạn vào mục Supervisor, Addon-store, tìm WireGuard trong ô tìm kiếm.
Bấm vào add-on WireGuard để truy cập trang thông tin add-on rồi ấn INSTALL để cài đặt. Bạn phải chờ vài phút để hoàn tất cài đặt add-on.
WireGuard hỗ trợ hầu như tất cả các cấu trúc CPU bao gồm amd64, i386, armv8, armhf, armv7 v.v.. Nếu không tìm thấy WireGuard trong mục Addon-store, chọn dấu “…” ở góc trên bên phải màn hình, chọn Reload – Tải lại rồi thử tìm lại. Nếu vẫn không có nghĩa là hiện tại, add-on WireGuard không hỗ trợ hệ thống của bạn.
Để tiết kiệm tài nguyên hệ thống, bạn có thể bỏ tuỳ chọn [x] Start on boot để add-on WireGuard không tự khởi động cùng Hass. Bạn sẽ tự khởi động add-on mỗi khi cần kết nối VPN.
Cấu hình Wireguard
Sau khi hoàn tất cài đặt, bạn chuyển sang mục Cấu hình – Configuration để tiến hành cấu hình add-on WireGuard.
Cấu hình server
Trong mục server:
- Cấu hình
host:
với domain truy cập Hass (ví dụ Truy cập Home Assistant từ bên ngoài) hoặc domain bất kỳ được cập nhật với ip wan của bạn hoặc địa chỉ IP (do ISP cấp) nếu dùng IP tĩnh - Cấu hình
addresses:
với địa chỉ local của server, bạn có thể để như mặc định hoặc thay đổi thành địa chỉ IP dành riêng cho mạng Local.
Lưu ý không nên chọn các địa chỉ quá phổ biến như 192.168.0.1 và không cấu hình IP này trùng với dải IP mạng nhà bạn đang dùng.
Địa chỉ này phải cùng dải IP với các địa chỉ của máy con – client sẽ được cấu hình ở bước sau. - (tuỳ chọn) Cấu hình
dns:
với danh sách các máy chủ DNS (ví dụ 208.67.222.222 – OpenDNS) mà máy con sẽ sử dụng, bạn có thể chỉ định cả các DNS nội bộ (như của Adguard hay Pi Hole).
Lưu ý khi chỉ định máy chủ DNS nội bộ, bạn nên bổ sung cả DNS bên ngoài để tránh trường hợp DNS nội bộ bị lỗi & không nên sử dụng Google DNS nếu bạn lo lắng về quyền riêng tư.
Các DNS thông dụng: 8.8.8.8 và 8.8.4.4 (GoogleDNS), 208.67.222.222 và 208.67.220.220 (OpenDNS), 1.1.1.1 (CloudflareDNS).
Cấu hình peers
Mục peers:
dùng để cấu hình tất cả máy con sẽ kết nối và đi qua VPN server. Để đảm bảo tốc độ, hiệu suất và bảo mật, bạn nên cấu hình riêng cho mỗi thiết bị sẽ kết nối vào VPN Wireguard trong Home Assistant thay vì dùng chung một cấu hình.
Cấu hình của một peer:
name:
tên gợi nhớ của thiết bị, ví dụ duy-phone, dài tối đa 32 kí tự, bao gồm chỉ chữ và số hoặc dấu “-” ở giữa- (tuỳ chọn)
addresses:
danh sách các địa chỉ IP sẽ được dành riêng để gán cho máy con – client này, phải cùng dải ip với cấu hìnhserver.addresses
ở trên - (tuỳ chọn)
client_allowed_ips:
danh sách các địa chỉ IP mà client được phép truy cập qua VPN server (tunnel) này, các truy cập đến địa chỉ khác sẽ không đi qua VPN.
Ví dụ nếu bạn muốn client chỉ truy cập đến mạng nội bộ (có IP 192.168.0.x) qua VPN thì chỉ cần cấu hình với một dải ip duy nhất 192.168.0.0/16. - (tuỳ chọn)
peers.public_key:
cung cấp public key của client thay vì để add-on tự tạo. Nếu bạn có thể tạo public key thì nên sử dụng tuỳ chọn này để tăng cường bảo mật.
Lấy cấu hình cho Client
Sau khi cấu hình add-on, bạn chọn SAVE để lưu lại rồi khởi động/khởi động lại add-on để áp dụng cấu hình mới (kể cả mỗi khi thêm cấu hình peer
mới).
Nếu cấu hình đúng và add-on khởi động thành công, các cấu hình dành cho client sẽ được tạo tự động và nằm trong thư mục /ssl/wireguard/<tên client>/
.
Bạn có thể sử dụng Samba addon, SSH hoặc bất cứ công cụ nào khác để truy cập thư mục này.
Bên trong thư mục /ssl/wireguard/
là các thư mục con chứa cấu hình tương ứng với mỗi peer
đã cấu hình, bao gồm một file có phần mở rộng .conf
để “import” vào ứng dụng WireGuard và một file qrcode.png
để scan thay vì import.
Lưu ý bảo mật
Bạn phải giữ các file cấu hình này an toàn vì bất cứ ai có các file này đều có thể kết nối vào VPN server từ bên ngoài và có các quyền truy cập tương đương như đang kết nối vào mạng nội bộ của bạn, bao gồm cả quyền “nghe lén” các gói tin đang truyền trong mạng để sử dụng cho mục đích tấn công.
Sau khi lấy được cấu hình, bạn cần thực hiện bước cuối Chuyển tiếp cổng để hoàn tất thiết lập VPN server trên Hass.
Chuyển tiếp cổng / Port forwarding
Tương tự với các máy chủ dịch vụ khác (như Home Assistant hay web), bạn cần “forward” cổng dịch vụ 51820 của máy chủ WireGuard để truy cập và kết nối được từ mạng bên ngoài.
Lưu ý WireGuard sử dụng giao thức UDP thay vì TCP, bạn cần chọn giao thức này khi thực hiện Port forwarding.
Nếu chưa biết cách Forward cổng, bạn có thể tham khảo phần Port forwarding trong hướng dẫn truy cập Hass từ xa trước đây.
Khởi tạo kết nối VPN trên thiết bị
Cài đặt ứng dụng WireGuard
Cách cài đặt ứng dụng WireGuard khác nhau tuỳ theo thiết bị và hệ điều hành. Hướng dẫn và tải về bạn có thể xem ở đây: Cài đặt WireGuard.
Trên iOS, tải về từ AppStore / Trên Android, tải về từ PlayStore.
Hoặc trên điện thoại, quét mã QR sau để cài đặt:
Kết nối đến VPN server từ App
Trên ứng dụng WireGuard, bạn có hai lựa chọn để nhập – import cấu hình trước khi kết nối, bao gồm sử dụng file cấu hình .conf
và quét QR code. Tuỳ theo thiết bị mà bạn lựa chọn cách phù hợp.
Sau khi “import” cấu hình, chọn Activate để khởi tạo kết nối VPN. Nếu kết nối thành công, bạn sẽ thấy các thông số như IP của mạng đích, IP do VPN server cấp thể hiện trong ứng dụng.
Để kiếm tra, hãy thử truy cập giao diện Home Assistant hoặc router qua địa chỉ IP nội bộ.
Truy cập NAS qua VPN
Như đã nói ở phần đầu, một số giao thức sẽ không được (mặc định) chuyển tiếp qua VPN hoặc không hoạt động được qua VPN. Nếu bạn sử dụng giao thức SMB (Samba) trên NAS, ổ cứng mạng này sẽ không được tự phát hiện trong mục Network của máy tính.
Kể cả khi bạn truy cập file cấu hình Home Assistant sử dụng addon Samba, máy chủ Home Assistant cũng không tự động được tìm thấy trong mục Network.
Bạn cần kết nối thủ công đến địa chỉ máy chủ NAS để truy cập được.
Trên Windows, chọn Start > Run rồi gõ \\192.168.1.10
để kết nối đến máy chủ NAS tại địa chỉ 192.168.1.10.
Trên MAC OS, trong Finder, chọn Go > Connect to Server rồi nhập smb://192.168.1.0
để kết nối.
Một số lưu ý khác
WireGuard không trên HassOS
Nếu bạn không vận hành Home Assistant sử dụng phương thức cài đặt qua HassOS (ví dụ sử dụng Cài đặt Hass qua Docker trên Ubuntu, Raspbian, Armbian), có thể WireGuard không được hỗ trợ sẵn trong nhân – kernel của hệ điều hành.
Khi đó add-on WireGuard sẽ hiển thị thông báo sau trong log – nhật ký của addon:
“Missing WireGuard kernel module. Falling back to slow userspace implementation.”
Add-on vẫn sẽ hoạt động như bình thường nhưng hiệu suất sẽ thấp hơn.
Bạn có thể xem xét cài đặt WireGuard ngay trên hệ điều hành để khắc phục.
Còn nếu bạn nhận được thông báo lỗi:
“IP forwarding is disabled on the host system!”
có nghĩa rằng hệ điều hành không cho phép chuyển tiếp gói tin giữa các giao tiếp mạng. Thử chạy các lệnh sau qua SSH hoặc console trên hệ điều hành nếu bạn dùng Ubuntu, Debian:
sudo sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf
Tường lửa
Một số hệ điều hành đi kèm tường lửa – firewall như Ubuntu đi kèm ufw. Bạn cần mở cổng 51820 trên tường lửa hoặc cấu hình cho phép ứng dụng WireGuard được phép gửi và nhận dữ liệu thông qua tường lửa, tương tự như khi cấu hình Hass hoặc MQTT broker.
Bảo mật VPN
Nếu bạn muốn sử dụng kết nối VPN để bảo mật thông tin cá nhân, cần đảm bảo tất cả truy cập trên mạng của bạn đều được route – định tuyến qua VPN tunnel. Hãy quay lại xem cấu hình peers.client_allowed_ips
ở bước cấu hình add-on WireGuard.
Cấu hình peers.client_allowed_ips
để chỉ cho phép một số truy cập đi qua VPN sẽ khiến tất cả truy cập còn lại không được mã hoá và vẫn đi qua Router trên mạng hiện tại như bình thường.
Cảm ơn bạn đã xem bài viết này!
konnectED Team.