Искаш да отвориш таблото на Home Assistant от влака. Рутерът казва не: доставчикът те е сложил зад CGNAT, или пренасочването на портове е технически възможно, но не искаш да закачиш цялата домашна мрежа в интернет, за да светнеш една лампа. Малък VPS решава и двете. Домът ти се свързва навън към него през WireGuard, а VPS-ът е единственото публично лице: с истински домейн, истински сертификат и нищо вкъщи, което да слуша света.
Как работи схемата
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
VPS-ът пуска две неща: WireGuard сървър и Caddy като reverse proxy. Вкъщи WireGuard клиент (на хоста на Home Assistant, на Raspberry Pi или на рутера) държи тунела отворен. Когато отвориш https://ha.example.com, Caddy препраща заявката през тунела към 10.8.0.2:8123.
Какво ти трябва
- План с dedicated IP. VPS-ът трябва да приема входящ 443 и UDP 51820. Nano-IP за $8/месец е повече от достатъчен: пренася няколко килобайта трафик от таблото без никакво усилие. NAT плановете не приемат входящи връзки освен личния ти SSH порт (как работи NAT тук).
- Домейн с A запис, който сочи към IP-то на VPS-а.
- WireGuard клиент вкъщи, който стига до Home Assistant в локалната мрежа.
1. WireGuard сървър на 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. Домашната страна
На която и да е Linux машина вкъщи (или в добавката WireGuard клиент на Home Assistant) създай peer-а. Keepalive-ът е важен: държи тунела отворен през NAT-а на домашния рутер.
[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
Ако WireGuard клиентът работи на друга машина, а не на Home Assistant, пренасочи 10.8.0.2:8123 към хоста на HA в локалната мрежа, или по-просто: пусни клиента на самия хост на HA.
3. HTTPS с Caddy
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
Caddy взима сертификата автоматично и обслужва WebSocket връзката, на която разчита приложението на Home Assistant.
4. Кажи на Home Assistant да вярва на proxy-то
Без това HA отхвърля заявките, минали през proxy. В configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Рестартирай Home Assistant, отвори https://ha.example.com и задай този URL като външен адрес в мобилното приложение.
Компромисите, честно
HTTPS свършва на VPS-а, така че този сървър вижда трафика от таблото нешифрован, преди да влезе в тунела. Сървърът е твой и точно това е смисълът, но го третирай като част от домашната мрежа: само SSH ключове, включени обновления и нищо друго да не работи на него. Остави включени паролата и двуфакторния вход на Home Assistant; proxy-то не е слой за автентикация.
Официалната платена облачна услуга на екипа на Home Assistant върши същата работа без никаква поддръжка и финансира проекта. Ако изобщо не искаш да поддържаш сървър, това е напълно добър отговор. Пътят с VPS печели, когато вече хостваш сам, искаш собствен домейн или смяташ по-късно да сложиш и други домашни услуги зад същия тунел.
Свързани ръководства
- Настройка на WireGuard VPN на VPS: пълното ръководство за WireGuard
- Nginx reverse proxy с HTTPS: ако предпочиташ Nginx пред Caddy
- Защита на нов VPS: направи го първо на всяка машина, която гледа към интернет
Коментари
Още няма коментари. Бъди първият.