連線疑難排解 · Clash 技術部落格

OpenClash IPv6 節點網域解析失敗怎麼辦?

OpenClash 節點解析失敗,公用網路 IPv6 DNS 返回 198.18.x?核對 OUTPUT 計數及 v0.47.156 修復。升級後驗證解析、代理與直連,異常時恢復原設定。

  • OpenClash
  • IPv6
  • DNS 劫持
  • SmartDNS
  • 節點解析
本文目錄

路由器本身的網域查詢出錯,與家中某台裝置無法連網,需要查看的證據不同。這裡要檢查的是原本應由公用解析器提供的回答,是否變成代理的虛擬位址。查詢結果與防火牆計數必須相符,才能進行外掛升級或暫時避開問題,而不是將所有相關功能一起關閉。

查詢公用網路 IPv6 DNS,卻收到 198.18.x

核對 OpenClash 的 IPv6、路由器本機代理、本機 DNS 攔截和 Fake-IP 狀態。上述功能開啟時,再檢查路由器上 SmartDNS 等解析器向公用 IPv6 DNS 查詢是否收到 198.18.x,以及使用網域作為伺服器位址的代理節點是否同時無法連線。

一般終端打不開網頁、LAN 裝置拿不到 IPv6、訂閱下載失敗或 DNS 連接埠被 AdGuard Home 佔用,並不能直接證明是同一問題。先確認故障發生在路由器本機發往公用網路 IPv6 DNS 的查詢,不要一看到 IPv6 就關閉整個網路功能。

只有同時滿足這些條件才繼續

  • OpenClash 版本低於已收錄修復的 v0.47.156,或升級後尚未重啟服務
  • 系統使用 fw4/nftables 或 legacy ip6tables,並開啟路由器本機代理
  • 本機 DNS 劫持和 Fake-IP 已啟用,路由器本機還有 SmartDNS 等解析器
  • 該解析器設定了公用網路 IPv6 DNS 上游,節點伺服器位址使用網域

儲存外掛程式包、DNS 設定與管理入口

記錄外掛程式和核心版本、執行模式及 SmartDNS 上游;按下面步驟儲存設定、設定檔和安裝套件,便於升級失敗時恢復。

測試期間不要同時改訂閱、規則、DNS 上游和執行模式。一次只動一項,並保留修改前後的查詢結果;否則節點恢復後也無法判斷是哪一步起作用。

準備還原材料

  1. 匯出外掛程式設定

    在設定檔管理中備份設定和目前使用的設定檔,下載到路由器之外的裝置儲存。

  2. 保留原安裝套件

    儲存目前版本對應的官方 IPK 或 APK,並記下系統使用 opkg 還是 apk。

  3. 記錄觸發開關

    抄下 IPv6、路由器本機代理、本機 DNS 劫持、Fake-IP 與 SmartDNS IPv6 上游狀態。

  4. 準備直連入口

    確認能透過 LAN 管理路由器;遠端維護時不要在沒有備用連線的情況下修改 DNS 和防火牆。

在路由器上對照 DNS 回答與規則計數

在路由器終端直接指定一個目前可達的公用網路 IPv6 DNS 查詢實際網域。正常結果應是網域的公開 A 或 AAAA 記錄;如果回傳 198.18.0.0/16,並且執行前後對應的 IPv6 OUTPUT DNS Hijack 規則計數增加,查詢就被錯誤送回了本機 Clash DNS。

OpenClash issue #5251 的復現使用 2400:3200::1。這個位址是否適合你的網路仍要先確認;若 IPv6 路由本身不可達,超時只能說明上游不可用,不能證明發生了劫持。查詢網域也可換成你明確知道有公開記錄的普通網域。

在路由器 SSH 終端讀取計數,依本機實際使用的防火牆選擇下方一條命令:fw4/nftables 用第一條,legacy ip6tables 用第二條。不要只因兩種命令都存在就混用;查詢前後各執行一次,不歸零、不刪除規則。

fw4/nftables:只列出路由本機 DNS 規則
nft list chain inet fw4 nat_output
legacy ip6tables:只讀取 OUTPUT 的精確計數
ip6tables -t nat -nvxL OUTPUT --line-numbers

在 fw4 輸出中,找到 IPv6、UDP 的 53 連接埠、redirect 和 OpenClash DNS Hijack 標記同時對應的規則,比較同一行 counter 的 packets 與 bytes。規則也可能合併 TCP/UDP;不要把整個 OUTPUT 的總量當成查詢證據。

在 legacy 輸出中,對照帶 OpenClash DNS Hijack 標記的 IPv6 UDP/53 REDIRECT 規則,讀取同一行的 pkts 與 bytes。舊規則的目的位址範圍為 ::/0;修復後的規則只比對 ::1,公網查詢不應增加這條規則的計數。

找不到對應規則或無法讀取計數時,保存版本和查詢結果,停止按這個故障進行升級;只有 198.18.x 回應還不足以證明是同一問題。規則輸出可能含網路資訊,對外求助前先遮蔽敏感內容。

在路由器上指定實際可達的公用網路 IPv6 DNS
nslookup www.nic.ad.jp 2400:3200::1

按結果決定下一步

查詢結果規則計數結論
回傳 198.18.xIPv6 OUTPUT 計數增加符合已確認的路由本機 IPv6 DNS 劫持
回傳實際 A 或 AAAA計數不增加該路徑正常,轉查訂閱中的節點解析 DNS
查詢超時計數不增加先檢查 IPv6 路由和所選 DNS 是否可達
LAN 裝置異常但路由器查詢正常無對應變化轉查 RA、DHCPv6、RDNSS 或瀏覽器安全 DNS

