关于Clash等现代代理软件的规则和dns配置问题

因为今天看到有人分享clash配置文件,我之前自己也研究过,其实对于dns泄露、污染、劫持等从我睁眼看世界开始,工具们就一直在升级,这也是特色了。

首先声明我的常用的是surge,surge可以作为网关和并且使用fake-ip作为透明代理,我是surge全家桶。但是在macmini上性能较差,我在实验室环境下还是使用了8505的工控机做的软路由,并且选择了openclash,所以有些东西可能与surge记混了。

Clash作为优秀的rule-based proxy软件,以及后面的meta,免费开源,方便了用户架设在任何硬件设备上。

对于dns的问题,没有基础的建议先熟悉这位大佬写的博客:https://blog.skk.moe/post/i-have-my-unique-dns-setup/ ,帮助理解。

现代的代理软件,要先理解规则的存在,rule分为域名规则和ip规则,域名规则无需进行dns解析,因为就直接匹配domain,但是ip规则则不然,如果不配置no-resolve就会强制进行解析,拿解析到的ip来进行匹配,这样做其实无必要,因为大部分我们需要翻墙使用的网站,靠domain就够了。只有少部分直接用ip进行连接的,比如telegram。

强调一下,国外的网址需要走代理服务器的,必须要走代理服务器去进行dns解析,因为这样才能拿到离你代理服务器最近的ip,否则你拿到的是离你最近的ip,这样没用,因为你拿到ip要么没用,因为你走了代理服务器这不就绕回来了;要么拿到的就是无效ip/污染的ip。nameserver是进行第一次解析的默认dns服务器(这边就不考虑链接代理服务器时候解析使用的dns服务器了),比如baidu.com,当然这个太过明显,很有可能在你们的规则的境内网站域名list了,所以换个figma.com,这个直连也能用,但我这边卡一点。那么这个网站进来开始域名匹配,匹配一圈发现没有域名规则符合(此时的ip规则全都加了no-resolve),那么就走到GEOIP (ASN那边先跳过),此时强制进行解析(用的就是nameserver),发现figma的IP不是大陆ip,那么走到下面的final,此时final选择的是走代理,则走代理出去了。数据包会直接发往proxy,远端进行了最后的dns解析。

那从这个流程可以看出,ip规则都写上no-resolve是让匹配规则更快,因为到最后总会需要进行一次dns,no-resolve基本上匹配的是直接用ip访问的,比如telegram的数据中心。这就无需dns解析。

只要规则配置得当,其实无需考虑fallback。那么fallback是什么?clash中,fallback和nameserver是同时并发请求的,然后根据fallback-filter设置的规则选择使用哪个返回的ip。

关于dns泄漏,我也是使用redir-host模式,我是建议使用Meta内核的话,舍弃fallback-filter,直接使用nameserver-policy和nameserver来做dns分流,然后然国外的dns走代理,做好这 2 点,包通过所有 dns 泄漏测试。

实际上,在今天,还是建议用meta内核,以及其带来的nameserver-policy配合nameserver即可。

我实验室的软路由,由于规则维护的得当,基本上没有dns困扰,就是默认这样即可。

国内的dns响应快,配置cdn能进行合理的分配,速度快。如果你当地有严重的劫持等,可以使用DoH/DoT,响应速度也非常够用了。

ipv6: false
dns:
  enable: true
  ipv6: false
  enhanced-mode: redir-host
  listen: 0.0.0.0:7874
  nameserver:
  - 114.114.114.114
  - 119.29.29.29
  - 223.5.5.5
  default-nameserver:
  - 114.114.114.114
  - 119.29.29.29
  - 223.5.5.5

最后,还是要理解配置文件,根据自己当地的情况,切勿盲目使用,盲目复制粘贴不仅会影响代理工具的性能,甚至造成一些bug难以排查。

推荐一个常用dns的网站:https://dns.iui.im/#University

选择适合自己的,比如当地的运营商的dns。

42 个赞

感谢。

1 个赞

赞同!

1 个赞

感谢大佬

1 个赞

电脑端的 clash 支持 nameserver-policy,但 iOS 的stash 还不支持,所以这个规则不够普适,clash 的规则我摸索一圈下来,唯一可以做到电脑端和手机端同时支持并能防止dns泄漏并能不对国内网站造成访问障碍的,只有这个规则:


dns:
  enable: true
  ipv6: false
  nameserver:
    - 1.1.1.1
    - 8.8.8.8
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.8.8:853
  fallback-filter:
    geoip: true
    ipcidr:
      - 240.0.0.0/4

