第 21 章

網路與遠端連線實務

在家裡連得上,出門就連不上;App 一離開 Wi-Fi 就轉圈圈;朋友叫你「開個 port 就好」但你隱約覺得怪怪的。這章從路由器的固定 IP 開始,把四條對外連線的路一條一條實作給你看,並把「絕對不能做」的那幾件事釘死。

為什麼遠端連線是最容易做壞的一關

附錄 A 已經把四條遠端路線並排比較過了,那一篇是「選哪條」。這一章是「選好之後,實際怎麼做、做壞會怎樣」。

先講清楚這關特別的地方:前面二十章你做壞了,最慘就是燈不會亮、自動化不跑,關起門來自己難過。這一章做壞了,是你家的門開在網路上讓全世界看。

Home Assistant 裡面有什麼?你家每個房間有沒有人、門窗開關、攝影機畫面、電子鎖、你幾點出門幾點回家。這些東西如果被人拿到,跟鑰匙被複製沒兩樣。所以這章的順序是刻意的:先把區網弄穩,再談對外。很多人跳過第一步直接想「怎麼從外面連」,結果連家裡都時好時壞。

讀完這章你會有這些能力:

  • 在路由器上把 Home Assistant 主機的 IP 釘死,讓它永遠不會跑掉
  • 看懂 homeassistant.local 為什麼有時候能用有時候不能用,並且知道不能用的時候該打什麼
  • 從四條對外路線裡挑一條,並照著步驟做完
  • 知道反向代理後面那兩行設定為什麼不設就登入不了
  • 知道哪些事情永遠不要做,包含你在網路上一定會看到的那個「開 8123 port forward」教學
注意:Home Assistant 2026.8 版把網路相關設定整個搬進 UI 了,原本寫在 configuration.yamlhttp: 區塊已經進入淘汰期。這章會以新的 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,填錯一格機器就從網路上消失,要接螢幕鍵盤救。而且路由器不知道你佔了這個號碼,可能發給別人造成衝突
提示:兩種都做也可以,但要確保填的是同一個 IP,而且那個 IP 要落在路由器的 DHCP 發放範圍之外(或者做成保留)。不然遲早會撞號。新手就乖乖只做路由器那邊的保留。

順手把 MAC 位址學起來

要在路由器上做保留,你得先讓路由器認得「哪一台是 Home Assistant」。認的方式是 MAC 位址(MAC Address) —— 每張網路卡出廠就刻死的一組編號,長得像 DC:A6:32:1B:4E:F0

門牌會換,MAC 不會換。所以路由器上的保留規則其實是在說:「看到 MAC 是這串的傢伙來要門牌,一律給它 192.168.1.37。」

