میخواهید داشبورد 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 به عنوان ریورسپراکسی. در خانه یک کلاینت WireGuard (روی میزبان Home Assistant، یک Raspberry Pi یا روتر) تونل را باز نگه میدارد. وقتی به https://ha.example.com میروید، Caddy درخواست را از تونل به 10.8.0.2:8123 میفرستد.
چه چیزهایی لازم دارید
- پلنی با IP اختصاصی. VPS باید پورت ۴۴۳ ورودی و UDP 51820 را بپذیرد. Nano-IP با ۸ دلار در ماه بیش از کافی است: چند کیلوبایت ترافیک داشبورد را جابهجا میکند و اصلاً به زحمت نمیافتد. پلنهای NAT به جز پورت SSH شخصی شما اتصال ورودی نمیپذیرند (NAT اینجا چطور کار میکند).
- یک دامنه با رکورد A که به IP سرور VPS اشاره کند.
- یک کلاینت WireGuard در خانه که بتواند در شبکه محلی به Home Assistant برسد.
۱. سرور 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
۲. سمت خانه
روی هر دستگاه لینوکسی در خانه (یا در افزونه کلاینت 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 اجرا کنید.
۳. 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 به آن متکی است مدیریت میکند.
۴. به 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 با HTTPS: اگر Nginx را به Caddy ترجیح میدهید
- ایمنسازی یک VPS جدید: روی هر دستگاهی که رو به اینترنت است اول این کار را بکنید
نظرات
هنوز نظری نیست. اولین نفر باشید.