远程办公的典型场景:公司内网系统要走 VPN,国内网站要直连,境外服务要走代理。三者同时生效,谁都不能踩谁。
这篇给一套完整可用的方案。
先理清三类流量
难点在于:公司内网的域名往往解析到私有 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: CNnameserver-policy 是这套方案的核心。没有它,内网域名会被送到公网 DNS 去查,结果要么是 NXDOMAIN,要么是运营商的劫持页面。
常见冲突与解决
冲突一:公司 VPN 和 TUN 抢路由
企业 VPN 客户端(Cisco AnyConnect、FortiClient、SSL VPN)通常会改路由表。Clash Verge 的 TUN 模式也改路由表,两者容易打架。
exclude-interface 的写法:
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
exclude-interface: ["ppp0", "Cisco AnyConnect"]网卡名在 Windows 上用 ipconfig 看,Linux/macOS 用 ifconfig 或 ip link。
冲突二:公司装了终端管控软件
EDR 类软件可能把虚拟网卡判为异常。这种情况下:
- 不开 TUN,只用系统代理
- 或者干脆在个人设备上处理个人事务,工作设备保持干净
冲突三:内网服务走了代理
现象:访问 OA 提示超时,连接页显示走了境外节点。
排查:
- 连接页看「规则」列,是哪条规则命中的
- 如果命中的是
MATCH或GEOIP,说明内网规则没匹配上 - 检查内网域名规则的拼写;检查是不是被前面某条更宽泛的规则截胡了
- 用
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规则同样是从上往下匹配,具体设备写在网段规则前面。
验证配置是否正确
小结
三方共存的关键:
- 内网靠「域名规则 + IP 段规则 + nameserver-policy」三重保障
- 规则顺序:内网 → 境外明确项 → 国内列表 → GEOIP → MATCH
- VPN 与 TUN 冲突时优先只用系统代理
- 每一类都做成策略组,出问题能在界面上一键切换排查
相关文档
十几种规则类型的语法、匹配逻辑与性能开销对照表,讲清楚 no-resolve 的作用、规则顺序为什么决定一切,以及怎么用连接页反查命中了哪条规则。
用外部规则集替代几百条手写规则。讲清楚 domain/ipcidr/classical 三种 behavior 的差异、text 与 yaml 格式、更新间隔怎么设,以及规则集不生效时怎么查。
按进程分流的完整写法:find-process-mode 怎么开、进程名怎么查、PROCESS-NAME 与 PROCESS-PATH 的区别、性能开销,以及为什么规则写了不生效。