動手做:把主機 IP 釘死,並確認網路頁

  1. 在 Home Assistant 裡找出主機的 IP 和 MAC

    設定 → 系統 → 網路。這一頁會列出你主機的網路介面(有線、無線)和目前拿到的 IP 位址。把 IP 抄下來。

    MAC 位址不一定會顯示在這頁,最好找的地方是路由器的連線裝置清單 —— 打開路由器管理頁,找名字含 homeassistant、或 IP 跟你剛抄下來那串一樣的那一台,旁邊就會列出 MAC。這樣還有一個好處:等一下要做保留,本來就得在路由器上做,你人已經在那裡了。

  2. 登入路由器管理頁

    路由器的管理網址通常是 192.168.1.1192.168.0.1,也常常印在機器底下的貼紙上。帳密同樣在貼紙上 —— 如果你從來沒改過那組預設密碼,現在就改,這是後面所有資安措施的地基。

  3. 找到 DHCP 保留的設定頁

    每家路由器叫法都不一樣,這是最卡的一步。常見的名字有:DHCP 保留位址DHCP ReservationAddress Reservation靜態 DHCPStatic Lease固定分配。位置通常在「區域網路 / LAN」或「進階設定 → DHCP 伺服器」底下。

    找不到就用你的路由器型號去搜「型號 + DHCP 保留」。這個功能連最便宜的家用機都有,只是藏得深。

  4. 新增一筆保留

    填入第 1 步抄下來的 MAC 位址,指定你要給的 IP。建議挑一個好記又不容易撞到的號碼,例如 192.168.1.10。備註欄寫上「Home Assistant」,三個月後的你會感謝現在的你。

    存檔。有些路由器需要重開才生效。

  5. 讓主機重新拿一次號碼

    保留設好之後,主機不會馬上換過去,要等舊租約到期。最快的方式是把 Home Assistant 主機重開一次(設定 → 系統 右上角的電源選單 → 重新啟動系統),或把網路線拔插一下。

  6. 驗收

    重開完,回到 設定 → 系統 → 網路,確認顯示的 IP 就是你指定的那一個。然後用新 IP 打開網頁,能正常登入就成功了。把這個網址設成書籤,取代你原本那個。

  7. 把內部網址填進去

    同樣在 設定 → 系統 → 網路 這一頁,有「內部網址(Internal URL)」與「外部網址(External URL)」兩格。內部網址填你剛剛釘好的那個,例如 http://192.168.1.10:8123

    這兩格只要填到連接埠就好,後面不要再接路徑。填 http://192.168.1.10:8123/lovelace 這種寫法會讓後面產生連結的功能接出奇怪的網址,是常見的自找麻煩。

觀念:這兩格為什麼重要?因為 Home Assistant 產生通知連結、把攝影機畫面推給手機、或告訴 App「你該連去哪」的時候,用的就是這兩格。填錯的話症狀很怪:功能都在,就是點通知進不去。

homeassistant.local 是什麼,還有 8123 這個號碼

.local 網址背後的魔法叫 mDNS

你第一次裝 Home Assistant 的時候,教學叫你打 homeassistant.local:8123,然後它就通了。這件事其實有點神奇 —— 你家又沒有 DNS 伺服器,誰告訴你電腦這串字要去哪?

答案是 mDNS(Multicast DNS,多播 DNS)。運作方式白話講就是在教室裡大喊

  1. 你的電腦對全區網廣播

    「有沒有人叫 homeassistant?」這句話用多播的方式送出去,同一個網段裡每台機器都聽得到。

  2. Home Assistant 主機舉手

    「我是,我在 192.168.1.10。」

  3. 你的電腦記下來,直接連過去

    整個過程不需要任何伺服器,全靠喊話。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 OS80http://homeassistant.local(後面不用加號碼)
2026.8 之前就在跑的系統,升級上來維持 8123http://homeassistant.local:8123
Container / Docker 安裝8123http://192.168.1.10:8123

官方在改版說明裡講得很白:已經在跑的系統什麼都不會變,你也不需要做任何事,這只影響全新安裝的 Home Assistant OS。換句話說,網路上絕大多數教學裡的 :8123 對你多半還是對的。

為什麼要改?因為 80 是網頁的預設號碼,瀏覽器會自動補,網址就能少打一截 —— 純粹是為了讓新手少一個門檻。

提示:2026.8 之後你可以自己在 設定 → 系統 → 網路 改連接埠。官方在這裡放了一個很貼心的保險:改完之後系統會等你確認「還連得上嗎」,如果五分鐘內你沒確認,它就當作出事了,自動把舊設定放回去並重新啟動。所以就算改壞了也不會把自己鎖在門外。

四條路,哪一條適合你

附錄 A 已經介紹過這四條路各是什麼,這裡不重講,直接給你決策用的對照表。看完挑一條,然後跳到對應的那一節動手。

