网络代理与Clash配置详解

1. 问题背景

在公司工作时遇到了一个典型的网络代理配置问题:

  • 需要访问外网(如YouTube)时需要开启代理
  • 但开启代理后无法访问公司内网服务
  • 关闭代理后可以访问内网,但无法访问外网

这是一个在企业环境中非常常见的问题,涉及到网络路由、DNS解析、代理规则等多个层面的知识。

2. 网络基础知识

2.1 IP地址分类

私有IP地址段(RFC 1918):

  • 10.0.0.0/8:10.0.0.0 - 10.255.255.255
  • 172.16.0.0/12:172.16.0.0 - 172.31.255.255
  • 192.168.0.0/16:192.168.0.0 - 192.168.255.255

本次问题中的网络环境:

  • 本机IP:10.3.73.75
  • 路由器:10.3.73.2
  • 子网掩码:255.255.255.0(/24)
  • 网段:10.3.73.0/24

2.2 路由表概念

路由表决定了数据包的转发路径:

1
2
3
4
5
6
# 查看路由表
netstat -rn

# 关键路由信息
default 10.3.73.2 # 默认网关
10.3.73/24 link#11 # 本地网段直连

2.3 DNS解析过程

  1. 本地DNS查询:查询本地hosts文件和DNS缓存
  2. 递归DNS查询:向DNS服务器发起查询
  3. 域名解析:将域名转换为IP地址

本次问题中的DNS解析:

1
2
3
# 公司内网域名解析
devops.digitalchina.com → 10.0.4.173
zentao.digitalchina.com → 10.0.23.129

3. 代理工作原理

3.1 代理的本质

代理服务器作为客户端和目标服务器之间的中介:

1
客户端 → 代理服务器 → 目标服务器

3.2 代理的分类

  1. HTTP代理:处理HTTP/HTTPS流量
  2. SOCKS代理:可处理任何协议的流量
  3. 透明代理:客户端无感知的代理

3.3 ClashX代理模式

三种工作模式:

  1. 全局模式(Global):所有流量都通过代理
  2. 规则模式(Rule):根据配置规则决定流量走向
  3. 直连模式(Direct):所有流量都直连,不走代理

4. Clash配置详解

4.1 配置文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 基本配置
port: 7890 # HTTP代理端口
socks-port: 7891 # SOCKS代理端口
mode: Rule # 工作模式

# 代理服务器定义
proxies:
- name: 🇭🇰 Relay-HK1
server: example.com
port: 1026
type: ss
cipher: chacha20-ietf-poly1305

# 代理组定义
proxy-groups:
- name: Proxy
type: select
proxies:
- 🇭🇰 Relay-HK1

# 规则定义(最重要部分)
rules:
- DOMAIN-SUFFIX,digitalchina.com,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- MATCH,MATCH

4.2 规则类型详解

域名规则:

  • DOMAIN,example.com,DIRECT:精确匹配域名
  • DOMAIN-SUFFIX,example.com,DIRECT:匹配域名及其子域名
  • DOMAIN-KEYWORD,google,PROXY:匹配包含关键词的域名

IP规则:

  • IP-CIDR,10.0.0.0/8,DIRECT:匹配IP段
  • GEOIP,CN,DIRECT:匹配中国IP地址

其他规则:

  • MATCH,PROXY:兜底规则,匹配所有其他流量

4.3 规则匹配顺序

关键原则:从上到下依次匹配,命中即停止

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rules:
# 1. 公司内网域名(最高优先级)
- DOMAIN-SUFFIX,digitalchina.com,DIRECT

# 2. 私有IP地址段
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT

# 3. 中国网站
- GEOIP,CN,DIRECT

# 4. 兜底规则
- MATCH,PROXY

5. 问题分析与解决过程

5.1 问题现象

  • 开启ClashX代理后无法访问:
    • https://devops.digitalchina.com/
    • http://zentao.digitalchina.com/zentao/my.html

5.2 初步分析

  1. 网络连通性测试

    1
    ping 10.3.73.2  # 路由器连通正常
  2. DNS解析测试

    1
    2
    nslookup devops.digitalchina.com
    # 结果:10.0.4.173(公司内网IP)
  3. 路由表检查

    1
    2
    netstat -rn | grep "10\."
    # 确认10.x.x.x网段路由存在

5.3 根本原因分析

问题根因:域名解析被代理劫持

  1. 正常访问流程(代理关闭)

    1
    浏览器 → 本地DNS → devops.digitalchina.com → 10.0.4.173 → 直接访问
  2. 问题访问流程(代理开启)

    1
    浏览器 → Clash代理 → 海外代理服务器 → 尝试解析devops.digitalchina.com → 失败

