Хочеться відкрити дашборд Home Assistant з електрички, а роутер проти: провайдер тримає вас за CGNAT, або прокидання технічно можливе, але вішати всю домашню мережу на інтернет заради однієї лампочки не хочеться. Маленький VPS розв'язує обидві проблеми. Дім сам підключається назовні до VPS через WireGuard, а публічне обличчя — лише цей сервер: зі справжнім доменом, справжнім сертифікатом і без жодного домашнього порту, відкритого світу.
Як це влаштовано
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.
Що знадобиться
- Тариф із виділеним IP. VPS має приймати вхідні 443 і UDP 51820. Nano-IP за $8/міс — з великим запасом: він ганяє кілобайти трафіку дашборда й навіть не помічає навантаження. NAT-тарифи не приймають вхідних з'єднань, окрім персонального SSH-порту (як працює NAT).
- Домен з A-записом на IP сервера.
- Клієнт 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) створіть пір. 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 довіряти проксі
Без цього HA відхиляє запити через проксі. У configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Перезапустіть Home Assistant, відкрийте https://ha.example.com і вкажіть цю адресу як зовнішню в мобільному застосунку.
Чесно про компроміси
HTTPS завершується на VPS, тож цей сервер бачить трафік дашборда у відкритому вигляді, перш ніж той піде в тунель. Сервер ваш — у цьому й сенс, — але ставтеся до нього як до частини домашньої мережі: лише SSH-ключі, автооновлення, нічого іншого на ньому не запускати. Пароль і двофакторний вхід самого Home Assistant залиште увімкненими: проксі — не шар автентифікації.
Платний офіційний хмарний сервіс від команди Home Assistant робить те саме без жодного обслуговування й заодно фінансує проєкт. Якщо сервер вам не потрібен узагалі — це цілком гідний варіант. Шлях через VPS виграє, коли ви вже тримаєте власні сервіси, хочете свій домен або плануєте згодом сховати за тим самим тунелем й інші домашні сервіси.
Корисні інструкції
- Налаштування WireGuard VPN на VPS — повний розбір WireGuard
- Nginx reverse proxy з HTTPS — якщо Nginx вам ближчий за Caddy
- Безпека нового VPS — зробіть це першим ділом на будь-якому сервері, що дивиться в інтернет
Коментарі
Поки немає коментарів. Будьте першим.