跳到主要内容

首页 / 博客 / 规则分流

分流实战:公司内网、国内直连、海外代理三者共存

规则分流2026-07-171800 字约 4 分钟
分流实战:公司内网、国内直连、海外代理三者共存

远程办公的典型场景:公司内网系统要走 VPN,国内网站要直连,境外服务要走代理。三者同时生效,谁都不能踩谁。

这篇给一套完整可用的方案。

先理清三类流量

三类流量的去向公司内网OA、GitLab、内部 API、跳板机 —— 必须走公司 VPN 或直连内网网关国内公网百度、淘宝、B 站、支付 —— 直连,不占代理流量也不触发风控境外服务文档站、开发者服务、境外 SaaS —— 走代理节点
三者的判断依据不同:内网靠域名+IP 段,国内靠 GEOIP,境外靠兜底

难点在于:公司内网的域名往往解析到私有 IP,但域名本身看起来和公网域名没区别。只靠 GEOIP 判断会出错。

完整配置

第一步:定义策略组

proxy-groups:
  - name: "🚀 境外代理"
    type: select
    proxies: ["♻️ 自动选择", "🇭🇰 香港", "🇯🇵 日本", "🇺🇸 美国"]

  - name: "♻️ 自动选择"
    type: url-test
    include-all: true
    exclude-filter: "(?i)剩余|到期|官网"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

  - name: "🏢 公司内网"
    type: select
    proxies: [DIRECT]        # 内网走本机网络出口(VPN 已建立)

  - name: "🇨🇳 国内直连"
    type: select
    proxies: [DIRECT, "🚀 境外代理"]   # 可临时切换

  - name: "🐟 漏网之鱼"
    type: select
    proxies: ["🚀 境外代理", DIRECT]

把内网和国内分别做成策略组而不是直接写 DIRECT,好处是出问题时可以在界面上一键切换排查,不用改配置。

第二步:内网规则(放最前面)

rules:
  # ===== 1. 本机与内网 IP 段 =====
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,🏢 公司内网,no-resolve
  - IP-CIDR,10.0.0.0/8,🏢 公司内网,no-resolve
  - IP-CIDR,172.16.0.0/12,🏢 公司内网,no-resolve
  - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve

  # ===== 2. 公司内网域名 =====
  - DOMAIN-SUFFIX,mycompany.com,🏢 公司内网
  - DOMAIN-SUFFIX,corp.internal,🏢 公司内网
  - DOMAIN-SUFFIX,intra,🏢 公司内网
  - DOMAIN-KEYWORD,gitlab-internal,🏢 公司内网
  - DOMAIN-SUFFIX,local,DIRECT
  - DOMAIN-SUFFIX,lan,DIRECT

第三步:境外服务规则

  # ===== 3. 明确要走代理的 =====
  - DOMAIN-SUFFIX,github.com,🚀 境外代理
  - DOMAIN-SUFFIX,githubusercontent.com,🚀 境外代理
  - DOMAIN-SUFFIX,docker.io,🚀 境外代理
  - DOMAIN-SUFFIX,npmjs.org,🚀 境外代理
  - DOMAIN-SUFFIX,pypi.org,🚀 境外代理
  - DOMAIN-SUFFIX,openai.com,🚀 境外代理
  - RULE-SET,proxy-list,🚀 境外代理

第四步:国内与兜底

  # ===== 4. 国内直连 =====
  - RULE-SET,direct-list,🇨🇳 国内直连
  - RULE-SET,cn-ip,🇨🇳 国内直连,no-resolve
  - GEOIP,CN,🇨🇳 国内直连

  # ===== 5. 兜底 =====
  - MATCH,🐟 漏网之鱼

DNS 也要跟着分流

