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

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

OpenClash 開啟 IPv6 後,若節點網域解析失敗且公用網路 IPv6 DNS 回傳 198.18.x,可核對 OUTPUT 規則計數、升級至 v0.47.156,並按清單驗證與還原。

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

確認是不是這次 IPv6 DNS 劫持

本文處理的是一個條件明確的 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 上游,節點伺服器位址使用網域

動設定前儲存可還原版本

先在 OpenClash 裡備份外掛程式設定和目前設定,再儲存目前可安裝的 IPK 或 APK。記錄外掛程式版本、核心版本、執行模式、IPv6、路由器本機代理、本機 DNS 劫持和 SmartDNS 上游;這樣即使升級或調整後網路更差,也能回到原狀態。

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

準備還原材料

  1. 匯出外掛程式設定

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

  2. 保留原安裝套件

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

  3. 記錄觸發開關

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

  4. 準備直連入口

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

用指定伺服器查詢和規則計數定位

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

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

在路由器上指定實際可達的公用網路 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 的穩定版。先使用官方 Release 的系統對應安裝套件,按 opkg 或 apk 的實際套件管理員升級;不要把開發分支檔案、IPK 和 APK 混用,也不要在升級時順手更換核心和設定。

安裝完成後必須重啟 OpenClash。舊的 ::/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 接管。

DNS 對照透過後再測試原來使用網域的節點,觀察解析、撥號和實際網頁請求。只看延遲數字不夠;至少確認一個節點連線記錄和一個實際頁面都恢復。

修復驗收清單

  • OpenClash 顯示 v0.47.156,服務已在安裝後重新啟動
  • 指定公用網路 IPv6 DNS 回傳實際 A 或 AAAA,不再回傳 198.18.x
  • 公用網路 IPv6 DNS 查詢不再增加路由本機 IPv6 劫持規則計數
  • 查詢 ::1 時本機 DNS 接管仍正常,LAN 裝置解析沒有被破壞
  • 原節點完成網域解析、撥號和一次實際存取

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

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

如果升級後異常擴大,關閉系統代理和 TUN 依賴,恢復原外掛程式包與設定備份,重啟 OpenClash,再用升級前的 IPv4/IPv6 查詢對照確認回到原狀態。

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

臨時方案的影響

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

參考資料