← 返回博客

仅限所需网站的代理:在sing-box和mihomo中进行域名路由

通过付费代理不必传输所有流量。我们分析了在sing-box和mihomo(Clash Meta)中的域名路由:适用于当前版本的现成配置、网站和程序的规则、同时多个国家和陷阱——QUIC、DNS泄漏、与反检测的冲突以及会话中间的轮换。

📅2026年10月13日
仅限所需网站的代理:在sing-box和mihomo中进行域名路由

典型情况:在德国亚马逊开店需要使用德国IP,而美国的供应商后台则需要使用美国IP,YouTube、工作消息应用和系统更新可以直接访问。将代理设置为“全系统”既不方便也昂贵:通过代理支付每千兆流量时,所有后台流量都会消耗掉。手动开关代理会在最不合适的时刻忘记。解决方案是域名路由:本地客户端自行决定哪个网站通过哪个代理访问,哪个网站直接访问。以下是2026年最流行的两个引擎的工作配置,sing-box和mihomo(前身为Clash Meta),以及通常会导致方案失败的陷阱分析。

这比浏览器中的代理和PAC文件更好

浏览器设置或扩展中的代理仅对该浏览器有效。PAC文件可以根据域名选择代理,但它也只存在于浏览器和系统设置中——桌面市场客户端、Telegram、Python脚本或控制台工具会直接忽略它。

sing-box和mihomo的工作层次更低:它们提升了虚拟网络接口(TUN模式),并通过它们处理所有程序的流量。然后,每个连接根据规则列表进行处理:域名、IP子网、进程名称、端口。如果规则匹配,连接将被发送到指定的出口(所需国家的代理或直接连接)。

这在实践中带来了什么:

  • 流量节省。 只有工作网站通过付费代理访问,而视频、更新和云备份则直接访问。
  • 同时访问多个国家。 amazon.de通过德国出口,walmart.com通过美国出口,无需切换。
  • 程序规则。 可以将特定进程整体发送到代理(例如,桌面客户端或脚本),而不影响其他进程。
  • 减少人为错误。 不需要记住代理是否开启——网站始终以“正确”的IP打开。

需要什么

  • 支持SOCKS5或HTTP的代理,并且需要使用用户名和密码进行身份验证。两个引擎都可以自行传递用户名和密码,无需本地网关。
  • 客户端:对于sing-box——官方的Android、iOS和macOS应用程序或Windows/Linux的核心;对于mihomo——图形界面如Clash Verge Rev或FlClash。
  • 需要通过代理访问的域名列表。最好提前收集——下面会详细说明。

选项1:sing-box(版本1.12及以上)

关于版本的重要说明。许多网上的配置是为旧版sing-box编写的,在当前版本上无法启动。根据官方的过时功能列表:geosite和geoip在1.12.0中被删除(取而代之的是rule-set),在1.11中,规则内的outbound字段被替换为动作("action": "route"),旧的DNS服务器格式在1.14.0中被删除,而特殊出口block和dns则在1.13.0中被删除。撰写时的最新稳定版本是1.14。

最小工作配置:德国居民代理用于几个域名,其余直接访问。

{
  "log": { "level": "info" },
  "dns": {
    "servers": [ { "type": "local", "tag": "local" } ]
  },
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "address": [ "172.18.0.1/30" ],
      "auto_route": true,
      "strict_route": true
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "resi-de",
      "server": "ХОСТ_ИЗ_КАБИНЕТА",
      "server_port": 1080,
      "username": "ЛОГИН",
      "password": "ПАРОЛЬ"
    },
    { "type": "direct", "tag": "direct" }
  ],
  "route": {
    "auto_detect_interface": true,
    "default_domain_resolver": "local",
    "rules": [
      { "action": "sniff" },
      { "protocol": "dns", "action": "hijack-dns" },
      {
        "network": "udp",
        "port": 443,
        "domain_suffix": [ "amazon.de", "otto.de" ],
        "action": "reject"
      },
      {
        "domain_suffix": [ "amazon.de", "otto.de", "ipinfo.io" ],
        "action": "route",
        "outbound": "resi-de"
      }
    ],
    "final": "direct"
  }
}

请从提供商的后台中替换主机、端口、用户名和密码。这里的端口1080仅为示例。

每个部分的作用

  1. TUN入口(auto_route)将整个系统的流量封装到sing-box中。strict_route在Windows上额外添加了防火墙规则以防止DNS泄漏(文档警告这可能会破坏某些程序,例如VirtualBox)。
  2. "action": "sniff"是关键行。通过TUN的连接是针对IP地址而不是域名的。嗅探会从TLS握手(SNI)或HTTP头中提取网站名称,只有在此之后,domain_suffix规则才会生效。没有这一行,域名规则将静默无效——这是“配置未应用”的常见原因。
  3. hijack-dns拦截系统的DNS请求并将其交给sing-box的DNS模块。
  4. 对于UDP 443的reject规则禁用QUIC(HTTP/3)用于代理域名。浏览器将回退到普通的HTTPS通过TCP,并且将通过代理发送。原因将在陷阱部分中说明。
  5. domain_suffix捕获域名及其所有子域:amazon.de覆盖www.amazon.de和sellercentral.amazon.de。
  6. auto_detect_interface将sing-box的出站连接绑定到物理网络适配器。如果没有它,流量将再次进入TUN,从而形成路由循环。
  7. final: direct——所有未与任何规则匹配的流量将直接发送。

多个国家和程序规则

第二个出口作为另一个socks对象添加,具有其自己的标签(例如,resi-us)和单独的规则。可以通过带有process_name字段的规则将程序整体发送到代理(适用于Windows、macOS和Linux):

