網路與遠端連線實務
在家裡連得上,出門就連不上;App 一離開 Wi-Fi 就轉圈圈;朋友叫你「開個 port 就好」但你隱約覺得怪怪的。這章從路由器的固定 IP 開始,把四條對外連線的路一條一條實作給你看,並把「絕對不能做」的那幾件事釘死。
為什麼遠端連線是最容易做壞的一關
附錄 A 已經把四條遠端路線並排比較過了,那一篇是「選哪條」。這一章是「選好之後,實際怎麼做、做壞會怎樣」。
先講清楚這關特別的地方:前面二十章你做壞了,最慘就是燈不會亮、自動化不跑,關起門來自己難過。這一章做壞了,是你家的門開在網路上讓全世界看。
Home Assistant 裡面有什麼?你家每個房間有沒有人、門窗開關、攝影機畫面、電子鎖、你幾點出門幾點回家。這些東西如果被人拿到,跟鑰匙被複製沒兩樣。所以這章的順序是刻意的:先把區網弄穩,再談對外。很多人跳過第一步直接想「怎麼從外面連」,結果連家裡都時好時壞。
讀完這章你會有這些能力:
- 在路由器上把 Home Assistant 主機的 IP 釘死,讓它永遠不會跑掉
- 看懂
homeassistant.local為什麼有時候能用有時候不能用,並且知道不能用的時候該打什麼 - 從四條對外路線裡挑一條,並照著步驟做完
- 知道反向代理後面那兩行設定為什麼不設就登入不了
- 知道哪些事情永遠不要做,包含你在網路上一定會看到的那個「開 8123 port forward」教學
configuration.yaml 的 http: 區塊已經進入淘汰期。這章會以新的 UI 位置為主、舊的 YAML 寫法為輔。你的版本如果比 2026.8 舊,看到的畫面會不一樣,往下每一段都有註明。區網基礎:IP、DHCP,跟為什麼一定要固定
用「大樓門牌」來想這件事最快。
你家的路由器就是大樓管理員。每一台連上你家 Wi-Fi 或網路線的裝置 —— 手機、筆電、電視、Home Assistant 主機 —— 管理員都會發一個門牌號碼給它,長得像 192.168.1.37。這個門牌就是 IP 位址(IP Address)。
發門牌這件事有個名字叫 DHCP。它是自動的,你什麼都不用做,插上去就有。方便,但有個要命的特性:門牌是用租的,不是買的。
租約會到期。你的 Home Assistant 主機今天是 192.168.1.37,跳電之後重開,管理員可能發給它 192.168.1.52,而 .37 被發給了你新買的掃地機器人。
門牌跑掉會壞掉哪些東西
| 會壞掉的東西 | 症狀 |
|---|---|
| 你存在瀏覽器書籤的網址 | 打開就轉圈圈,最後跳「無法連線」 |
| 手機 App 設定的內部網址 | 在家反而連不上,出門用雲端卻正常,超反直覺 |
| 路由器上的 port forward 規則 | 規則還指著舊門牌,等於指到別人家 |
| 反向代理設定 | 代理找不到後端,網頁直接 502 |
| 用 IP 綁定的裝置整合 | 印表機、NAS、攝影機整排變成「無法使用」 |
| 你自己寫的自動化裡的網址 | 靜靜地失敗,而且不會跳錯誤給你看 |
所以規則很簡單:Home Assistant 主機的 IP 一定要固定。這不是進階技巧,這是必做的第零步。
固定 IP 有兩種做法,選對的那種
| 做法 | 設定在哪 | 評價 |
|---|---|---|
| DHCP 固定位址保留 (DHCP Reservation) | 路由器 | 推薦。管理員記住「這台機器永遠給這個門牌」,機器自己什麼都不用改,換 SD 卡、重灌都還在 |
| 裝置端靜態 IP (Static IP) | Home Assistant 主機 | 能用,但你得自己填閘道、遮罩、DNS,填錯一格機器就從網路上消失,要接螢幕鍵盤救。而且路由器不知道你佔了這個號碼,可能發給別人造成衝突 |
順手把 MAC 位址學起來
要在路由器上做保留,你得先讓路由器認得「哪一台是 Home Assistant」。認的方式是 MAC 位址(MAC Address) —— 每張網路卡出廠就刻死的一組編號,長得像 DC:A6:32:1B:4E:F0。
門牌會換,MAC 不會換。所以路由器上的保留規則其實是在說:「看到 MAC 是這串的傢伙來要門牌,一律給它 192.168.1.37。」
動手做:把主機 IP 釘死,並確認網路頁
-
在 Home Assistant 裡找出主機的 IP 和 MAC
走 設定 → 系統 → 網路。這一頁會列出你主機的網路介面(有線、無線)和目前拿到的 IP 位址。把 IP 抄下來。
MAC 位址不一定會顯示在這頁,最好找的地方是路由器的連線裝置清單 —— 打開路由器管理頁,找名字含
homeassistant、或 IP 跟你剛抄下來那串一樣的那一台,旁邊就會列出 MAC。這樣還有一個好處:等一下要做保留,本來就得在路由器上做,你人已經在那裡了。 -
登入路由器管理頁
路由器的管理網址通常是
192.168.1.1或192.168.0.1,也常常印在機器底下的貼紙上。帳密同樣在貼紙上 —— 如果你從來沒改過那組預設密碼,現在就改,這是後面所有資安措施的地基。 -
找到 DHCP 保留的設定頁
每家路由器叫法都不一樣,這是最卡的一步。常見的名字有:DHCP 保留位址、DHCP Reservation、Address Reservation、靜態 DHCP、Static Lease、固定分配。位置通常在「區域網路 / LAN」或「進階設定 → DHCP 伺服器」底下。
找不到就用你的路由器型號去搜「型號 + DHCP 保留」。這個功能連最便宜的家用機都有,只是藏得深。
-
新增一筆保留
填入第 1 步抄下來的 MAC 位址,指定你要給的 IP。建議挑一個好記又不容易撞到的號碼,例如
192.168.1.10。備註欄寫上「Home Assistant」,三個月後的你會感謝現在的你。存檔。有些路由器需要重開才生效。
-
讓主機重新拿一次號碼
保留設好之後,主機不會馬上換過去,要等舊租約到期。最快的方式是把 Home Assistant 主機重開一次(設定 → 系統 右上角的電源選單 → 重新啟動系統),或把網路線拔插一下。
-
驗收
重開完,回到 設定 → 系統 → 網路,確認顯示的 IP 就是你指定的那一個。然後用新 IP 打開網頁,能正常登入就成功了。把這個網址設成書籤,取代你原本那個。
-
把內部網址填進去
同樣在 設定 → 系統 → 網路 這一頁,有「內部網址(Internal URL)」與「外部網址(External URL)」兩格。內部網址填你剛剛釘好的那個,例如
http://192.168.1.10:8123。這兩格只要填到連接埠就好,後面不要再接路徑。填
http://192.168.1.10:8123/lovelace這種寫法會讓後面產生連結的功能接出奇怪的網址,是常見的自找麻煩。
homeassistant.local 是什麼,還有 8123 這個號碼
.local 網址背後的魔法叫 mDNS
你第一次裝 Home Assistant 的時候,教學叫你打 homeassistant.local:8123,然後它就通了。這件事其實有點神奇 —— 你家又沒有 DNS 伺服器,誰告訴你電腦這串字要去哪?
答案是 mDNS(Multicast DNS,多播 DNS)。運作方式白話講就是在教室裡大喊:
-
你的電腦對全區網廣播
「有沒有人叫 homeassistant?」這句話用多播的方式送出去,同一個網段裡每台機器都聽得到。
-
Home Assistant 主機舉手
「我是,我在 192.168.1.10。」
-
你的電腦記下來,直接連過去
整個過程不需要任何伺服器,全靠喊話。Apple 那邊叫這套 Bonjour,Linux 那邊的實作叫 Avahi,其實是同一件事。
為什麼它常常失效
因為「喊話」有很多種方式會被擋掉:
| 失效原因 | 怎麼判斷 | 解法 |
|---|---|---|
| 你和主機不在同一個網段(VLAN 或訪客網路) | 手機接主要 Wi-Fi 可以,接訪客 Wi-Fi 就不行 | 用 IP 直連,或在路由器上開 mDNS 轉發 |
| 路由器或交換器把多播流量擋掉了 | 全家都連不到 .local,但 IP 直連正常 | 找路由器裡 IGMP Snooping、Multicast、mDNS 的設定,或直接改用 IP |
| 裝置的 Wi-Fi 開了「用戶端隔離」 | 手機連得到外網,連不到家裡任何一台機器 | 關掉路由器的 AP Isolation / Client Isolation |
| 作業系統或瀏覽器不支援 | 某些 Android 版本、部分企業網路環境 | 用 IP |
| 你人在外面 | 離開家就一定不通 | mDNS 本來就只在區網有效,這不是壞掉 |
| 網路上有兩台都叫 homeassistant | 連過去是別台機器 | 把其中一台改名 |
homeassistant.local 在外網永遠不會通。它不是你的公開網址,也不能拿去設 port forward。看到有人問「我在外面打 homeassistant.local 連不到」,答案就是這個。8123 這個號碼,跟 2026.8 之後的變化
如果 IP 是門牌,連接埠(Port)就是門牌後面的分機號碼。同一台機器可以同時跑很多服務,靠分機號碼區分誰是誰。Home Assistant 歷來用的號碼是 8123,所以網址才要寫成 http://192.168.1.10:8123。
但這件事在 2026.8 版有變動,而且改得很值得知道:
| 你的情況 | 預設連接埠 | 網址長怎樣 |
|---|---|---|
| 2026.8 之後全新安裝的 Home Assistant OS | 80 | http://homeassistant.local(後面不用加號碼) |
| 2026.8 之前就在跑的系統,升級上來 | 維持 8123 | http://homeassistant.local:8123 |
| Container / Docker 安裝 | 8123 | http://192.168.1.10:8123 |
官方在改版說明裡講得很白:已經在跑的系統什麼都不會變,你也不需要做任何事,這只影響全新安裝的 Home Assistant OS。換句話說,網路上絕大多數教學裡的 :8123 對你多半還是對的。
為什麼要改?因為 80 是網頁的預設號碼,瀏覽器會自動補,網址就能少打一截 —— 純粹是為了讓新手少一個門檻。
四條路,哪一條適合你
附錄 A 已經介紹過這四條路各是什麼,這裡不重講,直接給你決策用的對照表。看完挑一條,然後跳到對應的那一節動手。
| 比較項目 | Nabu Casa | Cloudflare Tunnel | VPN (Tailscale / WireGuard) | DDNS + 反向代理 |
|---|---|---|---|---|
| 費用 | 美國 US$6.50/月 或 US$65/年;歐盟 €7.50/月、€75/年;英國 £6.50/月、£65/年;加拿大 CAD 8.70/月、CAD 87/年;其他地區 US$6.50/月。註冊時有一個月免費試用 | 基本用量免費,但需自備網域(網域每年約數百元) | Tailscale 個人方案免費額度就夠家用;自架 WireGuard 免費 | DDNS 有免費方案,憑證免費,成本是你的時間 |
| 難度 | 最低,開一個開關 | 中,要會設 Cloudflare 後台 | Tailscale 低;自架 WireGuard 中高 | 最高,要動路由器、DNS、憑證、代理四件事 |
| 資安 | 好。官方維護,不開任何 port | 好。不開任何 port,且可疊 Cloudflare 的存取控管 | 最好。介面根本不對公網開放,只有你的裝置進得來 | 看你設定功力。做對很好,做錯是全章最危險的一條 |
| 怕不怕 CGNAT | 不怕 | 不怕 | Tailscale 不怕;自架 WireGuard 會死 | 會死,CGNAT 下 DDNS 完全無效 |
| 語音助理串接 (Alexa / Google) | 直接支援,訂閱內含 | 技術上可行但要自己接雲端服務,麻煩 | 不行。語音雲端不在你的 VPN 裡面 | 可行但要自己接雲端服務,麻煩 |
| 分享給家人 | 給網址加帳號就好 | 給網址加帳號就好 | 對方要裝 VPN 並加入你的網路,長輩會卡住 | 給網址加帳號就好 |
| 維護成本 | 幾乎零 | 低 | 低 | 高。憑證會到期、IP 會變、代理會壞 |
三十秒選好
- 不想折騰、要用 Alexa 或 Google 語音、想支持官方開發 → Nabu Casa。這也是官方文件自己標為「對多數人最簡單也最安全」的選項。
- 只有自己和伴侶用、不需要語音助理、想省錢又要安全 → Tailscale。這是安全性最高的一條。
- 已經有網域、想要漂亮的自訂網址、也想給家人用 → Cloudflare Tunnel。
- 你想學網路、有固定或準固定的對外 IP、願意花一個週末 → DDNS + 反向代理。
路線一:Home Assistant Cloud(Nabu Casa)
這是官方自己營運的訂閱服務,訂閱費直接回頭養 Home Assistant、ESPHome、Z-Wave JS 這些專案的開發。所以它同時是「最省事的方案」和「最直接的贊助方式」。
它幫你做了什麼
你的主機主動往外跟 Nabu Casa 的伺服器建立一條連線,之後所有外面來的請求都走這條既有的連線進來。你的路由器完全不用開任何洞 —— 這就是為什麼它不怕 CGNAT、也不怕你家 IP 天天在變。
實作步驟
-
找到雲端設定
走 設定 → 系統 → 網路,在「Home Assistant 網址」底下的網際網路(Internet)那一欄,把「使用 Home Assistant Cloud(Use Home Assistant Cloud)」打開。另一個入口是 設定 → Home Assistant Cloud,兩邊都能到同一個地方,以你畫面上有的那個為準。
-
註冊或登入帳號
用 email 註冊一個 Nabu Casa 帳號。這跟你登入 Home Assistant 的帳號是兩回事,別搞混。註冊時可以選「開始一個月免費試用」,不用先付錢。
-
打開遠端連線開關
登入之後把遠端控制的開關打開。系統會配一組固定的網址給你,格式是一長串代碼加上
.ui.nabu.casa,例如https://abcd1234-ef56-7890-abcd-ef1234567890.ui.nabu.casa。醜歸醜,但它是 HTTPS、是唯一的、而且不會變。
-
把網址存進手機 App
打開 Companion App(第 7 章裝過的那個),到 App 的設定裡把這個網址填進「外部網址」。內部網址維持你在區網的 IP。App 會自己判斷現在該用哪一個。
-
測試
把手機 Wi-Fi 關掉,只用行動網路,打開 App。能進去就成功了。
127.0.0.1。這代表後面要講的「IP 封鎖」功能對雲端連線幾乎沒有鑑別力 —— 封了一個等於封掉全部雲端使用者。這也是為什麼用 Nabu Casa 的人更要靠 MFA 而不是靠 IP 封鎖。home.你的網域.com 這種自訂網址。這功能需要 Home Assistant 2023.9.0 以上版本,設定方式是在 Nabu Casa 後台加上,並到你的 DNS 服務商加一筆對應紀錄。路線二:Cloudflare Tunnel
概念跟 Nabu Casa 一模一樣 —— 你的主機主動往外連,不開任何 port —— 差別在營運的是 Cloudflare,而且用你自己的網域,所以網址可以很漂亮。
你需要準備什麼
| 準備項目 | 說明 |
|---|---|
| Cloudflare 帳號 | 免費方案就夠 |
| 一個你擁有的網域 | 這條路的硬門檻。而且必須把網域的 DNS 交給 Cloudflare 管理 |
| Home Assistant OS 或 Supervised | 因為要裝 App(附加元件)。Container 安裝的人得自己另外跑 cloudflared 容器 |
實作步驟
-
先把網域交給 Cloudflare
在 Cloudflare 後台新增你的網域,它會給你兩組名稱伺服器(Nameserver)。回到你買網域的地方,把名稱伺服器改成 Cloudflare 給的那兩組。這步生效要等,有時候幾分鐘有時候幾小時。
-
加入第三方 App 倉庫
Cloudflared 不是官方內建的 App,要自己加倉庫。走 設定 → Apps(舊版叫「附加元件」)→ 安裝 App(Install app) → 右上角三點選單 → 倉庫(Repositories),貼上
https://github.com/homeassistant-apps/repository,按新增。你在舊教學裡會看到
brenner-tobias/addon-cloudflared這個網址。那個舊倉庫現在的說明頁自己就寫著「已經搬到 homeassistant-apps 這個組織」,並要你改用上面那串新的,所以別再貼舊的了。加第三方倉庫的完整流程在第 20 章講過。 -
安裝並設定 Cloudflared
倉庫加好之後,清單裡會多出一張新卡片,在裡面找到 Cloudflared,安裝。到它的設定分頁,填入你想用的外部網址,例如
ha.你的網域.com。 -
啟動並完成授權
啟動 App,然後去看它的記錄檔分頁。它會印出一個授權網址,你要用瀏覽器打開、登入 Cloudflare、授權這條通道連到你的網域。這一步是新手最容易漏掉的 —— 不看記錄檔就不知道要做什麼。
-
設定信任代理
這條路的流量是從 App 容器轉進 Home Assistant 的,等於中間多了一層代理。不設定信任代理,請求會直接被 Home Assistant 擋掉(典型症狀是網頁打得開卻登不進去,或整頁
400 Bad Request),設定方式看下面「反向代理必設」那一節。 -
測試
關掉手機 Wi-Fi,用行動網路打開
https://ha.你的網域.com。
路線三:VPN(Tailscale 或 WireGuard)
前兩條路是「把 Home Assistant 安全地放到網路上」。VPN 是完全不同的思路:把你的手機拉進家裡的網路。
用鑰匙來比喻最傳神:前兩條是在門口裝了一個很嚴格的警衛,VPN 是根本沒有門,只有拿到鑰匙的人才知道有這棟房子。因為 Home Assistant 從頭到尾沒有對公網開放過,這是四條路裡資安最強的一條。
Tailscale:新手直接選這個
Tailscale 幫你把 VPN 最難的部分(金鑰交換、打洞、找路)全部自動化了。它甚至能穿過 CGNAT,這點對台灣很多用戶是關鍵。
-
註冊 Tailscale 帳號
用 Google 或 GitHub 帳號登入即可,個人使用的免費額度對家庭場景綽綽有餘。
-
加入社群 App 倉庫
走 設定 → Apps → 安裝 App → 右上角三點選單 → 倉庫,加入
https://github.com/hassio-addons/repository。這是 Home Assistant Community Add-ons(現在叫 Community Apps)的倉庫,Tailscale 和 WireGuard 都在裡面。 -
安裝並啟動 Tailscale
安裝完啟動,然後看記錄檔分頁,裡面會有一個授權網址。用瀏覽器打開它,把這台機器加進你的 Tailscale 網路。
-
手機也裝 Tailscale
從 App Store 或 Play 商店裝 Tailscale App,用同一個帳號登入。
-
用 Tailscale 網址連線
連上 VPN 之後,你可以用 Home Assistant 在 Tailscale 網路裡的位址連線。如果 MagicDNS 有開,網址會長得像
homeassistant.tail1234.ts.net這種格式(tail1234是系統配給你的)。
advertise_routes 的設定,預設是把你家的區網網段分享出去。打開它的好處是:連上 VPN 之後,你不只連得到 Home Assistant,連家裡的 NAS、印表機、路由器管理頁都能碰到,等於整條網路線牽到你手機上。維護的時候超好用。127.0.0.1。不設就會一直被要求登入卻登不進去。單純用 VPN 直連(沒開 Serve/Funnel)則不需要這步。WireGuard:自架派的選擇
WireGuard 是 Tailscale 底層用的同一套技術,差別是你自己架、自己管金鑰。社群 App 倉庫(就是上面那個 hassio-addons/repository)裡有 WireGuard 可以裝。
| Tailscale | 自架 WireGuard | |
|---|---|---|
| 誰管金鑰 | Tailscale 的協調伺服器 | 你自己,每台裝置手動配對 |
| 要不要開 port | 不用 | 要,得在路由器開 UDP port forward |
| CGNAT 底下 | 能用 | 不能用 |
| 依賴第三方 | 是 | 否,完全自主 |
| 加一台新裝置 | 登入帳號就好 | 要產生金鑰、改設定、重啟 |
選 WireGuard 的理由通常只有一個:你不想依賴任何第三方服務。如果你沒有這個堅持,Tailscale 省下來的時間很可觀。
路線四:DDNS + 反向代理 + Let's Encrypt
這是最傳統、最硬派、也最容易做壞的一條。先講清楚它由三個獨立的零件組成,各解決一個問題:
| 零件 | 解決什麼問題 | 白話比喻 |
|---|---|---|
| DDNS 動態網域名稱 | 你家對外 IP 會變,記不住也沒辦法給別人 | 你搬家會通知郵局改地址,DDNS 是自動幫你通知 |
| 反向代理 Reverse Proxy | 幫你收 HTTPS 加密流量,解密後轉給 Home Assistant | 大樓一樓的收發櫃檯,包裹統一在這裡收,再送上樓 |
| Let's Encrypt | 免費簽發 HTTPS 憑證,讓瀏覽器不跳警告 | 公證處蓋章,證明這個網址真的是你的 |
官方提供的三個 App
好消息是這三件事在官方 App 倉庫裡都有現成的,不用加第三方倉庫:
| App 名稱 | 做什麼 |
|---|---|
| Duck DNS | 把你家的浮動 IP 同步到一個 xxx.duckdns.org 網址,而且內建 Let's Encrypt 憑證申請,兩件事一次解決 |
| Let's Encrypt | 單純簽發與續約憑證。用別家 DDNS 或自己的網域時才需要單獨裝 |
| NGINX Home Assistant SSL proxy | 反向代理。官方一句話介紹是「用 NGINX 架一個 SSL 代理,並把 80 port 的流量導向 443」。要注意它的 80 port 預設是關掉的(官方文件說明,是為了把 80 留給其他 App 用),需要的話得自己在設定分頁打開 |
實作步驟(以 Duck DNS 這條最短路徑為例)
-
先確認你不在 CGNAT 底下
這一步先做,不然後面全白工。方法:登入路由器,找到 WAN 狀態頁,看它顯示的對外 IP。再用手機或電腦搜尋「我的 IP」看一次外界看到的 IP。
兩個一樣 → 沒問題。兩個不一樣 → 你在 CGNAT 底下,這條路走不通,請改走前面三條的任何一條。
另一個判斷方式:路由器 WAN IP 如果落在
100.64.x.x到100.127.x.x這個範圍,那是電信商專門給 CGNAT 用的區段,直接確定。 -
註冊 Duck DNS
到 Duck DNS 網站用社群帳號登入,申請一個子網域,並把頁面最上方那串 token 抄下來。
-
安裝並設定 Duck DNS App
在官方 App 商店裝 Duck DNS。設定分頁裡填入
token和domains(你申請的網域),然後把 Let's Encrypt 底下的accept_terms改成true—— 官方文件寫得很清楚:「把值改成 true 才會使用 Let's Encrypt 服務」。憑證檔名預設是
fullchain.pem和privkey.pem,沒特別理由不要改。這個 App 拿憑證走的是 DNS-01 驗證 —— 白話說就是「Let's Encrypt 不會連進你家,它是去查你網域的 DNS 紀錄來確認網域是你的」。所以光是要拿到憑證,你不需要在路由器開任何洞。官方文件另外提醒,如果你是把 Duck DNS 的網域再接到自己的網域上,記得幫驗證用的名稱補一筆 CNAME,不然 DNS-01 查不到就會失敗。
-
安裝 NGINX SSL proxy
裝官方的 NGINX Home Assistant SSL proxy。設定分頁填入
domain(你的 Duck DNS 網址)、certfile和keyfile(就是上面那兩個檔名,它們會放在/ssl資料夾裡)。 -
設定信任代理
這步不做,下一步一定失敗。看下一節。
-
在路由器上 port forward 443
這一步才是真正要開洞的地方:只轉 443(HTTPS)到你的主機,目標 IP 就是你在本章第一節釘死的那個。
除了 443 之外一個都不要開 —— 特別是 8123 絕對不要轉(那等於把沒加密的登入頁直接掛到網路上,理由看下一節)。80 也不必轉,NGINX App 的 80 port 預設就是關的,而你的憑證是走 DNS 驗證拿的,不靠 80。
-
填入外部網址並測試
到 設定 → 系統 → 網路,外部網址填
https://你的網域.duckdns.org。然後關掉手機 Wi-Fi 測試。
反向代理後面,這兩個設定不做就登不進去
這一節是全章最高頻的求救問題。只要你走的是 Cloudflare Tunnel、NGINX、Tailscale Serve/Funnel、或任何形式的反向代理,都會遇到。
為什麼會壞:Home Assistant 看到的是代理,不是你
正常情況下,Home Assistant 收到請求時會看「這個請求從哪個 IP 來的」,用來記錄登入、判斷是不是內網、以及執行 IP 封鎖。
但中間插了一個反向代理之後,所有請求在 Home Assistant 眼裡都是從代理那台機器來的。你在台北、你媽在高雄、還有一個俄羅斯的掃描機器人 —— 通通長得一模一樣。
解法是代理會在請求上附一張便條紙,叫 X-Forwarded-For,上面寫「這個請求真正的來源是 xxx」。但 Home Assistant 預設不相信這張便條紙,因為任何人都可以偽造它 —— 如果隨便相信,攻擊者只要偽造一張寫著「我是 127.0.0.1」的便條,就能假裝自己是本機。
所以你必須明確告訴 Home Assistant 兩件事:(一)請相信這張便條紙;(二)只有從這些 IP 來的便條紙才算數。
400 Bad Request,那你多半是漏了 trusted_proxies 設定。」症狀通常是打得開網頁、輸入帳密之後卻進不去,或直接一片 400。2026.8 之後:在 UI 設定(建議做法)
-
打開網路設定頁
走 設定 → 系統 → 網路,找到 HTTP 伺服器(HTTP server)那一區。
-
打開「信任 X-Forwarded-For」
官方的欄位名稱是 Trust X-Forwarded-For,把它打開。
-
填入信任的代理位址
欄位叫 Trusted proxies(信任的代理),官方說明是「允許設定
X-Forwarded-For的反向代理 IP 位址或 CIDR 網段」。填什麼看下面的對照表。 -
存檔並重新啟動
存檔後重新啟動 Home Assistant,再測一次。
該填哪個位址
| 你的代理是 | 填進 Trusted proxies | 依據 |
|---|---|---|
| Home Assistant 的 App(附加元件),例如 NGINX SSL proxy、Cloudflared | 172.30.33.0/24 | 官方 NGINX App 文件直接給的網段,這是 App 容器所在的內部網路 |
| Tailscale 的 Serve / Funnel | 127.0.0.1 | Tailscale App 官方文件給的值 |
| 同一台機器上跑的代理 | 127.0.0.1 | 本機回環位址 |
| 區網裡另一台機器(例如獨立的 NAS 或軟路由) | 那台機器的固定 IP,例如 192.168.1.20 | 照實填 |
2026.8 之前:寫在 configuration.yaml
舊版本沒有 UI 可以設,要寫進 configuration.yaml。以 App 型的代理為例:
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
Tailscale Serve/Funnel 的版本:
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
多個代理就往下多列幾行:
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
- 127.0.0.1
- 192.168.1.20
http: 這個 YAML 區塊已經進入淘汰期。警告訊息從 2026.7.5 就開始跳了(不是 2026.8 才有),內容大意是:「HTTP 的 YAML 設定已淘汰,你 configuration.yaml 裡的設定已經被匯入,http 現在請到 設定 → 系統 → 網路 設定,請把 http: 區塊移除並重新啟動」,並附上一句「這在 2027.2.0 版會停止運作,升級前請先處理」。所以你原本的設定會自動被匯入到 UI,你要做的是把 configuration.yaml 裡的 http: 整段刪掉再重新啟動。如果你刪掉之後在 UI 找不到剛匯入的設定,先試著把瀏覽器強制重新整理一次。0.0.0.0/0(代表信任全世界)。那等於宣告「任何人偽造的便條紙我都信」,攻擊者可以直接偽裝成任何 IP,繞過你所有的 IP 封鎖,登入記錄也會全是假的。只填你真的知道是自己代理的那個位址。資安硬規則:這幾件事沒得商量
官方的安全檢查清單其實只列了三條核心原則:「每個帳號都用強而唯一的密碼,並打開多重驗證」、「把敏感資料集中放在 secrets 裡(記得備份)」、「跟著每月的版本更新」。下面是把它們落地成你今天就該做的動作。
secrets.yaml 並不會把它加密。那只是「集中管理、方便你分享設定檔時不外洩」,不是保險箱。所以備份檔一樣要當成機密看待,不要隨手丟雲端硬碟公開資料夾(備份的處理看第 9 章)。規則一:不要把 8123 直接 port forward 到公網
(一)預設是
http:// 沒有加密,你的帳號密碼在網路上是裸奔的明文,任何中間節點都看得到。(二)掃描機器人整天在掃全世界的 8123,你開起來幾分鐘內就會被找到,之後是不間斷的暴力破解。
(三)Home Assistant 一旦被攻破,等於你家的門鎖、攝影機、在家與否的紀錄全部交出去。
如果你已經開了,現在就去路由器把那條規則刪掉,然後從前面四條路裡挑一條重做。這不誇張,這是本章最重要的一句話。
規則二:一定要開 MFA
多重驗證(MFA / 兩步驟驗證)的意思是:光有密碼還不夠,還要輸入手機上每 30 秒換一次的六位數字。密碼外洩了,攻擊者手上沒有你的手機,還是進不來。
-
打開個人資料頁的安全分頁
點左下角你的名字進入個人資料(User profile),切到 安全性(Security) 分頁。
-
啟用多重驗證模組
找到「多重驗證模組(Multi-factor authentication modules)」這一區,按啟用(Enable)。
-
用驗證器 App 掃 QR Code
手機上先裝一個驗證器 App,掃描畫面上的 QR Code,然後把 App 顯示的六位數字填回去確認。
-
把備援碼收好
設定過程給你的備援資訊務必存在手機以外的地方。手機掉了又沒有備援,你會被鎖在自己家外面。
-
家裡每個帳號都做一次
你自己開了沒用,家人的帳號密碼是
123456一樣是破口。第 5 章有多使用者管理的完整說明。
規則三:打開 IP 封鎖
Home Assistant 內建一個功能:同一個 IP 連續登入失敗到一定次數,就把它擋掉。這是對付暴力破解最有效的一招。
設定位置在 設定 → 系統 → 網路,兩個欄位:
| 官方欄位名稱 | 作用 | 建議值 |
|---|---|---|
| Enable IP banning (啟用 IP 封鎖) | 打開自動封鎖 | 開啟 |
| Login attempts before ban (封鎖前的登入嘗試次數) | 官方說明:「IP 位址被封鎖前允許的登入失敗次數。設成 -1 可停用自動封鎖。」 | 5 左右。太低你自己打錯字就被關在外面 |
被封鎖的 IP 會寫進一個叫 ip_bans.yaml 的檔案,裡面記著被封鎖的 IP 和它被加進來的 UTC 時間。想解除封鎖就是把對應那幾行刪掉再重啟。
(一)用 Home Assistant Cloud 的話,官方明講所有雲端連線看起來都是
127.0.0.1,所以 IP 封鎖對它們基本無效,你的防線得靠 MFA。(二)反向代理沒設好信任代理的話,所有請求看起來都來自代理,封一個等於封全部 —— 你會把自己也關在外面。這又回到上一節,先把
trusted_proxies 設對。規則四:只開必要的對外服務
盤點一下你路由器上到底開了幾個洞。很多人的規則是好幾年前為了看監視器、下載東西、或某個遊戲開的,早就忘了。
| 你可能開過的 | 該怎麼處理 |
|---|---|
| 8123 轉到 Home Assistant | 立刻刪掉 |
| UPnP(讓裝置自己開洞) | 建議關閉。這功能讓任何區網裝置都能自己在你的防火牆上打洞,你完全不知情 |
| 路由器的遠端管理 | 關閉。管理頁不該從外面碰得到 |
| 攝影機或 NVR 的 port | 關閉,改走 Home Assistant 或 VPN 進去看 |
| NAS 的各種服務 port | 只留你真的每天在用的,其他關掉 |
| 443(走反向代理路線的人) | 保留,這是唯一該留的 |
臨時對外測試:可以做,但要有紀律
有時候你就是需要「讓外面暫時看得到」十分鐘 —— 測 webhook、給人看一眼、debug 一個 OAuth 回呼。這時候的做法與風險:
| 做法 | 風險 | 紀律 |
|---|---|---|
| 臨時開一條 port forward | 最高。掃描機器人是全天候的,開十分鐘也可能被找到 | 先開好 MFA 和 IP 封鎖;設鬧鐘提醒自己關;當天一定要關 |
| 用 Cloudflare Tunnel 臨時開一條 | 低。不用開 port,測完關掉 App 就沒了 | 測完把通道停掉 |
| Tailscale Funnel 暫時對外 | 低到中。網址不好猜,但確實對公網開放 | 用完關掉,並記得設信任代理 |
| 直接開 Nabu Casa 試用 | 最低 | 試用期到記得決定要不要續 |
案場等級:VLAN、來賓網路、多層 NAT
前面講的都是「一戶住家、一台路由器」。如果你要處理的是辦公室、店面、或比較講究的住宅,會多出三個題目。
把 IoT 裝置關進獨立網段
問題出在便宜的智慧插座、燈泡、攝影機身上:它們韌體品質參差,有的用了就再也不更新。一台被攻破的智慧插座,如果和你的筆電、NAS 在同一個網段,就是一個現成的跳板。
解法是 VLAN(虛擬區域網路):在同一組實體線材上切出好幾個互相隔離的邏輯網路。一個常見的切法:
| 網段 | 放什麼 | 能連到誰 |
|---|---|---|
| 主網段 | 電腦、手機、NAS、Home Assistant 主機 | 可以連到所有網段 |
| IoT 網段 | 插座、燈泡、感測器、電視 | 只能連外網,不能主動連主網段 |
| 攝影機網段 | IP Cam、NVR | 最嚴格,通常連外網都禁止,只允許 Home Assistant 來抓畫面 |
| 來賓網段 | 客人的手機 | 只能上網,看不到你家任何東西 |
多層 NAT:家裡有兩台路由器
很常見的情況:電信商給的數據機本身就是路由器,你嫌它 Wi-Fi 差,又自己接了一台。結果變成兩層 NAT,你的 Home Assistant 主機其實躲在兩道門後面。
怎麼判斷:登入你自己那台路由器,看 WAN IP。如果它顯示的是 192.168.x.x 或 10.x.x.x 這種私有位址,那你就在多層 NAT 底下。
| 解法 | 做法 | 評價 |
|---|---|---|
| 把電信商的機器改成橋接模式 | 打電信客服請他們改,或自己在數據機管理頁設定 | 最乾淨。從此只有一層 NAT |
| 兩層都設 port forward | 外層轉給內層路由器,內層再轉給主機 | 能動但脆弱,任何一層重設就要重來 |
| 改用不需要 port forward 的方案 | Nabu Casa、Cloudflare Tunnel、Tailscale | 最省事。多層 NAT 對它們完全不是問題 |
看到第三列了嗎?這就是為什麼本章一路都在推那三條路 —— 它們把 CGNAT、多層 NAT、浮動 IP 這三個最惱人的問題一次繞過去了。
案場交付前的檢查清單
- 主機 IP 已在路由器做保留,並記錄在交接文件裡
- 路由器管理密碼已改掉,不是出廠預設
- 內部網址與外部網址都已填好且測過
- 所有帳號都開了 MFA,IP 封鎖已啟用
- 路由器上沒有任何一條指向 8123 的規則
- UPnP 與路由器遠端管理已關閉
- 備份有排程、而且有存到主機以外的地方(第 9 章)
- 如果有切 VLAN:mDNS 轉發已設定,且新裝置探索實測過
- 憑證的到期與續約機制已確認會自動執行
常見卡關
-
憑證申請失敗,Let's Encrypt 一直報錯
先搞清楚一件事:Duck DNS App 走的是 DNS-01 驗證,Let's Encrypt 是去查你網域的 DNS 紀錄,不會連進你家。所以「憑證拿不到」通常跟 port 沒關係,別急著去路由器亂開洞。
按這個順序檢查。(一)DNS 設定對不對:Duck DNS 那邊的網域有沒有真的建起來、token 有沒有貼錯、如果你有接自己的網域,驗證用的那筆 CNAME 有沒有補上。(二)DNS 生效了沒:剛改完的紀錄要一段時間才會全網看得到,太早按就是失敗。(三)條款有沒有接受:Duck DNS App 裡的
accept_terms忘記改成true是超高頻錯誤。(四)是不是被限流了:Let's Encrypt 對同一個網域短時間內的申請次數有上限,你反覆重試反而會被鎖一段時間 —— 這時候唯一的解法是停下來等,繼續按只會更慘。(五)看 App 的記錄檔,真正的錯誤原因都寫在那裡,不要只看紅字。 -
在家連得上,出門連不上(或反過來)
幾乎都是內外網網址設定的問題。到 設定 → 系統 → 網路 確認內部網址與外部網址兩格都填了、而且都填對。然後打開手機 Companion App 的設定,確認 App 那邊也有這兩個網址。
特別提醒:這兩格填到連接埠就停手,後面不要接路徑。填成
.../lovelace這種會讓通知連結、攝影機推播接出怪網址,症狀千奇百怪又很難聯想到這裡。另外一種情況是「出門正常、回家反而不行」,通常是內部網址寫的 IP 已經過期 —— 回本章第一節把 IP 釘死。
-
網頁打得開,帳密輸入後就是進不去,或直接 400
這是反向代理沒設信任代理的典型症狀。回到「反向代理必設」那一節,把 Trust X-Forwarded-For 打開、Trusted proxies 填上正確的位址(App 型代理是
172.30.33.0/24,Tailscale Serve/Funnel 是127.0.0.1),存檔重啟。如果你已經設了還是不行,檢查是不是設在舊的
configuration.yaml但版本已經升上 2026.8 —— 這時候該以 UI 的值為準,並把 YAML 區塊刪掉。刪完在 UI 找不到設定的話,先強制重新整理瀏覽器。 -
DDNS 設好了,外面還是連不到 —— CGNAT
先做本章教過的判斷:路由器 WAN 顯示的 IP,跟你上網查到的「我的 IP」,兩個一不一樣?不一樣就是 CGNAT(電信商讓好幾百戶共用一個對外 IP)。
CGNAT 底下,DDNS 和 port forward 全部無效,這不是設定問題,是你根本沒有一個屬於自己的對外門牌。有三個選擇:(一)打給電信商問能不能申請真實 IP,通常要加錢或換方案;(二)改走 Nabu Casa、Cloudflare Tunnel 或 Tailscale,這三個完全不受影響;(三)放棄遠端。九成的人應該選(二)。
-
homeassistant.local 突然不能用了
先確認你在家。再確認手機沒有連到訪客 Wi-Fi 或另一個網段。都對的話,改用 IP 直連驗證主機還活著 —— 能用 IP 進去就代表只是 mDNS 的問題,不是主機掛了。長期解法是把 IP 釘死然後改用 IP 當書籤,最不會出事。
-
改了連接埠之後連不進去
如果你是 2026.8 之後在 UI 改的,不用緊張,什麼都不用做 —— 官方設計成改完會等你確認,五分鐘內沒確認就自動把舊設定放回去並重新啟動。泡杯茶等它自己回來。
如果是舊版本或 Container 安裝手動改壞的,就得從主機端進去改回來(接螢幕鍵盤,或改 Docker 的埠對應)。
-
被自己的 IP 封鎖擋在外面
密碼打錯太多次觸發了封鎖。解法是從主機端編輯
ip_bans.yaml,把你自己那筆刪掉,再重新啟動 Home Assistant。沒辦法碰檔案的話,換一條網路進來(例如手機開行動網路熱點),你的 IP 就變了。 -
切了 VLAN 之後找不到新裝置
預期之內。自動探索靠的是不會跨網段的多播流量。到路由器或防火牆開啟 mDNS 轉發(mDNS Repeater / Avahi Reflector / Bonjour Gateway),並確認有允許 Home Assistant 主動連進 IoT 網段的規則。
常見問題
我只是想在外面看一下家裡的燈開了沒,真的需要搞這麼複雜嗎?
我在網路上看到的教學都說開 8123 port forward 就好,為什麼你說不行?
http://,帳密在網路上是明文)、會被掃到(掃描機器人整天在掃全世界的 8123,通常幾分鐘內就找上門)、後果太重(Home Assistant 裡有你家的門鎖、攝影機、在家與否的紀錄)。這章講的四條路全部都能達到同樣的效果而且安全得多,沒有理由走那條。我的 Home Assistant 從 2026.8 升上來,網址還要加 :8123 嗎?
:8123 繼續用就好。如果你真的很想換成不用打號碼的版本,2026.8 之後可以到 設定 → 系統 → 網路 自己改,而且改壞了五分鐘內會自動復原,風險不高 —— 但改完記得所有書籤、App 設定、反向代理設定都要跟著更新。我的 configuration.yaml 裡有 http: 區塊,現在要不要刪?
http: 區塊移除,並註明「這在 2027.2.0 版會停止運作,升級前請先處理」。升級時你原本的設定會自動被匯入到 UI,正確做法是:先到 設定 → 系統 → 網路 確認設定都在(trusted_proxies 那些有沒有正確帶過去,尤其要看仔細),確認沒問題後把 configuration.yaml 裡的整個 http: 區塊刪掉,再重新啟動。刪完如果 UI 上找不到設定,先把瀏覽器強制重新整理一次再說。Nabu Casa 和 Tailscale 可以同時開嗎?
127.0.0.1 加進信任代理清單。VPN 那條路為什麼不能用 Alexa 或 Google 語音?
Trusted proxies 我可以偷懶填 0.0.0.0/0 嗎?反正我家沒人要駭。
0.0.0.0/0 的意思是「我相信任何人宣稱的來源 IP」。攻擊者只要在請求上偽造一個 X-Forwarded-For 標頭,就能假裝自己是任何 IP —— 你的 IP 封鎖完全失效、登入記錄全是假的、你連事後追查都做不到。而且「沒人要駭我」是錯覺,掃描機器人不挑對象,它掃的是整個網際網路。正確做法是只填你確實知道的那個代理位址:App 型代理填 172.30.33.0/24,Tailscale Serve/Funnel 填 127.0.0.1。我不確定自己是不是在 CGNAT 底下,怎麼三十秒確認?
100.64.x.x 到 100.127.x.x 這個區段,那是電信商專門留給 CGNAT 用的,可以直接確定。CGNAT 底下請走 Nabu Casa、Cloudflare Tunnel 或 Tailscale,這三條完全不受影響。為什麼我開了 IP 封鎖,但攻擊記錄裡全部都是 127.0.0.1?
127.0.0.1」,這是正常的,代表 IP 封鎖對雲端連線沒有鑑別力 —— 你的防線要靠 MFA。第二種:你有反向代理但沒設好信任代理,所以所有請求看起來都來自代理本身。這種情況下你千萬不要按下封鎖,因為封一個等於封掉全部(包括你自己),先去把 trusted_proxies 設對。