比較項目Nabu CasaCloudflare TunnelVPN
(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 + 反向代理。
觀念:這四條不是互斥的。很常見的組合是「Nabu Casa 給家人日常用 + Tailscale 給自己維護時用」,兩條同時開著沒有任何問題。

路線一:Home Assistant Cloud(Nabu Casa)

這是官方自己營運的訂閱服務,訂閱費直接回頭養 Home Assistant、ESPHome、Z-Wave JS 這些專案的開發。所以它同時是「最省事的方案」和「最直接的贊助方式」。

它幫你做了什麼

你的主機主動往外跟 Nabu Casa 的伺服器建立一條連線,之後所有外面來的請求都走這條既有的連線進來。你的路由器完全不用開任何洞 —— 這就是為什麼它不怕 CGNAT、也不怕你家 IP 天天在變。

實作步驟

  1. 找到雲端設定

    設定 → 系統 → 網路,在「Home Assistant 網址」底下的網際網路(Internet)那一欄,把「使用 Home Assistant Cloud(Use Home Assistant Cloud)」打開。另一個入口是 設定 → Home Assistant Cloud,兩邊都能到同一個地方,以你畫面上有的那個為準。

  2. 註冊或登入帳號

    用 email 註冊一個 Nabu Casa 帳號。這跟你登入 Home Assistant 的帳號是兩回事,別搞混。註冊時可以選「開始一個月免費試用」,不用先付錢。

  3. 打開遠端連線開關

    登入之後把遠端控制的開關打開。系統會配一組固定的網址給你,格式是一長串代碼加上 .ui.nabu.casa,例如 https://abcd1234-ef56-7890-abcd-ef1234567890.ui.nabu.casa

    醜歸醜,但它是 HTTPS、是唯一的、而且不會變。

  4. 把網址存進手機 App

    打開 Companion App(第 7 章裝過的那個),到 App 的設定裡把這個網址填進「外部網址」。內部網址維持你在區網的 IP。App 會自己判斷現在該用哪一個。

  5. 測試

    把手機 Wi-Fi 關掉,只用行動網路,打開 App。能進去就成功了。

注意:官方文件有一條很容易踩的說明:透過 Home Assistant Cloud 進來的連線,在系統看來 IP 全部都是 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 容器
注意:Cloudflared 的官方說明特別提到,Freenom 那類免費網域已經不能用了。要走這條路就得去正規的網域商買一個,一年通常幾百塊台幣。

實作步驟

  1. 先把網域交給 Cloudflare

    在 Cloudflare 後台新增你的網域,它會給你兩組名稱伺服器(Nameserver)。回到你買網域的地方,把名稱伺服器改成 Cloudflare 給的那兩組。這步生效要等,有時候幾分鐘有時候幾小時。

  2. 加入第三方 App 倉庫

    Cloudflared 不是官方內建的 App,要自己加倉庫。走 設定 → Apps(舊版叫「附加元件」)→ 安裝 App(Install app) → 右上角三點選單 → 倉庫(Repositories),貼上 https://github.com/homeassistant-apps/repository,按新增。

    你在舊教學裡會看到 brenner-tobias/addon-cloudflared 這個網址。那個舊倉庫現在的說明頁自己就寫著「已經搬到 homeassistant-apps 這個組織」,並要你改用上面那串新的,所以別再貼舊的了。加第三方倉庫的完整流程在第 20 章講過。

  3. 安裝並設定 Cloudflared

    倉庫加好之後,清單裡會多出一張新卡片,在裡面找到 Cloudflared,安裝。到它的設定分頁,填入你想用的外部網址,例如 ha.你的網域.com

  4. 啟動並完成授權

    啟動 App,然後去看它的記錄檔分頁。它會印出一個授權網址,你要用瀏覽器打開、登入 Cloudflare、授權這條通道連到你的網域。這一步是新手最容易漏掉的 —— 不看記錄檔就不知道要做什麼。

  5. 設定信任代理

    這條路的流量是從 App 容器轉進 Home Assistant 的,等於中間多了一層代理。不設定信任代理,請求會直接被 Home Assistant 擋掉(典型症狀是網頁打得開卻登不進去,或整頁 400 Bad Request),設定方式看下面「反向代理必設」那一節。

  6. 測試

    關掉手機 Wi-Fi,用行動網路打開 https://ha.你的網域.com

提示:Cloudflare 後台可以再往上疊一層存取控管,要求先通過驗證才碰得到 Home Assistant 的登入頁。對於「我不希望我的登入頁被全世界掃到」的人,這是這條路最大的加分項。

路線三:VPN(Tailscale 或 WireGuard)

前兩條路是「把 Home Assistant 安全地放到網路上」。VPN 是完全不同的思路:把你的手機拉進家裡的網路

用鑰匙來比喻最傳神:前兩條是在門口裝了一個很嚴格的警衛,VPN 是根本沒有門,只有拿到鑰匙的人才知道有這棟房子。因為 Home Assistant 從頭到尾沒有對公網開放過,這是四條路裡資安最強的一條

Tailscale:新手直接選這個

Tailscale 幫你把 VPN 最難的部分(金鑰交換、打洞、找路)全部自動化了。它甚至能穿過 CGNAT,這點對台灣很多用戶是關鍵。

  1. 註冊 Tailscale 帳號

    用 Google 或 GitHub 帳號登入即可,個人使用的免費額度對家庭場景綽綽有餘。

  2. 加入社群 App 倉庫

    設定 → Apps安裝 App → 右上角三點選單 → 倉庫,加入 https://github.com/hassio-addons/repository。這是 Home Assistant Community Add-ons(現在叫 Community Apps)的倉庫,Tailscale 和 WireGuard 都在裡面。

  3. 安裝並啟動 Tailscale

    安裝完啟動,然後看記錄檔分頁,裡面會有一個授權網址。用瀏覽器打開它,把這台機器加進你的 Tailscale 網路。

  4. 手機也裝 Tailscale

    從 App Store 或 Play 商店裝 Tailscale App,用同一個帳號登入。

  5. 用 Tailscale 網址連線

    連上 VPN 之後,你可以用 Home Assistant 在 Tailscale 網路裡的位址連線。如果 MagicDNS 有開,網址會長得像 homeassistant.tail1234.ts.net 這種格式(tail1234 是系統配給你的)。

觀念:Tailscale App 有一個叫 advertise_routes 的設定,預設是把你家的區網網段分享出去。打開它的好處是:連上 VPN 之後,你不只連得到 Home Assistant,連家裡的 NAS、印表機、路由器管理頁都能碰到,等於整條網路線牽到你手機上。維護的時候超好用。
注意:如果你用 Tailscale 的 Serve 或 Funnel 功能來對外分享,流量會經過一層本機代理,這時候同樣要設定信任代理,而且信任的位址是 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 省下來的時間很可觀。

注意:VPN 這條路有個先天限制 —— Alexa、Google Assistant 這類雲端語音助理沒辦法用。因為它們的伺服器在網際網路上,不在你的 VPN 裡面,永遠連不到你的 Home Assistant。要語音就得配 Nabu Casa,或走本地語音(第 19 章)。

路線四: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 這條最短路徑為例)

  1. 先確認你不在 CGNAT 底下

    這一步先做,不然後面全白工。方法:登入路由器,找到 WAN 狀態頁,看它顯示的對外 IP。再用手機或電腦搜尋「我的 IP」看一次外界看到的 IP。

    兩個一樣 → 沒問題。兩個不一樣 → 你在 CGNAT 底下,這條路走不通,請改走前面三條的任何一條。

    另一個判斷方式:路由器 WAN IP 如果落在 100.64.x.x100.127.x.x 這個範圍,那是電信商專門給 CGNAT 用的區段,直接確定。

  2. 註冊 Duck DNS

    到 Duck DNS 網站用社群帳號登入,申請一個子網域,並把頁面最上方那串 token 抄下來。

  3. 安裝並設定 Duck DNS App

    在官方 App 商店裝 Duck DNS。設定分頁裡填入 tokendomains(你申請的網域),然後把 Let's Encrypt 底下的 accept_terms 改成 true —— 官方文件寫得很清楚:「把值改成 true 才會使用 Let's Encrypt 服務」。

    憑證檔名預設是 fullchain.pemprivkey.pem,沒特別理由不要改。

    這個 App 拿憑證走的是 DNS-01 驗證 —— 白話說就是「Let's Encrypt 不會連進你家,它是去查你網域的 DNS 紀錄來確認網域是你的」。所以光是要拿到憑證,你不需要在路由器開任何洞。官方文件另外提醒,如果你是把 Duck DNS 的網域再接到自己的網域上,記得幫驗證用的名稱補一筆 CNAME,不然 DNS-01 查不到就會失敗。

  4. 安裝 NGINX SSL proxy

    裝官方的 NGINX Home Assistant SSL proxy。設定分頁填入 domain(你的 Duck DNS 網址)、certfilekeyfile(就是上面那兩個檔名,它們會放在 /ssl 資料夾裡)。

  5. 設定信任代理

    這步不做,下一步一定失敗。看下一節。

  6. 在路由器上 port forward 443

    這一步才是真正要開洞的地方:只轉 443(HTTPS)到你的主機,目標 IP 就是你在本章第一節釘死的那個。

    除了 443 之外一個都不要開 —— 特別是 8123 絕對不要轉(那等於把沒加密的登入頁直接掛到網路上,理由看下一節)。80 也不必轉,NGINX App 的 80 port 預設就是關的,而你的憑證是走 DNS 驗證拿的,不靠 80。

  7. 填入外部網址並測試

    設定 → 系統 → 網路,外部網址填 https://你的網域.duckdns.org。然後關掉手機 Wi-Fi 測試。

