返回文章列表

Article

跨设备全流量穿透方案:任意系统借助已准入设备绕过企业网络限制

一套通用的企业内网全流量穿透方案。无论你的主力系统是 Mac、Windows 还是 Linux,只要有一台已通过企业准入认证的设备作为出口,就能实现全流量劫持与转发,完美解决终端、Git、数据库工具等不走系统代理的痛点。

更新于

这份教程专为企业内网环境定制。针对公司限制网络共享、移动热点被禁用、且有严格的网络准入认证(如 802.1X 认证、准入客户端等)的场景,该方案能够 100% 绕过限制,并完美解决开发软件(如终端、Git、数据库工具等)不走系统代理的痛点。


核心原理简介

  • 出口端:已通过企业准入认证的设备(通常是 Windows 台式机或笔记本),只充当一个合法的”流量出口”,本身不进行任何复杂的路由转发配置。
  • 客户端:你的主力开发设备(Mac / Windows / Linux),开启 Clash Verge 的 TUN 模式,在本地建立虚拟网卡,强行拦截系统 Layer 3(网络层)全量流量,打包发给出口端。
  • 物理流向:客户端上的所有软件流量被截获后,通过标准代理协议发给出口端。在公司网管看来,这只是出口端设备自身在进行正常的网络访问,100% 绿灯放行,且完美兼容公司内网所有私有 DNS 域名解析。

第一阶段:出口端设置(作为”合法流量出口”)

出口端不需要开启任何系统级路由转发,只需要作为一个普通的”代理服务端”接应客户端。

  1. 获取出口端的局域网 IP 地址

    • Windows:按下 Win + R,输入 cmd 回车,执行 ipconfig,找到当前连网网卡的 IPv4 地址(通常是 10.x.x.x192.168.x.x),记录下来。
    • Mac / Linux:执行 ifconfigip addr,找到对应网卡的 IP 地址。
  2. 配置 Clash Verge

    • 打开出口端设备上的 Clash Verge。
    • 进入左侧的 “设置 (Settings)”
    • 开启 “允许局域网连接 (Allow LAN)” 开关。
    • 关闭 “TUN 模式 (TUN Mode)” 开关。
    • 关闭 “系统代理 (System Proxy)” 开关。
  3. 保持出口端清醒

    • Windows:进入系统设置 → 电源与睡眠,将 “使计算机进入睡眠状态” 改为 “从不”
    • Mac:系统设置 → 电池 → 电源适配器,关闭”在此时间段后关闭显示器”的自动休眠。
    • 如果出口端设备休眠或关机,客户端将会断网。

第二阶段:客户端设置(作为”全量流量强盗”)

在客户端上通过本地 TUN 虚拟网卡接管全量网络,并把数据无条件发送给出口端。

2.1 编写客户端专属配置文件

  1. 打开客户端上的 Clash Verge,点击左侧的 “配置 (Profiles)”
  2. 点击右上角的 “新建 (New)” → 类型选择 “Local”,名称任意(如:公司直连网关)。
  3. 右键点击这个新建的配置,选择 “编辑 (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,公司出口网关
  1. 点击右下角的 “保存 (Save)“,并单选激活该配置(使其变成蓝色或高亮状态)。

2.2 激活系统级拦截

Mac 端

  1. 进入 Clash Verge 左侧的 “设置 (Settings)”
  2. 找到 “TUN 模式 (TUN Mode)” 开关,将其打开
  3. 系统会弹出权限提示,要求输入 Mac 的开机密码,同意即可。
  4. “系统代理 (System Proxy)” 保持关闭(TUN 网卡优先级更高,已彻底接管网络)。

Windows 端

  1. 进入 Clash Verge 左侧的 “设置 (Settings)”
  2. 找到 “TUN 模式 (TUN Mode)” 开关,将其打开
  3. 首次开启时,Clash Verge 会自动安装 TUN 虚拟网卡驱动(可能需要管理员权限弹窗确认)。
  4. 如果安装驱动后仍然无法正常工作,进入 Settings → TUN Stack,尝试切换为 gVisorLWIP 模式。
  5. “系统代理 (System Proxy)” 保持关闭即可。

为什么 Windows 客户端不需要开系统代理? 因为在 Clash 的架构中,TUN 模式工作在网络层(Layer 3),优先级高于应用层的系统代理设置。开启 TUN 后,所有流量都会被虚拟网卡截获,无需依赖系统代理。两者同时开启反而可能产生冲突。

Linux 端

Linux 上使用 Clash Verge(或命令行版的 clash-meta/mihomo)同样支持 TUN 模式:

  1. 确保内核支持 TUN(ls /dev/net/tun),且用户有 rootsudo 权限。
  2. 使用相同配置文件,将 tun.stack 调整为 gVisorsystem 视内核版本而定。
  3. CLI 用户可以直接使用 mihomo(原 Clash Meta)配合该配置文件启动。

第三阶段:联调与验证

配置完成后,不需要在客户端设置任何代理或静态 IP,直接进行以下测试:

  1. 基础网页测试:在浏览器中打开公司内部的报销系统、Gitlab 或内网 Wiki,检查是否能正常解析并秒开。
  2. 终端全流量测试:打开终端(Terminal),直接运行不走系统代理的命令:
ping 公司内网某台服务器IP或域名
git clone <公司内网的代码仓库地>
curl http://内网服务地址
  1. 测试外部网络:访问百度、Google 等外网,验证出口端的代理节点是否正常工作。

如果以上全部通畅,说明全流量透明网关已彻底部署成功。


常见踩坑与排错说明

痛点一:配置完后客户端依然打不开网页,提示网络不可达?

原因:90% 是 出口端的防火墙 把局域网内客户端发来的请求给拦截了。

解决办法

  • Windows 出口端:进入”控制面板 → 系统和安全 → Windows Defender 防火墙 → 高级设置”,检查 入站规则 中是否有针对 ClashMihomo 内核的拦截。最粗暴有效的验证方法是:临时关闭 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 模式(systemgVisorLWIP),找到一个能稳定运行的组合。如果依然不行,检查是否安装了其他虚拟网卡驱动(如公司的 VPN 客户端),尝试暂时禁用。

痛点四:部分流量仍然没有走代理?

原因:某些软件使用了非标准的网络协议(如原始 UDP 套接字),或配置了独立的网络命名空间。

解决办法:在 Clash 配置中增加 tun.dns-hijack: true 来强制劫持 DNS 查询。如果问题依旧,可以尝试启用 tun.device 为特定网卡而非自动检测。