所使用代理链: Chrome插件(FoxyProxy) -> BurpSuite(8080端口) -> 上游代理Clash Verge(7897混合端口) -> 规则命中 -> 目标站点

发现问题

在 Clash Verge 全局扩展脚本书写箭头所指规则后。(Clash Verge 使用规则分流模式)

在浏览器尝试访问目标域名,然后观察 Clash Verge 日志发现,并没有记录到 BurpSuite 进程或者规则命中。(除了 google 空空如也)

不禁不怀疑是否代理上该流量。(若是没代理上,将使用真实 IP 访问目标,这并不是我想要的。)

问题排查

第一反应是可能在某个环节, 此 CN 域名被解析成 IP 后才进入 Clash Verge,以此绕过了对域名的规则命中。

(事实证明确实是如此,不过由于此日志记录在 GUI 中显示时间太短导致没看到,忽略了。)

但是转念一想即使绕过了自定义规则,但是 GeoIP 规则应该也会命中。日志中不可能不会有记录。那为什么 没有监听到 BurpSuite 进程日志呢?难道是代理链有问题?

于是浏览器尝试访问 Google 然后继续观察日志。

发现代理链是通畅的,但是日志中目标主机并不是 google 域名,而是我代理节点的中转服务器的域名解析地址。为什么不直接说 IP呢,因为这台中转服务器是有域名记录的,而这里显示已经将域名解析成了 IP。

现在断开代理链,不再经过 BurpSuite,而直接将浏览器流量转发到 7897 端口,再次观察日志。

发现这次一切正常,规则命中正确,主机显示指向正常。那么已经可以确定为 BurpSuite 提前进行了 DNS 解析导致绕过了域名命中规则

问题原因

关注到 BurpSuite 上游代理设置处存在一个设置项: Do DNS lookups over SOCKS proxy

官方的释义: https://portswigger.net/burp/documentation/desktop/settings/network/connections

就是说,在未开启 Do DNS lookups over SOCKS proxy 时 BurpSuite 会尝试进行本地DNS解析,然后再转发给上游代理。这就导致了之前访问谷歌时日志中记录主机是 IP 的问题。

至于前面的 0 日志记录问题: 纯属是日志记录在 GUI 中显示时间太短导致没看到,被我忽略了。实际是有的。

GUI 刷新逻辑:连接完成或被关闭后立即从表格剔除,这是开发者在多份 changelog 中称作 "auto close/refresh connections" 的优化。

(yysy 有时候也并不是那么优化)

https://github.com/libnyanpasu/clash-nyanpasu/blob/main/CHANGELOG.md

https://github.com/clash-next/clash-verge/blob/main/UPDATELOG.md

解决方法

勾选 BurpSuite 上游代理设置项: Do DNS lookups over SOCKS proxy 让他走 Clash Verge 的 DNS 覆写。(推荐开启 Clash Verge DNS 覆写)


国家一级保护废物