Article
跨设备全流量穿透方案:任意系统借助已准入设备绕过企业网络限制
一套通用的企业内网全流量穿透方案。无论你的主力系统是 Mac、Windows 还是 Linux,只要有一台已通过企业准入认证的设备作为出口,就能实现全流量劫持与转发,完美解决终端、Git、数据库工具等不走系统代理的痛点。
这份教程专为企业内网环境定制。针对公司限制网络共享、移动热点被禁用、且有严格的网络准入认证(如 802.1X 认证、准入客户端等)的场景,该方案能够 100% 绕过限制,并完美解决开发软件(如终端、Git、数据库工具等)不走系统代理的痛点。
核心原理简介
- 出口端:已通过企业准入认证的设备(通常是 Windows 台式机或笔记本),只充当一个合法的”流量出口”,本身不进行任何复杂的路由转发配置。
- 客户端:你的主力开发设备(Mac / Windows / Linux),开启 Clash Verge 的 TUN 模式,在本地建立虚拟网卡,强行拦截系统 Layer 3(网络层)全量流量,打包发给出口端。
- 物理流向:客户端上的所有软件流量被截获后,通过标准代理协议发给出口端。在公司网管看来,这只是出口端设备自身在进行正常的网络访问,100% 绿灯放行,且完美兼容公司内网所有私有 DNS 域名解析。
第一阶段:出口端设置(作为”合法流量出口”)
出口端不需要开启任何系统级路由转发,只需要作为一个普通的”代理服务端”接应客户端。
-
获取出口端的局域网 IP 地址:
- Windows:按下
Win + R,输入cmd回车,执行ipconfig,找到当前连网网卡的 IPv4 地址(通常是10.x.x.x或192.168.x.x),记录下来。 - Mac / Linux:执行
ifconfig或ip addr,找到对应网卡的 IP 地址。
- Windows:按下
-
配置 Clash Verge:
- 打开出口端设备上的 Clash Verge。
- 进入左侧的 “设置 (Settings)”。
- 开启 “允许局域网连接 (Allow LAN)” 开关。
- ❌ 关闭 “TUN 模式 (TUN Mode)” 开关。
- ❌ 关闭 “系统代理 (System Proxy)” 开关。
-
保持出口端清醒:
- Windows:进入系统设置 → 电源与睡眠,将 “使计算机进入睡眠状态” 改为 “从不”。
- Mac:系统设置 → 电池 → 电源适配器,关闭”在此时间段后关闭显示器”的自动休眠。
- 如果出口端设备休眠或关机,客户端将会断网。
第二阶段:客户端设置(作为”全量流量强盗”)
在客户端上通过本地 TUN 虚拟网卡接管全量网络,并把数据无条件发送给出口端。
2.1 编写客户端专属配置文件
- 打开客户端上的 Clash Verge,点击左侧的 “配置 (Profiles)”。
- 点击右上角的 “新建 (New)” → 类型选择 “Local”,名称任意(如:公司直连网关)。
- 右键点击这个新建的配置,选择 “编辑 (Edit)“,将里面的内容全部清空,然后完整粘贴以下 YAML 代码:
# ==========================================
# 客户端专用:强行接管所有软件流量并转发给出口端
# ==========================================
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
# 1. 开启 TUN 虚拟网卡,强行吞掉本机 Layer 3 全量流量
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
# 2. 显式接管 DNS,彻底干掉外网加密 DNS,全面拥抱公司内网
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
# 这里只填写从出口端 ipconfig/ifconfig 查到的【公司纯内网 DNS IP】
nameserver:
- 10.0.0.53 # ⚠️ 替换为你们公司真正的内网 DNS IP
- 10.0.0.54
# 3. 将出口端配置为"唯一出口节点"
proxies:
- name: "公司出口网关"
type: socks5
server: 192.168.1.100 # ⚠️ 务必修改:替换为出口端设备的实际局域网 IP
port: 7897 # 注意端口号需与出口端 Clash 混合端口一致
udp: true
# 4. 核心规则:本机所有流量,无条件全部打包扔给出口端
rules:
- MATCH,公司出口网关
- 点击右下角的 “保存 (Save)“,并单选激活该配置(使其变成蓝色或高亮状态)。
2.2 激活系统级拦截
Mac 端
- 进入 Clash Verge 左侧的 “设置 (Settings)”。
- 找到 “TUN 模式 (TUN Mode)” 开关,将其打开。
- 系统会弹出权限提示,要求输入 Mac 的开机密码,同意即可。
- ❌ “系统代理 (System Proxy)” 保持关闭(TUN 网卡优先级更高,已彻底接管网络)。
Windows 端
- 进入 Clash Verge 左侧的 “设置 (Settings)”。
- 找到 “TUN 模式 (TUN Mode)” 开关,将其打开。
- 首次开启时,Clash Verge 会自动安装 TUN 虚拟网卡驱动(可能需要管理员权限弹窗确认)。
- 如果安装驱动后仍然无法正常工作,进入 Settings → TUN Stack,尝试切换为
gVisor或LWIP模式。 - ❌ “系统代理 (System Proxy)” 保持关闭即可。
为什么 Windows 客户端不需要开系统代理? 因为在 Clash 的架构中,TUN 模式工作在网络层(Layer 3),优先级高于应用层的系统代理设置。开启 TUN 后,所有流量都会被虚拟网卡截获,无需依赖系统代理。两者同时开启反而可能产生冲突。
Linux 端
Linux 上使用 Clash Verge(或命令行版的 clash-meta/mihomo)同样支持 TUN 模式:
- 确保内核支持 TUN(
ls /dev/net/tun),且用户有root或sudo权限。 - 使用相同配置文件,将
tun.stack调整为gVisor或system视内核版本而定。 - CLI 用户可以直接使用
mihomo(原 Clash Meta)配合该配置文件启动。
第三阶段:联调与验证
配置完成后,不需要在客户端设置任何代理或静态 IP,直接进行以下测试:
- 基础网页测试:在浏览器中打开公司内部的报销系统、Gitlab 或内网 Wiki,检查是否能正常解析并秒开。
- 终端全流量测试:打开终端(Terminal),直接运行不走系统代理的命令:
ping 公司内网某台服务器IP或域名
git clone <公司内网的代码仓库地址>
curl http://内网服务地址
- 测试外部网络:访问百度、Google 等外网,验证出口端的代理节点是否正常工作。
如果以上全部通畅,说明全流量透明网关已彻底部署成功。
常见踩坑与排错说明
痛点一:配置完后客户端依然打不开网页,提示网络不可达?
原因:90% 是 出口端的防火墙 把局域网内客户端发来的请求给拦截了。
解决办法:
- Windows 出口端:进入”控制面板 → 系统和安全 → Windows Defender 防火墙 → 高级设置”,检查 入站规则 中是否有针对
Clash或Mihomo内核的拦截。最粗暴有效的验证方法是:临时关闭 Windows 的专用和公用网络防火墙,若关闭后客户端能上网,说明就是防火墙的锅,去入站规则里为 Clash 开放7890端口即可。- Mac / Linux 出口端:检查系统防火墙或
iptables/nftables规则,确保7890端口未被拦截。
痛点二:出口端重启后,客户端突然断网了?
原因:公司路由器通过 DHCP 分配的 IP 是动态的。出口端重启后,IP 地址可能发生了变动。
解决办法:每次出口端重启后,确认一下它的新 IP 地址。如果变了,客户端只需要右键编辑配置文件,把
server:后面的 IP 改成新的,保存刷新即可。更彻底的方案是为出口端在路由器上配置 DHCP 地址绑定(静态 DHCP),使其永远获取固定 IP。
痛点三:Windows 客户端开启 TUN 模式后蓝屏或断网?
原因:Clash Verge 的 TUN 驱动与某些 VPN 客户端或安全软件冲突。
解决办法:在 Settings 中切换 TUN Stack 模式(
system→gVisor→LWIP),找到一个能稳定运行的组合。如果依然不行,检查是否安装了其他虚拟网卡驱动(如公司的 VPN 客户端),尝试暂时禁用。
痛点四:部分流量仍然没有走代理?
原因:某些软件使用了非标准的网络协议(如原始 UDP 套接字),或配置了独立的网络命名空间。
解决办法:在 Clash 配置中增加
tun.dns-hijack: true来强制劫持 DNS 查询。如果问题依旧,可以尝试启用tun.device为特定网卡而非自动检测。