{
  "process_name": [ "python.exe" ],
  "action": "route",
  "outbound": "resi-us"
}

规则是从上到下检查,直到第一个匹配,因此请将特定规则放在一般规则之上。

选项2:mihomo(Clash Meta)

mihomo的便利之处在于它有成熟的图形界面,配置使用YAML编写,更易于阅读。同样的场景:

tun:
  enable: true
  stack: gvisor
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - https://1.1.1.1/dns-query

proxies:
  - name: resi-de
    type: socks5
    server: ХОСТ_ИЗ_КАБИНЕТА
    port: 1080
    username: ЛОГИН
    password: ПАРОЛЬ

rule-providers:
  work-de:
    type: inline
    behavior: classical
    payload:
      - DOMAIN-SUFFIX,amazon.de
      - DOMAIN-SUFFIX,otto.de
      - DOMAIN-SUFFIX,ipinfo.io

rules:
  - RULE-SET,work-de,resi-de
  - MATCH,DIRECT

与sing-box的主要区别:

  • fake-ip模式以不同的方式解决“连接到IP而不是域名”的问题:mihomo自己对DNS请求做出虚假地址的响应,记住它对应的域名,并根据此应用规则。实际网站地址由代理服务器在其端获取。
  • 规则集(rule-providers)方便单独保持一个列表。inline类型将域名直接存储在配置中,http类型则通过链接获取列表并按间隔更新,例如团队的公共列表在代码库中。
  • MATCH是final的类似物:其余流量直接发送。
  • 对于程序规则,有PROCESS-NAME,在Android上它接受应用程序包的名称。

如何收集域名列表而不遗漏必要的

网站并不是一个域名。市场平台从CDN加载图片,脚本来自不同的域名,授权可能在第三个域名上。如果主域名通过德国IP访问,而入口域名则来自您的真实地址,反欺诈系统会在同一会话中看到两个不同的地址。

  1. 打开开发者工具的网站(F12 → 网络选项卡),执行典型场景:登录、搜索、商品卡、后台。
  2. 记录所有域名在Domain列中。可以不添加第三方计数器和广告,但服务本身的域名(包括CDN和授权服务器)必须添加。
  3. 将它们添加到规则中并重复场景。在sing-box的日志中(info级别)或mihomo的连接选项卡中,可以看到每个连接触发了哪个规则。
  4. 在列表中保持一个“控制”域名,比如ipinfo.io:它显示代理的IP,而未包含在列表中的相邻IP检查服务则显示您的真实IP。这样可以快速查看路由是否正常工作。

导致方案失败的陷阱

1. QUIC绕过代理

Chrome和其他浏览器乐于通过HTTP/3,即UDP访问大型网站。许多代理提供商不支持通过SOCKS5的UDP或支持有限。在最坏的情况下,连接会走错地方,在最好的情况下,网站会卡顿,直到浏览器回退到TCP。因此,在上面的sing-box配置中,明确拒绝了工作域名的UDP 443。在mihomo中,通过在浏览器中禁用QUIC(标志chrome://flags/#enable-quic)可以更简单地实现类似效果。

2. DNS泄漏到提供商

如果工作域名通过您的互联网服务提供商的DNS进行本地解析,网站本身不会看到这一点:连接仍然会来自代理的IP。但提供商和任何看到您DNS的人将知道您正在打开哪些网站。mihomo中的fake-ip模式和sing-box中嗅探后将域名传递给代理服务器可以减少这个问题。有关检查和保护方法的更多信息,请参见DNS泄漏保护方法的分析。

3. 与其他VPN或反检测冲突

同时存在两个TUN接口将导致路由混乱。如果反检测浏览器的配置文件已经有自己的代理,最好将其流量从TUN中排除:通过进程名称的规则将浏览器发送到direct,这样每个配置文件都通过自己的代理访问,如预期的那样。

4. 系统路由无法替代反检测

计算机上的所有程序将以一个IP访问域名。对于一个商店来说这很正常。对于同一平台上的10个账户则不然:平台会看到相同的浏览器指纹和一个地址。对于多账户操作,域名路由是辅助工具,而不是“单独配置文件+单独代理”的替代方案。

5. 会话中间的IP轮换

如果代理设置为在每个请求时更改IP,授权网站将在每次加载图片时看到新的地址。对于后台、商店和社交媒体,请使用具有粘性会话的登录(在工作期间固定IP)或以十分钟为间隔的定时轮换。

6. 代理不支持所需协议

如果提供商仅提供HTTP代理,在sing-box中使用http类型的出口,在mihomo中使用type: http。两个引擎都支持HTTP的用户名和密码。如果程序本身无法与带有身份验证的代理一起工作,而又不想提升TUN,可以使用gost、3proxy或Squid的本地网关。

在规则中使用哪个代理

  • 市场平台、社交媒体、卖家后台、广告后台——需要国家的居民代理,并且具有粘性会话。家庭提供商的地址在反欺诈中引起的疑问最少。
  • 检查最严格的平台(移动应用、TikTok、Instagram)——移动代理:同一IP的运营商同时连接多个真实用户。
  • API、文档、包存储库、没有反机器人保护的服务——数据中心代理:它们更便宜、更快,对于这些任务不需要“家庭”IP。

方便在配置中设置多个不同类型的出口,并将域名分配给它们,而不是通过最昂贵的代理。

总结

域名路由将代理从“开关”转变为精确工具:所需网站始终以所需IP打开,其余流量不会消耗已支付的千兆流量。启动时只需30行配置。最重要的是——不要忘记嗅探(或fake-ip),禁用代理域名的QUIC,收集服务的完整域名列表,并使用最新的语法:1.12之前的sing-box配置在新版本上无法启动。