Bạn muốn mở bảng điều khiển Home Assistant khi đang ngồi trên tàu. Router nói không: nhà mạng đặt bạn sau carrier-grade NAT, hoặc có thể mở cổng nhưng bạn không muốn phơi cả mạng gia đình ra internet chỉ để bật một bóng đèn. Một VPS nhỏ giải quyết cả hai. Ngôi nhà của bạn kết nối ra ngoài tới nó qua WireGuard, và VPS là bộ mặt công khai duy nhất: với tên miền thật, chứng chỉ thật và không có gì trong nhà lắng nghe thế giới bên ngoài.
Cách thiết lập hoạt động
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
VPS chạy hai thứ: một máy chủ WireGuard và Caddy làm reverse proxy. Ở nhà, một máy khách WireGuard (trên máy chạy Home Assistant, một Raspberry Pi hoặc router) giữ đường hầm luôn mở. Khi bạn truy cập https://ha.example.com, Caddy chuyển yêu cầu qua đường hầm tới 10.8.0.2:8123.
Bạn cần gì
- Một gói có IP riêng. VPS phải nhận cổng 443 và UDP 51820 đi vào. Nano-IP giá $8 mỗi tháng là dư dả: nó chỉ chuyển vài kilobyte lưu lượng bảng điều khiển mà không tốn sức. Gói NAT không nhận kết nối đi vào ngoài cổng SSH cá nhân của bạn (NAT hoạt động thế nào ở đây).
- Một tên miền có bản ghi A trỏ tới IP của VPS.
- Một máy khách WireGuard ở nhà có thể truy cập Home Assistant trong mạng nội bộ.
1. Máy chủ WireGuard trên VPS
apt update && apt install -y wireguard caddy
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
chmod 600 /etc/wireguard/server.key
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = $(cat /etc/wireguard/server.key)
[Peer]
# the home side
PublicKey = HOME_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
EOF
systemctl enable --now wg-quick@wg0
ufw allow 51820/udp && ufw allow 80,443/tcp
2. Phía ngôi nhà
Trên bất kỳ máy Linux nào ở nhà (hoặc trong add-on máy khách WireGuard của Home Assistant), hãy tạo peer. Keepalive rất quan trọng: nó giữ đường hầm mở xuyên qua NAT của router gia đình.
[Interface]
Address = 10.8.0.2/24
PrivateKey = HOME_PRIVATE_KEY
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = ha-vps.example.com:51820
AllowedIPs = 10.8.0.1/32
PersistentKeepalive = 25
Nếu máy khách WireGuard chạy trên máy khác với Home Assistant, hãy chuyển tiếp 10.8.0.2:8123 tới máy HA trong mạng nội bộ; hoặc đơn giản hơn, chạy máy khách ngay trên máy HA.
3. HTTPS với Caddy
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
Caddy tự động lấy chứng chỉ và xử lý kết nối WebSocket mà ứng dụng Home Assistant dựa vào.
4. Bảo Home Assistant tin tưởng proxy
Nếu thiếu bước này, HA sẽ từ chối các yêu cầu đi qua proxy. Trong configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Khởi động lại Home Assistant, mở https://ha.example.com và đặt URL đó làm địa chỉ bên ngoài trong ứng dụng di động.
Những đánh đổi, nói thật
HTTPS kết thúc tại VPS, nên máy chủ đó thấy lưu lượng bảng điều khiển ở dạng văn bản rõ trước khi đi vào đường hầm. Máy chủ là của bạn, và đó chính là mục đích, nhưng hãy coi nó như một phần của mạng gia đình: chỉ dùng khóa SSH, bật cập nhật, không chạy gì khác trên đó. Luôn bật mật khẩu Home Assistant và đăng nhập hai lớp; proxy không phải là một lớp xác thực.
Dịch vụ đám mây chính thức trả phí của đội ngũ Home Assistant làm cùng việc này mà không cần bảo trì và còn tài trợ cho dự án. Nếu bạn hoàn toàn không muốn vận hành máy chủ, đó là một câu trả lời rất tốt. Con đường VPS thắng thế khi bạn đã tự lưu trữ, muốn dùng tên miền riêng, hoặc sau này muốn đặt các dịch vụ khác trong nhà phía sau cùng đường hầm.
Hướng dẫn liên quan
- Thiết lập VPN WireGuard trên VPS: hướng dẫn WireGuard đầy đủ
- Reverse proxy Nginx với HTTPS: nếu bạn thích Nginx hơn Caddy
- Bảo mật VPS mới: làm điều này trước tiên trên mọi máy hướng ra internet
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.