Xray 嗅探读取可识别的应用握手信息。是否需要嗅探、是否会再次解析域名,取决于客户端提供的目标、路由规则与出站 DNS 配置。
一、嗅探与 DNS 是两条相关但不同的路径
透明代理常先接到一个 IP 目的地址,因为浏览器已解析域名并发起连接。Xray 的嗅探可以从 HTTP Host、可见 TLS SNI 等数据提取名称,再用于路由或重置目标。它不是做 IP 的反向 DNS 查询,也不能从所有流量恢复原始域名;加密 ClientHello、不支持的协议、握手不完整等情况都会限制结果。
客户端通过 SOCKS 等方式直接把域名交给 Xray 时,域名路由本来就可能工作;IP 规则也不需要嗅探。因此“所有 Xray 分流必须开启嗅探”不成立。
PassWall 的选项、默认值和生成配置路径会随版本变化。检查实际入站 sniffing 配置,不能把 2023 年 /var/etc/passwall/TCP_UDP.json 的路径和勾选状态当成当前版本保证。Xray 入站文档定义了字段行为。
二、routeOnly 决定如何使用嗅探结果
常见配置片段:
{
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"],
"routeOnly": true
}
}
该片段应放入需要处理的入站,不能作为完整配置单独启动。destOverride 指定可使用的嗅探类型。routeOnly: true 表示名称只用于路由,不替换原来的连接目标;原目标是 IP 时,后续通常仍连接这个 IP。false 时,在命中相应类型且未被排除的情况下,嗅探名称可能替换目标,使出口需要再次解析域名。
| 接到的目标与处理 | 路由可使用的名称 | 后续目标的一般情况 |
|---|---|---|
IP 目标,嗅探成功,routeOnly: true |
嗅探名称 | 保留原 IP |
IP 目标,嗅探成功,routeOnly: false |
嗅探名称 | 可以改为域名,由后续出口解析 |
| IP 目标,嗅探失败 | 未必有名称 | 保留 IP |
| 原目标本来是域名 | 原始域名;可能还有嗅探结果 | 取决于入站与出站策略 |
表格说的是一般目标处理,不能仅凭四个开关推断整个网络的最终 IP。代理协议、服务端二次嗅探、出站域名策略、路由 domainStrategy、FakeDNS 以及其他 DNS 组件都会改变流程。
三、想保留客户端 IP,需要同时检查两端
如果客户端已通过可信 DNS 得到可由代理出口访问的 IP,希望代理不再次按嗅探名称解析,可以在相应入站设置 routeOnly: true,并检查服务端是否又覆盖目标。路由 domainStrategy: AsIs 可以避免为了域名/IP 路由匹配而主动追加解析;实际出站是否还解析,需要继续检查出站设置。
这个选择可能减少某些重复解析,但客户端答案可能适合本地出口而不适合远端出口;也可能只返回远端不支持的地址族。保留客户端 IP 时,服务端的 IPv4/IPv6 选择就不能替换这个已经确定的目标。服务端要使用域名规则,也必须收到原始域名或成功嗅探出名称。
反过来,让出口解析域名通常有利于按出口的网络位置选择地址,但会增加它对 DNS 的依赖。没有一个选项在所有环境下必然更快。
四、嗅探不能代替正确 DNS,FakeDNS 也不能一概否定
错误答案会影响直连连接、无法嗅探的协议,以及连接是否被正确送进代理。即便某个 TLS 连接能被重置为域名,也不能据此让整个局域网使用不可信解析。
FakeDNS/FakeIP 是一类刻意让 DNS 返回虚拟地址、再由配套代理恢复域名的方案。虚拟地址必须被正确接管,应用绕过代理或代理停机时可能失败;对局域网设备和不兼容应用需要例外规则。是否使用 FakeIP,应按具体实现、接管范围与应用兼容性决定。
五、如何验证
画出客户端 DNS、路由器 DNS、代理出口 DNS 的路径;对一个已知目标比较两种 routeOnly 设置下的日志、最终远端地址和错误率。避免仅凭延迟波动推断“少一次解析”。先验证直连、代理、IPv4、IPv6,以及无法嗅探的流量,再决定策略。
实际解析次数与出口应通过部署日志验证。DNS 组合见mosdns v5 配置,出站解析策略见 Freedom 文档。
评论区