危險:這條路唯一需要在路由器開洞的地方是 443。開完之後,你的登入頁就在網際網路上,全世界的掃描機器人幾分鐘內就會找到它。所以走這條路的人,後面「資安硬規則」那一節是必讀不是選讀

反向代理後面,這兩個設定不做就登不進去

這一節是全章最高頻的求救問題。只要你走的是 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 來的便條紙才算數。

危險:官方文件對這件事的描述是「如果沒有設定這些選項,來自反向代理的請求會被擋掉」,而且這是刻意設計的行為,不是 bug。NGINX App 的說明更具體:「透過這個代理的請求收到 400 Bad Request,那你多半是漏了 trusted_proxies 設定。」症狀通常是打得開網頁、輸入帳密之後卻進不去,或直接一片 400。

2026.8 之後:在 UI 設定(建議做法)

  1. 打開網路設定頁

    設定 → 系統 → 網路,找到 HTTP 伺服器(HTTP server)那一區。

  2. 打開「信任 X-Forwarded-For」

    官方的欄位名稱是 Trust X-Forwarded-For,把它打開。

  3. 填入信任的代理位址

    欄位叫 Trusted proxies(信任的代理),官方說明是「允許設定 X-Forwarded-For 的反向代理 IP 位址或 CIDR 網段」。填什麼看下面的對照表。

  4. 存檔並重新啟動

    存檔後重新啟動 Home Assistant,再測一次。

