侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

理解 Xray 流量嗅探与 routeOnly:目标地址、DNS 解析与分流

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 文档。

0

评论区