### 中间省略亿点点内容 ###

rules:
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

不过通过你们两个大佬我终于搞明白了,这个配置一律通过国际公共dns进行解析,国内ip一律直连,至少满足了我不泄漏dns且无需进行其他多余规则的增补,更重要的是 stash 也完美支持。我测试下来国内网站访问速度没有任何影响,不再需要担心哪个网站会访问不了要单独增添规则。

5 个赞

感谢分享

1 个赞

感谢分享

1 个赞

写的很好,学习了!感谢分享!!!

1 个赞

感谢分享

1 个赞

我配置的这段如何

dns:
  enable: true
  ipv6: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "localhost.ptlogin2.qq.com"
  default-nameserver:
    - 119.29.29.29
    - 114.114.114.114
    - 223.5.5.5
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  fallback:
    - https://cloudflare-dns.com/dns-query
    - https://dns.google/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
1 个赞

学习了,感谢分享

1 个赞

学习一下

1 个赞

感谢楼主分享经验,根据理解我使用以下配置,使用mihomo内核作为旁路由使用

ipv6: ture
tun:
  enable: true
  stack: mixed
  dns-hijack:
    - "any:53"
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  exclude-interface: null
  include-interface: null
  exclude-ip:
    - '192.168.0.0/16'
    - '10.0.0.0/8'
    - '172.16.0.0/12'

dns:
  enable: true
  ipv6: true
  # prefer-h3: true # h3是不是不通常建议使用?
  enhanced-mode: redir-host
  listen: :1053
  nameserver:
    - 192.168.1.114
  fallback:
    - 192.168.1.115
  # default-nameserver: # 当前配置可不使用
  #   - 192.168.1.116
  nameserver-policy:
    "+.cloudflare.182682.xyz": 192.168.1.114
    "geosite:cn,private": # 国内域名使用国内服务器解析
      - 192.168.1.114
    "geosite:geolocation-!cn": # 非国内域名使用国外服务器解析
      - 192.168.1.115
  proxy-server-nameserver: # 节点使用国内服务器解析
    - 192.168.1.114
----省略-----
rules:
  - DOMAIN-SUFFIX,ip6-localhost,DIRECT,no-resolve
  - DOMAIN-SUFFIX,ip6-loopback,DIRECT,no-resolve
  - RULE-SET,private,DIRECT,no-resolve # 私有网络专用域名列表
  - RULE-SET,lancidr,DIRECT,no-resolve # 区域网 IP 及保留 IP 地址列表
  - RULE-SET,cncidr,DIRECT,no-resolve # 中国大陆 IP 地址列表
  - RULE-SET,telegramcidr,📲 电报消息,no-resolve  # Telegram 使用的IP 地址列表,无需解析
  - GEOIP,CN,DIRECT,no-resolve
  - GEOSITE,CN,DIRECT
  - MATCH,🐟 漏网之鱼

大概是这样,其中114和115是使用的AdGuard Home分别负责解析国内和国外,先用几天看看

就是不管我怎么设置,切换什么节点,都不能在Google Play下载更新应用,访问倒是没问题

1 个赞

个人觉得default-nameserver作用不大,doh.pub一般都是连到1.12.12.12,dns.alidns.com一般连到223.5.5.5,你这样配置相当于每次访问nameserver里的dns服务器时,还要额外用default-nameserver里的dns来解析一遍nameserver的域名,实际上nameserver解析出来的ip基本就是上述的ip,可以去掉default-nameserver,把nameserver里的域名改成1.12.12.12和223.5.5.5,fallback也同理改成1.1.1.1和8.8.8.8就行了

1 个赞

使用doh的原因是为了加密吧,不是为了速度。。。直接使用udp协议的dns服务器怕被运营商抢答还是什么来着,那样就失去了抗污染的能力了。
当然以上只是我粗浅的理解

我的意思是改成
https://223.5.5.5/dns-query
这种形式,可以少一层dns解析

其实我更推荐用dot,速度快也有加密

哦哦,那确实,我也是这么用的

1 个赞

不错不错

1 个赞

用如下配置:

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 8.8.8.8
rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,lan,DIRECT,no-resolve
  - GEOIP,cn,DIRECT,no-resolve
  - MATCH,PROXY

ipleak.net 测试还是有泄露,怎么会是呢。
看来不得不使出最后手段了:

- DOMAIN-SUFFIX,ipleak.net,REJECT
1 个赞