คุณอยากเปิดแดชบอร์ด Home Assistant ขณะนั่งรถไฟ แต่เราเตอร์ไม่ยอม: ผู้ให้บริการใส่คุณไว้หลัง carrier-grade NAT หรือจะทำ port forwarding ได้ แต่คุณไม่อยากเปิดเครือข่ายทั้งบ้านสู่อินเทอร์เน็ตเพียงเพื่อเปิดไฟดวงเดียว VPS ขนาดเล็กแก้ได้ทั้งสองกรณี บ้านของคุณจะเชื่อมต่อออกไปหา 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 record ชี้ไปยัง 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. ฝั่งบ้าน
สร้าง peer บนเครื่อง Linux เครื่องใดก็ได้ในบ้าน (หรือใน add-on ไคลเอนต์ 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 ให้ forward 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 ฉบับเต็ม
- Reverse proxy ด้วย Nginx และ HTTPS: หากคุณชอบ Nginx มากกว่า Caddy
- การรักษาความปลอดภัย VPS ใหม่: ทำสิ่งนี้ก่อนบนทุกเครื่องที่หันหน้าสู่อินเทอร์เน็ต
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