Skip to content

嗅探器

sniffer 块读取每条连接的早期字节,在缺少 DNS 上下文(通常是因为 客户端直接连了一个 IP)时恢复目的主机名。结果会提供给路由规则和 fake-IP 清理使用。

选项

字段类型默认值允许值描述
enableboolfalsetrue | false启用连接嗅探。关闭时块内其他字段被忽略。
override-destinationboolfalsetrue | 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-mappingboolfalsetrue | falsefake-IP 反向查找失败时回退到嗅探以恢复主机名。
parse-pure-ipboolfalsetrue | false对目的已是 IP 字面量(未经过 DNS 查询)的连接进行嗅探。
sniffmap[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)

由 Argsment 出品的 Core Tutorial