关键问题:

  • 虽然配置了IP-CIDR,10.0.0.0/8,DIRECT规则
  • 但域名请求被发送到代理服务器进行DNS解析
  • 海外代理服务器无法解析公司内网域名

5.4 解决方案

添加域名直连规则:

1
2
3
rules:
# 在规则列表最前面添加
- DOMAIN-SUFFIX,digitalchina.com,DIRECT

解决原理:

  1. 域名匹配优先于IP匹配
  2. digitalchina.com及其子域名直接走本地网络
  3. 本地DNS可以正确解析公司内网域名
  4. 解析后的内网IP通过本地网络直接访问

6. 网络流量分析

6.1 规则模式下的流量走向

公司内网访问:

1
devops.digitalchina.com → DOMAIN-SUFFIX规则匹配 → DIRECT → 本地DNS解析 → 10.0.4.173 → 直连访问

外网访问:

1
youtube.com → 无匹配的直连规则 → MATCH规则 → PROXY → 代理服务器 → YouTube服务器

国内网站访问:

1
baidu.com → GEOIP,CN规则匹配 → DIRECT → 直连访问

6.2 DNS解析路径

内网域名:

  • DNS服务器:10.3.69.28(公司内网DNS)
  • 可解析公司内网域名

外网域名:

  • 通过代理服务器的DNS解析
  • 或本地DNS解析后通过代理访问

7. 最佳实践与配置优化

7.1 企业环境代理配置模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 企业环境Clash配置模板
rules:
# 1. 公司域名直连(根据实际情况调整)
- DOMAIN-SUFFIX,company.com,DIRECT
- DOMAIN-SUFFIX,intranet.local,DIRECT

# 2. 私有IP地址段直连
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve

# 3. 本地域名直连
- DOMAIN-SUFFIX,.local,DIRECT
- DOMAIN-SUFFIX,.lan,DIRECT

# 4. 中国网站直连(可选)
- GEOIP,CN,DIRECT

# 5. 其他流量走代理
- MATCH,PROXY

7.2 配置文件管理

配置文件位置:

  • macOS:~/.config/clash/
  • Windows:%USERPROFILE%/.config/clash/

常用文件:

  • config.yaml:基础配置文件
  • xxx.yaml:订阅配置文件

7.3 故障排查步骤

  1. 确认网络连通性

    1
    2
    ping 网关地址
    ping 公网地址
  2. 检查DNS解析

    1
    nslookup 域名
  3. 检查Clash规则

  • 查看配置文件规则顺序
  • 确认规则语法正确
  1. 测试流量走向
  • 使用Clash Dashboard查看实时流量
  • 检查日志文件

8. 高级配置技巧

8.1 规则优化

使用no-resolve参数:

1
2
# 避免不必要的DNS解析
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve

进程名规则:

1
2
3
# 针对特定应用的规则
- PROCESS-NAME,chrome,PROXY
- PROCESS-NAME,company-app,DIRECT

8.2 代理组配置

负载均衡组:

1
2
3
4
5
6
proxy-groups:
- name: LoadBalance
type: load-balance
proxies:
- Proxy1
- Proxy2

故障转移组:

1
2
3
4
5
6
proxy-groups:
- name: Fallback
type: fallback
proxies:
- Proxy1
- Proxy2

9. 安全考虑

9.1 企业网络安全

  • 确保代理服务器的可信度
  • 避免在代理配置中暴露敏感信息
  • 定期更新代理规则和服务器列表

9.2 隐私保护

  • 了解代理服务器的日志政策
  • 使用加密协议(如Shadowsocks、V2Ray)
  • 避免在代理环境下传输敏感数据

10. 常见问题与解决方案

10.1 无法访问内网服务

原因:域名被代理劫持
解决:添加域名直连规则

10.2 代理规则不生效

原因:规则顺序错误或语法错误
解决:检查规则语法,调整规则顺序

10.3 DNS解析异常

原因:DNS被代理服务器接管
解决:配置本地DNS或使用no-resolve参数

11. 总结

通过这次问题的解决,我们学到了:

  1. 网络代理的本质是流量转发,理解其工作原理对配置至关重要
  2. 规则顺序是Clash配置的核心,必须carefully设计
  3. 域名解析是网络访问的第一步,代理会影响DNS解析路径
  4. 企业网络环境需要特殊的代理配置策略
  5. 故障排查需要系统性的方法和工具

这个案例很好地展示了现代网络环境的复杂性,以及正确理解和配置网络代理的重要性。在企业环境中工作时,合理的代理配置不仅能提升工作效率,还能确保网络访问的稳定性和安全性。


本文档基于实际问题解决经验编写,涵盖了网络代理配置的核心概念和实践技巧。