გინდათ 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-ზე გადასცემს.
რა გჭირდებათ
- ტარიფი გამოყოფილი IP-ით. VPS-მა უნდა მიიღოს შემომავალი 443 და UDP 51820. Nano-IP $8/თვე-ად საკმარისზე მეტია: ის დაფის რამდენიმე კილობაიტ ტრაფიკს უპრობლემოდ გადაიტანს. NAT ტარიფები თქვენი პერსონალური SSH პორტის გარდა შემომავალ კავშირებს არ იღებენ (როგორ მუშაობს NAT ჩვენთან).
- დომენი, რომლის A ჩანაწერი VPS-ის 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 მანქანაზე (ან Home Assistant-ის WireGuard კლიენტის დამატებაში) შექმენით 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-ით: თუ Caddy-ს Nginx გირჩევნიათ
- ახალი VPS-ის დაცვა: ჯერ ეს გააკეთეთ ნებისმიერ მანქანაზე, რომელიც ინტერნეტისკენაა მიმართული
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.