clash icon indicating copy to clipboard operation
clash copied to clipboard

被shortcuts给REJECT掉的UDP通信却还是会触发一次DNS查询

Open Xabellee opened this issue 2 years ago • 11 comments

Verify steps

  • [X] 如果你可以自己 debug 并解决的话,提交 PR 吧 Is this something you can debug and fix? Send a pull request! Bug fixes and documentation fixes are welcome.
  • [X] 我已经在 Issue Tracker 中找过我要提出的问题 I have searched on the issue tracker for a related issue.
  • [X] 我已经使用 dev 分支版本测试过,问题依旧存在 I have tested using the dev branch, and the issue still exists.
  • [X] 我已经仔细看过 Documentation 并无法自行解决问题 I have read the documentation and was unable to solve the issue.
  • [X] 这是 Clash 核心的问题,并非我所使用的 Clash 衍生版本(如 OpenClash、KoolClash 等)的特定问题 This is an issue of the Clash core per se, not to the derivatives of Clash, like OpenClash or KoolClash.

Clash version

Premium 2022.06.19

What OS are you seeing the problem on?

No response

Clash config

script:
  shortcuts:
    quic: network == 'udp' and dst_port == 443

rules:
  - SCRIPT,quic,REJECT

Clash log

No response

Description

被REJECT掉的UDP通信却还是触发了DNS查询,这样会通过DNS暴露正在访问的网站,本来想通过只匹配域名规则不用IP规则来避免的,QUIC也都REJECT掉了,结果还是破功了,有什么解决办法吗?按理说这是被REJECT掉的UDP,不需要查询真实IP地址的。

Xabellee avatar Jun 20 '22 17:06 Xabellee

使用 no-resolve

rules:
  - SCRIPT,quic,REJECT,no-resolve

Dreamacro avatar Jun 21 '22 05:06 Dreamacro

使用 no-resolve

rules:
  - SCRIPT,quic,REJECT,no-resolve

没加no-resolve之前是所有经过了script规则的都触发了dns查询,加了之后,普通的tcp连接确实不会有dns查询了,但是被这条规则reject掉的udp通信还是会有一次dns查询,100%复现

Xabellee avatar Jun 21 '22 05:06 Xabellee

dns:
  enable: true
  ipv6: true
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114

rules:
  - GEOIP,LAN,DIRECT,no-resolve
  - SCRIPT,QUIC,REJECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

script:
  shortcuts:
    QUIC: network == 'udp' and dst_port == 443

因为浏览器不是每次都有quic,不好复现,可以用nslookup模拟一个目标端口为443的udp通信,nslookup -port=443 google.com dns.google,可以在日志中看到dns.google被REJECT,但是抓包会发现还是向114.114.114.114查询了dns.google的地址

Xabellee avatar Jun 21 '22 05:06 Xabellee

使用 no-resolve

rules:
  - SCRIPT,quic,REJECT,no-resolve

没加no-resolve之前是所有经过了script规则的都触发了dns查询,加了之后,普通的tcp连接确实不会有dns查询了,但是被这条规则reject掉的udp通信还是会有一次dns查询,100%复现

我也碰到了同样的问题。我是用了adguard home作为clash的上游DNS,通过查看adguard home的日志来判断某个域名有没有触发DNS解析。

我的规则里YouTube的域名在不加SCRIPT,quic,REJECT这条规则时,都是远端解析,在adguard home的日志里看不到YouTube的域名。

加上SCRIPT,quic,REJECT之后,其他配置都不改变的情况下,adguard home的日志里面能看到YouTube的域名,应该可以判断出是这条规则SCRIPT,quic,REJECT触发了DNS解析。

加上no-resolve变成SCRIPT,quic,REJECT,no-resolve之后,同时看clash和adguard home的日志可以发现,YouTube的TCP连接在adguard home的日志里看不到了,没有触发DNS解析,和不加SCRIPT,quic,REJECT规则时一样,但是YouTube的UDP连接依旧会在adguard home的日志里面看到,应该被REJECT掉的UDP连接触发了DNS解析

returnL avatar Jun 21 '22 12:06 returnL

实测观察下来,只要经过shortcut的,不管是reject还是匹配其他规则,都会触发dns查询,和规则是否包含ip无关,和是否udp无关。

emacsnt avatar Jul 05 '22 14:07 emacsnt

实测观察下来,只要经过shortcut的,不管是reject还是匹配其他规则,都会触发dns查询,和规则是否包含ip无关,和是否udp无关。

shortcut引起的dns查询用no-resolve就能解决了,但是被reject的udp通信引发的dns查询还是没办法

Xabellee avatar Jul 05 '22 14:07 Xabellee

似乎在最新版里面这个问题修正了Fix: fakeip udp should not replace with another ip)

emacsnt avatar Jul 11 '22 03:07 emacsnt

似乎在最新版里面这个问题修正了Fix: fakeip udp should not replace with another ip)

并没有

Xabellee avatar Jul 11 '22 06:07 Xabellee

似乎在最新版里面这个问题修正了Fix: fakeip udp should not replace with another ip)

并没有

用了7月7日的premium版本,我本地已经无法再现这个问题了

emacsnt avatar Jul 11 '22 08:07 emacsnt

似乎在最新版里面这个问题修正了Fix: fakeip udp should not replace with another ip)

并没有

用了7月7日的premium版本,我本地已经无法再现这个问题了

我还是100%复现啊😯,你是抓包看了确定被reject掉的udp都不会触发dns查询吗

Xabellee avatar Jul 11 '22 09:07 Xabellee

似乎在最新版里面这个问题修正了Fix: fakeip udp should not replace with another ip)

并没有

用了7月7日的premium版本,我本地已经无法再现这个问题了

我还是100%复现啊hushed,你是抓包看了确定被reject掉的udp都不会触发dns查询吗 没有抓包,就是看debug日志:)

emacsnt avatar Jul 11 '22 12:07 emacsnt

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days

github-actions[bot] avatar Nov 02 '22 02:11 github-actions[bot]