該填哪個位址

你的代理是填進 Trusted proxies依據
Home Assistant 的 App(附加元件),例如 NGINX SSL proxy、Cloudflared172.30.33.0/24官方 NGINX App 文件直接給的網段,這是 App 容器所在的內部網路
Tailscale 的 Serve / Funnel127.0.0.1Tailscale 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 到公網

危險:網路上最多的那種教學 ——「在路由器加一條規則把 8123 轉進去,就能從外面連了」—— 是這章唯一明確禁止的做法。原因有三個,每個都足以致命:
(一)預設是 http:// 沒有加密,你的帳號密碼在網路上是裸奔的明文,任何中間節點都看得到。
(二)掃描機器人整天在掃全世界的 8123,你開起來幾分鐘內就會被找到,之後是不間斷的暴力破解。
(三)Home Assistant 一旦被攻破,等於你家的門鎖、攝影機、在家與否的紀錄全部交出去。

如果你已經開了,現在就去路由器把那條規則刪掉,然後從前面四條路裡挑一條重做。這不誇張,這是本章最重要的一句話。

規則二:一定要開 MFA

多重驗證(MFA / 兩步驟驗證)的意思是:光有密碼還不夠,還要輸入手機上每 30 秒換一次的六位數字。密碼外洩了,攻擊者手上沒有你的手機,還是進不來。

  1. 打開個人資料頁的安全分頁

    點左下角你的名字進入個人資料(User profile),切到 安全性(Security) 分頁。

  2. 啟用多重驗證模組

    找到「多重驗證模組(Multi-factor authentication modules)」這一區,按啟用(Enable)

  3. 用驗證器 App 掃 QR Code

    手機上先裝一個驗證器 App,掃描畫面上的 QR Code,然後把 App 顯示的六位數字填回去確認。

  4. 把備援碼收好

    設定過程給你的備援資訊務必存在手機以外的地方。手機掉了又沒有備援,你會被鎖在自己家外面。

  5. 家裡每個帳號都做一次

    你自己開了沒用,家人的帳號密碼是 123456 一樣是破口。第 5 章有多使用者管理的完整說明。

