遠程辦公的典型場景:公司內網系統要走 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 的區別、效能開銷,以及為什麼規則寫了不生效。