跳到主要內容

首頁 / 部落格 / 規則分流

分流實戰:公司內網、国內直連、海外代理三者共存

規則分流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 分鐘