提示:除了驗證器 App,Home Assistant 還有一種以通知為基礎的驗證模組,會把一次性密碼透過通知送到你指定的地方。但官方文件有提醒它的弱點:這個模組沒辦法知道通知有沒有成功送達,如果你收不到通知,就登入不了。所以主力還是用驗證器 App 比較穩。

規則三:打開 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 來抓畫面
來賓網段客人的手機只能上網,看不到你家任何東西
注意:切 VLAN 之後幾乎一定會遇到裝置自動探索全部失效。因為 Home Assistant 找新裝置靠的是 mDNS 那種「大喊」,而喊聲預設不會跨網段。你要在路由器或防火牆上額外開啟 mDNS 轉發(不同廠牌叫法不同,常見的有 mDNS Repeater、Avahi Reflector、Bonjour Gateway),並且開通必要的單向規則,讓 Home Assistant 主動連得到 IoT 網段。沒有處理這件事就切 VLAN,是案場翻車最常見的原因。
提示:如果你的路由器只有「來賓網路」開關、沒有完整 VLAN 功能,那就是一個簡化版的兩段隔離 —— 把最不信任的裝置和客人丟進來賓網路,主網段留給正經裝置。雖然粗糙,但比全部混在一起好很多,而且今天下午就能做完。

多層 NAT:家裡有兩台路由器

很常見的情況:電信商給的數據機本身就是路由器,你嫌它 Wi-Fi 差,又自己接了一台。結果變成兩層 NAT,你的 Home Assistant 主機其實躲在兩道門後面。

怎麼判斷:登入你自己那台路由器,看 WAN IP。如果它顯示的是 192.168.x.x10.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 轉發已設定,且新裝置探索實測過
  • 憑證的到期與續約機制已確認會自動執行

