2021-04-09 | UNLOCK

Clash DNS 配置文件

今天稍微研究了 Clash 的 DNS 配置文件,做個記錄。

DNS 配置範例

懶得看字的可以直接複製這段去用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dns:
enable: true
#listen: 0.0.0.0:53
ipv6: false
enhanced-mode: fake-ip
# nameserver 裡 DoH / DoT 的域名使用 default-nameserver 請求
default-nameserver:
- 119.29.29.29
- 223.5.5.5
# 國內域名使用 nameserver 請求
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
# 國外域名使用 fallback 請求
fallback:
- tls://one.one.one.one:853
- tls://dns.google:853
- https://dns.twnic.tw/dns-query
- https://dns.adguard.com/dns-query
- https://doh.dns.sb/dns-query

nameserver 解說

  • default-nameserver: 也就是 bootstrap DNS,這裡的 ns 只有一個用途,就是解析 nameserver 裡面用到的域名(DoH / DoT 的域名)。只能填寫 IP。
  • nameserver: 每當 Clash 收到一個域名,會對 nameserver 和 fallback 中的服務器並行發出請求,若 GEOIP 為 CN 的,採用 nameserver 裡面的結果。
  • fallback: 每當 Clash 收到一個域名,會對 nameserver 和 fallback 中的服務器並行發出請求,若 GEOIP 為 CN 以外的,採用 fallback 裡面的結果。

fallback 被牆會造成的結果

nameserver / fallback 查出的國內/國外 IP,僅用於匹配規則,實際上走代理的域名會使用遠程解析的結果。Fallback 查詢失效會影響的是「GEOIP 結果為國外的直連規則」,舉幾個例子方便說明

  • 域名:www.google.com,按照域名規則走代理,此時 Clash 會直接使用遠程解析,不使用 DNS 模塊內的服務器
  • 域名:edge.microsoft.com,按照域名規則走直連,此時 Clash 會同時向 nameserver 和 fallback 查詢這個域名,並使用 fallback 裡面的結果 → 如果 fallback 被牆,Clash 日誌會連不上這個域名,日誌報錯 all DNS requests failed
  • 若是 VPS 入口 IP 在國外,VPS 自身的域名也會使用 fallback 裡的結果 → 如果 fallback 被牆,測速會顯示 Fail,若沒有緩存結果,會連不上 VPS(即使 VPS 是可用的)
  • 若不介意結果存在被污染的可能,可以不使用 fallback(在有國外域名列表的情況下,只有 Microsoft、iCloud 等國外服務還有 VPS 自身域名會使用 fallback 的結果);若 fallback 一定要用無污染的 DNS,要確保至少有一台服務器沒被牆
  • 不建議 fallback 裡面混用國內外的服務器,因為 fallback 是取最快的結果,如果放了國內服務器,基本上國外服務器的結果不會被用到,還不如直接不用 fallback

設置建議

  1. 為防止 DNS 查詢泄露或被劫持,建議在 nameserver 和 fallback 裡面僅使用 DoH 或 DoT(也就是 https:// 和 tls:// 開頭的服務器)。
  2. nameserver 設置國內服務器,fallback 設置未被阻斷的國外服務器,這樣可以達成國內防劫持,國外防污染的效果,兼顧國內網站訪問速度
  3. 若 nameserver / fallback 裡的服務器全被牆,會上不了國內/國外網
  4. fallback 也不是越多越好,太多會增加延遲,官方建議使用 4 個

Reference

評論加載中