只有 SmartDNS 查詢異常,Mihomo 上游正常

核對程序所屬使用者群組和查詢去向;Mihomo 通常使用被規則排除的 GID(使用者群組編號),其他本機解析器的查詢則可能命中 OUTPUT 規則。

所有 DNS 都回傳 connection refused

檢查本機監聽連接埠和上游設定,不要套用本文的 IPv6 規則修復。

指定 IPv4 DNS 正常,指定 IPv6 DNS 回傳 198.18.x

保留這組對照和計數變化,進入版本升級。

路由器本機存取公用網路 IPv6 DNS 的錯誤路徑
  1. SmartDNS 等本機解析器向公用網路 IPv6 位址傳送 53 連接埠查詢
  2. OpenClash OUTPUT 規則舊版用 ::/0 誤匹配所有 IPv6 DNS 目的位址
  3. 本機 Clash DNS被重新導向的查詢在 Fake-IP 模式下回傳 198.18.x
  4. 代理節點網域錯誤結果使使用網域的節點無法完成撥號

修復把路由本機的 IPv6 DNS 劫持範圍從所有位址收窄到回環位址 ::1;LAN 裝置的 DNS 接管規則沒有被這次修改移除。

為什麼公用網路 IPv6 DNS 會被當成本機查詢

舊規則原本只應接管路由器本機發往回環位址的 DNS,卻把 IPv6 目的範圍寫成 ::/0。這個範圍包含全部 IPv6 位址,所以 SmartDNS 存取公用網路 IPv6 DNS 的 TCP 或 UDP 53 連接埠時,也會被重新導向到本機 DNS。

問題不是 PR #5209 新增了 ::/0。該提交分開識別 IPv4 與 IPv6 規則後,讓原本被提前跳過的舊分支穩定執行,才使缺陷從 v0.47.117 起更容易暴露。PR #5252 把 nftables 兩處和 legacy ip6tables 四處都改為 ::1,並保留 LAN 側 DNS 接管。

升級到包含修復的 v0.47.156

OpenClash v0.47.156 的官方發布記錄已確認包含 #5252。以下以這個固定版本說明升級;已執行較新版本時,先確認是否仍有相同的查詢與計數證據,不為照抄步驟而降級。

舊的 ::/0 規則可能仍在防火牆中生效。只有重新產生規則,原始碼中的 ::1 才會真正生效。

一次可還原的升級

  1. 核對系統套件格式

    opkg 系統選擇官方 IPK,apk 系統選擇官方 APK,並確認下載來源是 v0.47.156 Release。不要混用開發分支檔案或不同包格式。

  2. 暫停額外改動

    保留原核心、訂閱、執行模式和 DNS 設定,只升級 OpenClash 外掛程式。

  3. 安裝並重啟服務

    完成安裝後重啟 OpenClash,等待防火牆與 DNS 規則重新產生。

  4. 先查日誌再聯網

    確認設定測試、核心啟動和 DNS 監聽成功;失敗時恢復原包與備份。

對外查詢、本機回環與節點連線的再次檢查

用升級前同一台路由器、同一個網域和同一個公用網路 IPv6 DNS 再查一次。修復生效後應回傳實際 A 或 AAAA,公用網路查詢不再增加 IPv6 OUTPUT DNS Hijack 計數;向本機回環 ::1 發出的查詢仍可被 OpenClash 接管。

修復驗收清單

  • OpenClash 版本包含 v0.47.156 的修復,服務已在安裝後重新啟動
  • 指定公用網路 IPv6 DNS 回傳實際 A 或 AAAA,不再回傳 198.18.x
  • 公用網路 IPv6 DNS 查詢不再增加路由本機 IPv6 劫持規則計數
  • 查詢 ::1 時本機 DNS 接管仍正常,LAN 裝置解析沒有被破壞
  • 至少一個原節點完成網域解析、撥號與實際頁面存取,並有對應連線記錄

暫時不能升級時怎麼規避和還原

暫時無法升級時,可先從 SmartDNS 移除公用網路 IPv6 DNS 上游,改用已經驗證可達的 IPv4 上游;也可以臨時關閉路由器本機代理或本機 DNS 劫持中的一個觸發項。每種方式都會改變路由器自身流量或 DNS 接管,必須逐項測試,不能當成長期修復。

如果升級後異常擴大,先在管理頁面停用 OpenClash;若 DNS 仍指向已停止的服務,恢復可連線的上游。確認 LAN 管理入口可用後,還原原外掛套件與設定備份並重新啟動服務,再用升級前的 IPv4/IPv6 查詢對照原狀態。

公用網路 IPv6 DNS 已回傳實際結果但節點仍失敗時,轉查 proxy-server-nameserver、訂閱內容、TLS 和節點伺服器,不再繼續改 OUTPUT 規則。

臨時方案的影響

操作適合情況必須復查
SmartDNS 改用可達的 IPv4 上游無法立即升級但需要恢復節點解析本機網域、快取和節點網域都能正常解析
暫時關閉路由器本機代理只有路由器自身 DNS 受影響路由器更新、訂閱與外掛程式下載的出站路徑
暫時關閉本機 DNS 劫持可接受終端按 DHCP 傳送 DNSLAN 裝置是否繞過預期分流和 DNS 策略
恢復原包與設定升級後服務無法啟動或 LAN 斷網版本、DNS 監聽、防火牆規則和實際存取

參考資料