常見卡關

  1. 憑證申請失敗,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 的記錄檔,真正的錯誤原因都寫在那裡,不要只看紅字。

  2. 在家連得上,出門連不上(或反過來)

    幾乎都是內外網網址設定的問題。到 設定 → 系統 → 網路 確認內部網址與外部網址兩格都填了、而且都填對。然後打開手機 Companion App 的設定,確認 App 那邊也有這兩個網址。

    特別提醒:這兩格填到連接埠就停手,後面不要接路徑。填成 .../lovelace 這種會讓通知連結、攝影機推播接出怪網址,症狀千奇百怪又很難聯想到這裡。

    另外一種情況是「出門正常、回家反而不行」,通常是內部網址寫的 IP 已經過期 —— 回本章第一節把 IP 釘死。

  3. 網頁打得開,帳密輸入後就是進不去,或直接 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 找不到設定的話,先強制重新整理瀏覽器。

  4. DDNS 設好了,外面還是連不到 —— CGNAT

    先做本章教過的判斷:路由器 WAN 顯示的 IP,跟你上網查到的「我的 IP」,兩個一不一樣?不一樣就是 CGNAT(電信商讓好幾百戶共用一個對外 IP)。

    CGNAT 底下,DDNS 和 port forward 全部無效,這不是設定問題,是你根本沒有一個屬於自己的對外門牌。有三個選擇:(一)打給電信商問能不能申請真實 IP,通常要加錢或換方案;(二)改走 Nabu Casa、Cloudflare Tunnel 或 Tailscale,這三個完全不受影響;(三)放棄遠端。九成的人應該選(二)。

  5. homeassistant.local 突然不能用了

    先確認你在家。再確認手機沒有連到訪客 Wi-Fi 或另一個網段。都對的話,改用 IP 直連驗證主機還活著 —— 能用 IP 進去就代表只是 mDNS 的問題,不是主機掛了。長期解法是把 IP 釘死然後改用 IP 當書籤,最不會出事。

  6. 改了連接埠之後連不進去

    如果你是 2026.8 之後在 UI 改的,不用緊張,什麼都不用做 —— 官方設計成改完會等你確認,五分鐘內沒確認就自動把舊設定放回去並重新啟動。泡杯茶等它自己回來。

    如果是舊版本或 Container 安裝手動改壞的,就得從主機端進去改回來(接螢幕鍵盤,或改 Docker 的埠對應)。

  7. 被自己的 IP 封鎖擋在外面

    密碼打錯太多次觸發了封鎖。解法是從主機端編輯 ip_bans.yaml,把你自己那筆刪掉,再重新啟動 Home Assistant。沒辦法碰檔案的話,換一條網路進來(例如手機開行動網路熱點),你的 IP 就變了。

  8. 切了 VLAN 之後找不到新裝置

    預期之內。自動探索靠的是不會跨網段的多播流量。到路由器或防火牆開啟 mDNS 轉發(mDNS Repeater / Avahi Reflector / Bonjour Gateway),並確認有允許 Home Assistant 主動連進 IoT 網段的規則。

常見問題

