嗅探器
sniffer 块读取每条连接的早期字节,在缺少 DNS 上下文(通常是因为 客户端直接连了一个 IP)时恢复目的主机名。结果会提供给路由规则和 fake-IP 清理使用。
选项
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
enable | bool | false | true | false | 启用连接嗅探。关闭时块内其他字段被忽略。 |
override-destination | bool | false | true | false | 用嗅探出的主机名替换连接元数据中的目的 IP。为 true 时路由规则看到的是主机名而非原始 IP。 |
sniffing | []string | [] | tls | http | quic | 要启用的嗅探器。已弃用 —— 请改用下面按协议的 `sniff` 映射。 |
force-domain | []string | [] | <domain pattern> | 即使协议已知,对这些目的地仍强制执行嗅探。 |
skip-src-address | []string | [] | <CIDR> | 从不嗅探来自这些源地址的连接。 |
skip-dst-address | []string | [] | <CIDR> | 从不嗅探目的为这些地址的连接。 |
skip-domain | []string | [] | <domain pattern> | 嗅探到的值若命中这些模式,则不覆盖目的地。 |
port-whitelist | []string | [] | <port> | <port-range> | 仅嗅探目的端口落在该列表内的连接。空列表表示所有端口。 |
force-dns-mapping | bool | false | true | false | fake-IP 反向查找失败时回退到嗅探以恢复主机名。 |
parse-pure-ip | bool | false | true | false | 对目的已是 IP 字面量(未经过 DNS 查询)的连接进行嗅探。 |
sniff | map[string]RawSniffingConfig | {} | { "TLS": {...}, "HTTP": {...}, "QUIC": {...} } | 按协议的嗅探器配置。键为 TLS、HTTP 或 QUIC;值为 `RawSniffingConfig` 块,可携带端口覆盖。 |
源码: config/config.go:364-377 · 锚定版本 v1.19.27 (5184081)
示例
yaml
sniffer:
enable: true
override-destination: true
parse-pure-ip: true
force-dns-mapping: true
skip-domain:
- +.push.apple.com
sniff:
TLS:
ports: [443, 8443]
HTTP:
ports: [80, 8080]
override-destination: true
QUIC:
ports: [443]说明
sniffing数组是旧形式;sniff映射是推荐形态,因为它可以按协议 携带端口列表。- 把高频 CDN 域名加进
skip-domain,否则 SNI 抖动会反复切换代理。
源码: config/config.go:364-377 · v1.19.27 (5184081)
