找回密碼
 立即註冊
    查看: 211|回覆: 0

    mDNS 跨 VLAN 完整解法:從證明是它的問題,到 Avahi reflector 設好並驗證(OpenWrt 25.12/RouterOS 7.16 內建)

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 10:54:29 | 顯示全部樓層 |閱讀模式
    分完 VLAN 之後 Home Assistant 什麼都發現不了、Chromecast 消失、印表機不見了 —— 九成是 mDNS,不是防火牆。

    這篇從「先證明真的是 mDNS 的問題」開始,做到反射設好、而且能用指令證明它通了。每一步都有「你會看到什麼」。

    分完 VLAN 之後 Home Assistant 什麼都發現不了、Chromecast 消失、印表機不見了 —— 九成是 mDNS,不是防

    做完這篇你會有什麼


    • 一個會判斷「這是不是 mDNS 問題」的診斷流程,不用亂猜
    • OpenWrt 上一份完整可貼的 Avahi 設定,含最容易漏掉的防火牆那一步
    • RouterOS 上兩行指令搞定(7.16 以後有內建,網路上的舊文章都說要跑 container,已經不對了)
    • 三個驗證指令,每個都有標準輸出
    • 不想開反射時的完整替代做法


    ---

    先搞懂 mDNS 在幹嘛(這段決定你後面看不看得懂症狀)

    mDNS(Multicast DNS)是一種「不用 DNS 伺服器也能找到彼此」的機制。

    運作方式:


    • 裝置把自己註冊成 xxx.local
    • 要找某種服務的時候,往多播位址 224.0.0.251 的 UDP 5353 埠喊一聲
    • 同一個廣播網域裡符合條件的裝置直接回應


    關鍵在「同一個廣播網域」。多播封包的 TTL 是 1,它設計上就不跨越路由器。VLAN 一分開,兩邊在第二層就聽不到彼此了,防火牆規則開得再對也沒用 —— 那些封包根本沒有走到防火牆那一層。

    哪些東西依賴 mDNS


    • HomeKit(服務類型 `_hap._tcp`)—— 配對和日常通訊都靠它
    • Chromecast / Google Home(`_googlecast._tcp`)
    • AirPlay / AirPrint(`_airplay._tcp`、`_raop._tcp`、`_ipp._tcp`)
    • ESPHome 裝置的自動發現(`_esphomelib._tcp`)
    • Shelly、Tasmota、WLED 的自動發現(多半是 `_http._tcp`)
    • 大部分網路印表機、Spotify Connect、Home Assistant 本身的探索功能


    ---

    第零步:確認你的環境長什麼樣

    這篇假設你已經有兩個以上的網段,而且它們之間的單向連線是通的。先確認這件事,不然你會修錯東西。

    OpenWrt 上:
    1. ip -br addr show | grep br-lan
    複製代碼

    期望看到至少兩個 VLAN 介面各自有 IP:
    1. br-lan.1         UP             192.168.1.1/24
    2. br-lan.20        UP             192.168.20.1/24
    複製代碼

    RouterOS 上:
    1. /ip address print
    複製代碼

    期望看到兩個 VLAN 介面各有一個位址。

    然後確認單向連線是通的:在主網段的電腦上 ping 一台 IoT 裝置的 IP。
    1. ping -c 3 192.168.20.31
    複製代碼

    ping 不通的話,你的問題不是 mDNS,是防火牆的跨網段規則。先去把那個修好再回來 —— mDNS 反射只會讓裝置「被看見」,不會讓連線通過。

    ping 得通、但 HA 就是發現不了東西 —— 那就對了,繼續往下。

    ---

    第一步:證明真的是 mDNS 的問題(不要跳過)

    三個測試,五分鐘。做完你就知道是不是白忙。

    測試一:在主網段掃一次 mDNS

    在 Home Assistant 的終端機,或任何一台主網段的 Linux 機器上:
    1. avahi-browse -a -t
    複製代碼

    找不到指令的話(HA OS 的話用 Advanced SSH & Web Terminal 附加元件):
    1. apt install avahi-utils      # Debian/Ubuntu
    2. apk add avahi-tools           # Alpine
    複製代碼

    期望輸出(正常但沒反射的狀態):
    1. + enp2s0 IPv4 HA-Printer            _ipp._tcp            local
    2. + enp2s0 IPv4 living-room-nas         _smb._tcp            local
    3. + enp2s0 IPv4 Home Assistant          _home-assistant._tcp local
    複製代碼

    重點是:列出來的全部都是主網段的東西,一台 IoT 網段的裝置都沒有。這就是症狀。

    什麼都沒列出來 → 那不是跨 VLAN 的問題,是這台機器上的 avahi 服務沒跑,或是它自己的網路有問題。先修那個。

    測試二:直接用 IP 連得上嗎

    從主網段連一台 IoT 裝置的網頁介面:
    1. curl -s -o /dev/null -w "%{http_code}\n" http://192.168.20.31/
    複製代碼

    期望輸出:200(或 401、403 —— 有回應就算過)

    回 000 或一直卡住 → 防火牆沒開,不是 mDNS 的問題。

    回了 200 但 HA 還是發現不了它 —— 確定是 mDNS。

    測試三:在路由器上看多播封包到底有沒有跨過去

    在路由器上開兩個終端機。第一個:
    1. tcpdump -i br-lan.20 -n port 5353 -c 10
    複製代碼

    第二個:
    1. tcpdump -i br-lan.1 -n port 5353 -c 10
    複製代碼

    期望看到的「壞掉的樣子」:br-lan.20 這邊一直有封包:

    以下還有約 81% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:44 , Processed in 0.127587 second(s), 25 queries .

    快速回覆 返回頂部 返回列表