Clash 透明代理(TPROXY)配置完全教程:网关级全局代理
什么是 Clash 透明代理
普通 Clash 客户端工作时,需要应用程序主动配置 HTTP/SOCKS 代理才能将流量导向 Clash。而**透明代理(Transparent Proxy)**则是在网络层截获流量,无需应用配合即可实现全局代理。
Clash 透明代理主要有两种实现方式:
- TUN 模式:创建虚拟网卡,通过路由表将系统流量导入虚拟网卡,由 Clash 处理。适合单机使用。
- TPROXY 模式:利用 Linux 内核的 TPROXY 机制,在 Netfilter 层面重定向流量到 Clash 监听端口。适合网关/路由器部署。
本文重点讲解 TPROXY 模式,这是在 OpenWrt 软路由、Linux 网关上实现全局代理的主流方案。
TPROXY 与 TUN 的区别
| 对比项 | TPROXY 模式 | TUN 模式 |
|---|---|---|
| 工作层级 | Netfilter(网络层) | 虚拟网卡(链路层) |
| 需要内核模块 | 是(xt_TPROXY) | 否 |
| 适合场景 | 网关/旁路由 | 单机 |
| 性能 | 较高(内核态转发) | 稍低(用户态处理) |
| 配置复杂度 | 高 | 低 |
| UDP 支持 | 原生支持 | 需额外配置 |
| 全局代理 | 是(网关下所有设备) | 是(仅本机) |
简单理解:TUN 适合个人电脑,TPROXY 适合路由器给全家设备代理。
TPROXY 工作原理
TPROXY(Transparent Proxy)是 Linux 内核提供的一种透明代理机制,工作在 Netfilter 的 mangle 表 PREROUTING 链。其核心流程:
- 数据包到达网关,进入 PREROUTING 链。
- iptables 规则将匹配的包标记(mark)并重定向到 Clash 的 TPROXY 监听端口。
- Clash 接收数据包,根据规则决定走代理还是直连。
- 响应数据包原路返回,对客户端完全透明。
客户端 → 网关(PREROUTING) → iptables TPROXY 重定向 → Clash(redir-port/tproxy-port) → 代理/直连
关键点:TPROXY 不修改数据包的目标地址,因此 Clash 能获取到原始目标 IP 和端口,这是它与 REDIRECT 模式的最大区别。
前置条件
在开始配置前,请确保满足以下条件:
系统要求
- Linux 系统(推荐 OpenWrt 或 Debian/Ubuntu)
- 内核版本 ≥ 3.2(支持 TPROXY)
- 已安装 iptables 或 nftables
- 已安装 Clash(mihomo / Clash Meta 内核)
内核模块检查
# 检查 TPROXY 模块是否加载
lsmod | grep TPROXY
# 手动加载
modprobe xt_TPROXY
如果提示模块不存在,可能需要安装 kmod-ipt-tproxy(OpenWrt)或重新编译内核。
Clash 配置准备
确保 Clash 配置文件中包含 TPROXY 相关端口:
# Clash 配置片段
redir-port: 7892 # TCP 透明代理端口
tproxy-port: 7893 # TPROXY 端口(UDP)
bind-address: "*" # 监听所有地址
allow-lan: true
mode: rule
完整配置步骤
步骤一:配置 iptables 规则
以下规则适用于标准 Linux 网关环境:
# 新建链
iptables -t mangle -N CLASH
# 蚀回流量和本地流量跳过
iptables -t mangle -A CLASH -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A CLASH -d 224.0.0.0/4 -j RETURN
# 其余流量打标记并重定向到 TPROXY 端口
iptables -t mangle -A CLASH -p tcp -j TPROXY --on-port 7892 --tproxy-mark 0x1/0x1
iptables -t mangle -A CLASH -p udp -j TPROXY --on-port 7893 --tproxy-mark 0x1/0x1
# 将 PREROUTING 流量引入 CLASH 链
iptables -t mangle -A PREROUTING -j CLASH
步骤二:配置路由策略
TPROXY 需要配合策略路由,让打了标记的包走本地回环:
# 创建路由表 100
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
步骤三:配置 DNS 劫持
透明代理中 DNS 处理是最关键的环节。推荐使用 Clash 的 DNS 模块进行劫持:
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- 8.8.8.8
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
然后在 iptables 中将客户端的 DNS 请求劫持到 Clash:
# 将所有 53 端口流量重定向到 Clash DNS
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 1053
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 1053
步骤四:启动并验证
# 启动 Clash
./clash -d /etc/clash -f config.yaml &
# 验证 TPROXY 规则是否生效
iptables -t mangle -L CLASH -n -v
# 测试透明代理
# 在客户端设备上访问外网,如果能打开说明配置成功
curl -I https://www.google.com
旁路由部署方案
旁路由(Side Router)是最常见的家庭透明代理部署方式——主路由正常拨号上网,旁路由只跑 Clash 透明代理。
网络拓扑
光猫 → 主路由(192.168.1.1) ── 旁路由(192.168.1.2, 跑Clash)
↓
手机/电脑(网关设为192.168.1.2)
旁路由配置要点
- 关闭 DHCP:旁路由不分配 IP,由主路由负责。
- 设置静态 IP:旁路由 IP 固定为 192.168.1.2。
- 开启 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 客户端配置:将需要代理的设备网关改为 192.168.1.2,或者直接在主路由 DHCP 中将默认网关设为旁路由 IP。
旁路由的优缺点
| 优点 | 缺点 |
|---|---|
| 不影响主路由稳定性 | 多一层转发,延迟略增 |
| 故障可快速切换 | 需手动配置网关 |
| 可选择性代理部分设备 | 非代理设备不经过旁路由 |
常见问题排查
问题一:部分网站打不开
可能原因:DNS 未正确劫持,客户端直接用本地 DNS 解析。
解决方案:
- 确认 iptables 53 端口重定向规则生效
- 检查 Clash DNS 配置中
enhanced-mode是否为fake-ip - 在客户端用
nslookup测试 DNS 是否走了 Clash
问题二:UDP 流量不走代理
可能原因:TPROXY 端口未正确配置或缺少 UDP 规则。
解决方案:
- 确认
tproxy-port已在 Clash 配置中设置 - 检查 iptables mangle 表中是否有 UDP 的 TPROXY 规则
- 确认
ip rule和ip route已正确设置
问题三:连接速度慢
可能原因:fake-ip 模式下 DNS 缓存异常,或 iptables 规则匹配范围过大。
解决方案:
- 缩小 TPROXY 规则匹配范围,排除局域网和组播流量
- 调整 fake-ip 的 TTL 参数
- 检查 Clash 日志确认规则匹配是否正常
问题四:重启后规则丢失
iptables 规则默认重启后消失,需要持久化:
# 保存规则
iptables-save > /etc/iptables/rules.v4
# 或写入启动脚本
# OpenWrt: 写入 /etc/firewall.user
# Debian: 安装 iptables-persistent 包
安全注意事项
- 不要在公网暴露 TPROXY 端口:透明代理端口只应在局域网内监听。
- 限制 PREROUTING 规则的来源:仅处理来自内网网段的流量,避免被外部利用。
- 定期检查 iptables 规则:防止规则被意外修改或覆盖。
- 关注 Clash 内核更新:及时更新以修复安全漏洞。
总结
Clash TPROXY 透明代理是实现网关级全局代理的强大方案,适合在 OpenWrt 软路由或 Linux 旁路由上部署。相比 TUN 模式,TPROXY 在多设备场景下更有优势——一次配置,全家所有设备自动代理,无需逐个安装客户端。
配置要点回顾:
- 确保 TPROXY 内核模块可用
- 正确配置 iptables mangle 表规则和策略路由
- 使用 fake-ip 模式处理 DNS 劫持
- 旁路由方案兼顾灵活性与稳定性
- 持久化 iptables 规则防止重启丢失
掌握 TPROXY 后,你就能将任何 Linux 设备变成全家的代理网关,彻底告别逐设备配置的烦恼。
这篇教程有帮助吗?立即下载Clash入门试试吧!
全平台支持 · 安全无毒 · 官方最新版