我只是想在外面看一下家裡的燈開了沒,真的需要搞這麼複雜嗎?
不需要。付錢訂 Home Assistant Cloud,開一個開關,五分鐘結束,而且官方文件自己把它列為「對多數人最簡單也最安全」的選項。這章之所以厚,是因為要照顧到不想付費、想學網路、或有特殊環境(案場、多層 NAT)的人。如果你的時間比每月幾百塊值錢,就直接訂閱,不要有罪惡感 —— 那筆錢還直接回頭養這個開源專案。
我在網路上看到的教學都說開 8123 port forward 就好,為什麼你說不行?
因為那些教學多半很舊,寫的時候威脅環境跟現在不一樣。三個具體原因:沒有加密(預設是 http://,帳密在網路上是明文)、會被掃到(掃描機器人整天在掃全世界的 8123,通常幾分鐘內就找上門)、後果太重(Home Assistant 裡有你家的門鎖、攝影機、在家與否的紀錄)。這章講的四條路全部都能達到同樣的效果而且安全得多,沒有理由走那條。
我的 Home Assistant 從 2026.8 升上來,網址還要加 :8123 嗎?
要。官方在改版說明講得很明確:已經在跑的系統什麼都不變,你也不需要做任何事,新的預設只影響全新安裝的 Home Assistant OS。所以你原本的 :8123 繼續用就好。如果你真的很想換成不用打號碼的版本,2026.8 之後可以到 設定 → 系統 → 網路 自己改,而且改壞了五分鐘內會自動復原,風險不高 —— 但改完記得所有書籤、App 設定、反向代理設定都要跟著更新。
我的 configuration.yaml 裡有 http: 區塊,現在要不要刪?
要。從 2026.7.5 版開始 Home Assistant 就會跳警告,說 HTTP 的 YAML 設定已淘汰、設定已經幫你匯入、請把 http: 區塊移除,並註明「這在 2027.2.0 版會停止運作,升級前請先處理」。升級時你原本的設定會自動被匯入到 UI,正確做法是:先到 設定 → 系統 → 網路 確認設定都在(trusted_proxies 那些有沒有正確帶過去,尤其要看仔細),確認沒問題後把 configuration.yaml 裡的整個 http: 區塊刪掉,再重新啟動。刪完如果 UI 上找不到設定,先把瀏覽器強制重新整理一次再說。
Nabu Casa 和 Tailscale 可以同時開嗎?
可以,而且是很實用的組合。Nabu Casa 給家人日常用(網址一貼就能用,也能接語音助理),Tailscale 給你自己維護時用(連上之後整個家裡網路都碰得到,路由器管理頁、NAS 都能開)。兩者互不干擾。唯一要注意的是,如果 Tailscale 有開 Serve 或 Funnel,記得把 127.0.0.1 加進信任代理清單。
VPN 那條路為什麼不能用 Alexa 或 Google 語音?
因為 VPN 的邏輯是「把你的裝置拉進家裡的網路」,而 Alexa、Google Assistant 的伺服器在網際網路上,它們不可能加入你的 VPN,所以永遠連不到你的 Home Assistant。要雲端語音助理,就得走 Nabu Casa(訂閱內含這個串接),或者改用完全跑在本地、不需要對外連線的語音方案(第 19 章)。
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 底下,怎麼三十秒確認?
兩個數字比對就好。第一個:登入路由器,找 WAN 狀態頁顯示的對外 IP。第二個:用手機或電腦搜尋「我的 IP」,看網站告訴你的 IP。兩個一樣代表你有真實對外 IP,DDNS 那條路可以走。兩個不一樣代表中間還隔著電信商的一層,你在 CGNAT 底下。另外,路由器 WAN IP 如果落在 100.64.x.x100.127.x.x 這個區段,那是電信商專門留給 CGNAT 用的,可以直接確定。CGNAT 底下請走 Nabu Casa、Cloudflare Tunnel 或 Tailscale,這三條完全不受影響。
為什麼我開了 IP 封鎖,但攻擊記錄裡全部都是 127.0.0.1?
兩種可能。第一種:你在用 Home Assistant Cloud。官方文件明講「如果使用 Home Assistant Cloud 做遠端存取,所有雲端連線都會顯示成 IP 127.0.0.1」,這是正常的,代表 IP 封鎖對雲端連線沒有鑑別力 —— 你的防線要靠 MFA。第二種:你有反向代理但沒設好信任代理,所以所有請求看起來都來自代理本身。這種情況下你千萬不要按下封鎖,因為封一個等於封掉全部(包括你自己),先去把 trusted_proxies 設對。
切 VLAN 把 IoT 裝置隔離之後,Home Assistant 還找得到它們嗎?
要額外設定才找得到。自動探索靠的是 mDNS 那種「在網段內大喊」的機制,喊聲預設不會跨 VLAN,所以你會發現新裝置全部探索不到。解法是在路由器或防火牆上開啟 mDNS 轉發(各家叫法不同:mDNS Repeater、Avahi Reflector、Bonjour Gateway),並且額外允許 Home Assistant 主機單向連進 IoT 網段(IoT 那邊仍然不能反向連回主網段)。這是案場翻車最常見的原因,切之前先確認你的網路設備支援這些功能。