这是最容易被忽略的一环。内网域名必须用公司的 DNS 解析,否则解析不到或者解析错。

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.mycompany.com"        # 内网域名不走 fake-ip
    - "+.corp.internal"
    - "+.pool.ntp.org"

  default-nameserver: [223.5.5.5, 119.29.29.29]
  nameserver:
    - 223.5.5.5
    - 119.29.29.29

  # 关键:指定域名用指定 DNS 解析
  nameserver-policy:
    "+.mycompany.com": "10.10.0.53"       # 公司内网 DNS
    "+.corp.internal": "10.10.0.53"
    "geosite:cn": [223.5.5.5, 119.29.29.29]
    "geosite:geolocation-!cn": [https://1.1.1.1/dns-query]

  fallback:
    - https://1.1.1.1/dns-query
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN
一个内网域名的完整处理路径请求 gitlab.mycompany.com应用发起fake-ip-filter 命中不返回假 IPnameserver-policy 命中交给 10.10.0.53 解拿到真实内网 IP10.20.30.40规则匹配IP-CIDR 10.0.0.0直连出去走 VPN 隧道
三个环节缺一不可:不走 fake-ip、用内网 DNS、IP 段判定直连

nameserver-policy 是这套方案的核心。没有它,内网域名会被送到公网 DNS 去查,结果要么是 NXDOMAIN,要么是运营商的劫持页面。

常见冲突与解决

冲突一:公司 VPN 和 TUN 抢路由

企业 VPN 客户端(Cisco AnyConnect、FortiClient、SSL VPN)通常会改路由表。Clash Verge 的 TUN 模式也改路由表,两者容易打架。

处理办法(按推荐顺序)优先只用系统代理,不开 TUN —— 冲突面最小必须开 TUN 时,把 VPN 的内网段明确写进 DIRECT 规则调整启动顺序:先连 VPN,再开 TUN在 TUN 配置里排除 VPN 网卡:exclude-interface如果 VPN 是强制全局路由的 —— 通常没法共存,只能二选一

exclude-interface 的写法:

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  exclude-interface: ["ppp0", "Cisco AnyConnect"]

网卡名在 Windows 上用 ipconfig 看,Linux/macOS 用 ifconfigip link

冲突二:公司装了终端管控软件

EDR 类软件可能把虚拟网卡判为异常。这种情况下:

  • 不开 TUN,只用系统代理
  • 或者干脆在个人设备上处理个人事务,工作设备保持干净

冲突三:内网服务走了代理

现象:访问 OA 提示超时,连接页显示走了境外节点。

排查:

  1. 连接页看「规则」列,是哪条规则命中的
  2. 如果命中的是 MATCHGEOIP,说明内网规则没匹配上
  3. 检查内网域名规则的拼写;检查是不是被前面某条更宽泛的规则截胡了
  4. prepend-rules 把内网规则强制插到最前面

冲突四:国内网站走了代理,触发风控

现象:登录网银提示异地登录、支付平台要求二次验证。

原因:这些站点的域名不在 direct-list 里,且解析出的 IP 不在 GEOIP CN 里(比如用了境外 CDN)。

解决:手动加规则

prepend-rules:
  - DOMAIN-SUFFIX,icbc.com.cn,🇨🇳 国内直连
  - DOMAIN-SUFFIX,alipay.com,🇨🇳 国内直连
  - DOMAIN-SUFFIX,unionpay.com,🇨🇳 国内直连

按设备分流(局域网场景)

如果 Clash 跑在软路由或者共享给了其他设备,可以按来源 IP 区分:

prepend-rules:
  # 工作电脑:只有境外服务走代理
  - AND,((SRC-IP-CIDR,192.168.1.100/32),(GEOIP,CN)),DIRECT
  # 电视盒子:全部走代理
  - SRC-IP-CIDR,192.168.1.200/32,🚀 境外代理
  # IoT 设备:全部直连
  - SRC-IP-CIDR,192.168.1.0/24,DIRECT

规则同样是从上往下匹配,具体设备写在网段规则前面。

验证配置是否正确

三项验证1内网在浏览器访问 OA,连接页应显示「公司内网 → DIRECT」2国内访问 baidu.com,应显示「国内直连 → DIRECT」,规则列是 GEOIP,CN 或规则集3境外访问 github.com,应显示「境外代理 → 某节点」4DNS在终端 nslookup gitlab.mycompany.com,应返回内网 IP 而不是 198.18.x.x
四项都对,说明分流真的生效了

小结

三方共存的关键:

  • 内网靠「域名规则 + IP 段规则 + nameserver-policy」三重保障
  • 规则顺序:内网 → 境外明确项 → 国内列表 → GEOIP → MATCH
  • VPN 与 TUN 冲突时优先只用系统代理
  • 每一类都做成策略组,出问题能在界面上一键切换排查

相关:DNS 配置详解规则类型速查


相关文档

用 PROCESS-NAME 规则让指定程序单独走代理
规则分流 用 PROCESS-NAME 规则让指定程序单独走代理

按进程分流的完整写法:find-process-mode 怎么开、进程名怎么查、PROCESS-NAME 与 PROCESS-PATH 的区别、性能开销,以及为什么规则写了不生效。

2026-06-221765 字约 4 分钟