Docker 跑 aTrust + Clash TUN:Windows 上内网外网同时在线的终极方案

2186 字
11 分钟
Docker 跑 aTrust + Clash TUN:Windows 上内网外网同时在线的终极方案

在公司开发,你可能遇到过一个经典困境:

  • 访问公司内网,必须开 Windows 版 aTrust(公司 VPN 客户端)
  • 使用 Google Antigravity / Cursor AI / 外网服务,必须开 Clash 的 TUN 模式
  • 两者同时开——路由表冲突,内网或外网只能活一个

这不是配置错误,而是底层机制决定的。两个 VPN 级网络组件都在抢系统路由表,必然有一个被打败。

这篇文章给出一个经过生产验证的方案:把 aTrust 塞进 Docker,只暴露代理端口;宿主机用 Clash TUN 统一流量分流。 内外网并行,互不干扰。

一、整体架构#

┌─────────────────────────────────────────────────────────────┐
│ Windows 宿主机 │
│ │
│ 浏览器 ──► ZeroOmega ──► SOCKS5 127.0.0.1:1080 ──┐ │
│ Antigravity / 外网 ──► Clash TUN ──► 机场节点 │ │
│ 内网 IP(非浏览器)──► Clash 规则 ──► 公司内网 ────┤ │
│ ▼ │
│ Docker (WSL2) │
│ hagb/docker-atrust │
│ aTrust VPN → 公司内网 │
└─────────────────────────────────────────────────────────────┘
组件作用
Docker aTrust公司 VPN,提供 1080(SOCKS5) / 8888(HTTP) 代理端口
Clash Verge RevTUN 抓系统流量 + 规则分流
ZeroOmega浏览器代理扩展,内网流量直接走 1080,不经过 Clash

核心思路就一句话:把抢路由表的对手变成合作者。 aTrust 不再碰宿主机路由表,它只在容器里建 VPN,然后通过代理端口把内网流量送出来。

二、环境准备#

2.1 软件清单#

软件说明
WSL2 + Ubuntu跑 Docker 容器
Docker Desktop 或 WSL 内 Docker容器运行时
Clash Verge Rev带 TUN + Merge + Script 功能的 Clash 客户端
ZeroOmegaSwitchyOmega 的继任者,浏览器代理扩展
TightVNC Viewer登录容器内的 aTrust 图形界面
机场订阅已导入 Clash

2.2 拉取 aTrust 镜像#

国内 Docker Hub 访问不稳定,建议用华为云镜像加速:

Terminal window
wsl -d Ubuntu -u root -e bash -lc "docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hagb/docker-atrust:latest && docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hagb/docker-atrust:latest hagb/docker-atrust:latest"

镜像 hagb/docker-atrust 是一个封装了 aTrust Linux 版 + VNC + SOCKS5/HTTP 代理的容器。

三、首次部署#

3.1 docker-compose 配置#

创建 atrust-docker/ 目录,编写 docker-compose.yml

version: "3"
services:
atrust:
image: hagb/docker-atrust:latest
container_name: atrust
privileged: true
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "5901:5901" # VNC 端口
- "1080:1080" # SOCKS5 代理
- "8888:8888" # HTTP 代理
environment:
- PASSWORD=123456 # VNC 密码,按需修改
volumes:
- ./data:/root/.config # 持久化登录状态
restart: unless-stopped

关键点:

  • privileged: true + /dev/net/tun:容器内需要创建 TUN 设备建 VPN
  • ./data 持久化:aTrust 登录状态保存在这里,不用每次重新登录

3.2 启动容器#

Terminal window
wsl -d Ubuntu -u root -e bash -lc "service docker start; cd /mnt/d/changjuyi/aerovisionlink/atrust-docker && docker compose up -d"

或者写成 start-atrust.bat 放在桌面,双击即可。

3.3 VNC 登录 aTrust#

打开 TightVNC Viewer:

地址127.0.0.1::5901(注意双冒号格式)
密码123456(与 docker-compose 中 PASSWORD 一致)

在 VNC 窗口中完成:公司门户地址、账号、密码、手机验证码

登录成功后,容器内的 aTrust 就建好了到公司内网的 VPN 隧道。

3.4 验证代理是否可用#

Terminal window
# SOCKS5(日常推荐)
curl.exe -x socks5://127.0.0.1:1080 -s -o NUL -w "socks5: %{http_code} time:%{time_total}s\n" --max-time 15 http://10.43.95.81:8181/
# HTTP(1080 卡死时临时用)
curl.exe -x http://127.0.0.1:8888 -s -o NUL -w "http: %{http_code} time:%{time_total}s\n" --max-time 15 http://10.43.95.81:8181/

期望结果:200,SOCKS5 耗时通常 < 2 秒

3.5 卸载 Windows 原生 aTrust#

重要:不要与 Docker 版同时运行。Windows 原生 aTrust 会抢路由表,直接破坏整个方案。

控制面板 → 卸载 aTrust。

四、Clash Verge 配置#

4.1 必备设置#

设置说明
代理模式规则❌ 不要用「全局」,内网会走机场
TUN / 虚拟网卡开启Antigravity 等外网需要
当前订阅你的机场订阅已绑定 Merge + Script

4.2 Merge 配置(核心)#

路径:配置 → 你的订阅 → 合并(Merge)

mode: rule
prepend-proxies:
- name: 公司内网
type: socks5
server: 127.0.0.1
port: 1080
udp: true
prepend-rules:
- IP-CIDR,10.0.0.0/8,公司内网
- IP-CIDR,172.16.0.0/12,公司内网
- IP-CIDR,192.168.0.0/16,公司内网
delete-rules:
- GEOSITE,private,DIRECT
- 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
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
strict-route: true

三个关键操作:

  1. prepend-proxies 注入「公司内网」SOCKS5 节点——不能用 proxies:,会覆盖机场节点导致内核报错
  2. prepend-rules 在最前面插入内网 IP 段规则,确保内网流量优先匹配
  3. delete-rules 删除机场订阅里自带的 10.x → DIRECT 规则——这些规则会让内网直连,不走代理

4.3 脚本覆写(Script,可选但推荐)#

Clash Verge Rev 支持 JavaScript 脚本覆写配置。作用是:

  • 强制 mode: rule
  • 注入「公司内网」SOCKS5 节点
  • 删除 10.x → DIRECT 冲突规则
  • 内网 Sniffer 跳过

修改后需要:重新加载配置重启内核

4.4 常见 Clash 错误#

现象原因处理
内核通信错误Merge 用了 proxies: 覆盖节点prepend-proxies
自动选择 proxies missing同上重新加载配置
内网 using GLOBAL全局模式规则模式
内网 using DIRECT + 超时 ~10s订阅里 10.x DIRECTMerge delete-rules + 脚本清理

五、ZeroOmega 配置(浏览器内网路由)#

为什么需要 ZeroOmega?因为浏览器访问内网系统(如 OA、Jira、内部 API 文档)时,走 Clash 会多一层代理开销,且 Clash 日志里会暴露内网 IP。ZeroOmega 让浏览器内网流量直接到 Docker 的 1080,更快、更干净。

5.1 新建「公司内网」情景#

类型代理服务器
协议SOCKS5
服务器127.0.0.1
端口1080

5.2 SOCKS5 vs HTTP:选哪个?#

端口协议特点适用场景
1080SOCKS5接口快,适合 API 调用日常开发(推荐)
8888HTTP页面加载快,但 API 每个 10-12 秒仅当 1080 卡死时临时用

HTTP 模式走的是容器内的 tinyproxy,大量并发 API 请求时会排队阻塞。SOCKS5 走 danted,性能更好但偶发挂死。

5.3 auto switch 规则(可选)#

条件情景
10.*公司内网
*.公司域名.com公司内网(按实际填写)
默认直接连接

注意:访问纯 IP 内网(如 http://10.43.95.81:8181/)时,10.* 规则不一定生效。建议直接手动切换到「公司内网」

5.4 验证是否走 ZeroOmega#

浏览器 F12 → Network → 任选内网请求:

  • 远程地址 应为 127.0.0.1:1080127.0.0.1:8888
  • Via 头含 tinyproxy 表示经 Docker HTTP;SOCKS5 无 Via 也正常
  • Clash 日志里搜不到内网 IP → 说明浏览器未走 Clash,符合预期

六、分工一览#

场景走哪条路
浏览器访问内网系统ZeroOmega → SOCKS5 1080
Antigravity / Cursor AIClash TUN + 规则 → 机场
外网 / GoogleClash 规则 → 机场
Postman / 非浏览器访问内网Clash 规则 → 公司内网(1080)
仅内网、不用 AI可关 Clash TUN,只开 ZeroOmega

七、每次开机流程#

1. start-atrust.bat → 启动 Docker 容器
2. VNC 127.0.0.1::5901 → 若 aTrust 未连接则重新登录
3. 打开 Clash Verge → 规则模式 + TUN 开启
4. 配置 → 重新加载 → 若改过 Merge
5. ZeroOmega → 公司内网 → 访问内网系统
6. 开发 Antigravity → 靠 Clash TUN,无需改 Omega

自检命令#

Terminal window
# 容器是否在运行
wsl -d Ubuntu -u root -e docker ps --filter name=atrust
# 内网代理是否可达
curl.exe -x socks5://127.0.0.1:1080 -s -o NUL -w "%{http_code}\n" http://10.43.95.81:8181/

八、故障排查#

8.1 内网完全打不开#

排查顺序:

  1. 容器是否运行:docker ps --filter name=atrust
  2. VNC 里 aTrust 是否已连接
  3. curl 测 1080 是否 200
  4. ZeroOmega 是否选了**「公司内网」**(非直接连接)
  5. Clash 是否误开了全局模式

8.2 页面卡 1-2 分钟(SOCKS5 挂死)#

danted SOCKS5 偶发挂死:

Terminal window
wsl -d Ubuntu -u root -e bash -lc "cd /mnt/d/changjuyi/aerovisionlink/atrust-docker && docker compose restart"

临时方案:把 ZeroOmega 改为 HTTP 8888 打开页面,接口仍建议用 1080。

8.3 接口每个 10-12 秒#

  • 若走 8888 HTTP:改回 SOCKS5 1080
  • F12 看是否 123+ 请求、是否勾选了停用缓存
  • 检查前端是否有重复请求(如 getInfoNew 被反复调用)

8.4 Clash 日志解读#

日志含义处理
using GLOBAL全局模式,内网走了机场改规则模式
using DIRECT + 10.x 超时订阅的 DIRECT 规则冲突删除 DIRECT 规则
using 公司内网分流正确无需处理
搜不到内网 IP浏览器走 ZeroOmega正常

8.5 内核通信错误#

  • Merge 配置勿用 proxies:,必须用 prepend-proxies
  • 设置 → 重启内核

九、安全与注意事项#

  1. aTrust 登录数据atrust-docker/data/,不要提交到 Git
  2. 容器需要 --privileged/dev/net/tun 才能建 VPN
  3. WSL 重启后需手动 service docker start 或运行 start-atrust.bat
  4. 公司内网 IP 段以 aTrust 实际下发为准,示例为 10.x / 172.16-31.x / 192.168.x
  5. 卸载 Windows 原生 aTrust,这是最容易踩的坑

十、总结#

  • 问题:aTrust 和 Clash TUN 同时开,抢路由表,内外网二选一
  • 方案:aTrust 容器化 → Docker 内建 VPN → 暴露 SOCKS5 代理 → Clash 规则分流 + ZeroOmega 浏览器路由
  • 效果:内网走 1080,外网走机场,互不干扰
  • 关键配置prepend-proxies 注入节点、delete-rules 清除冲突、规则模式(非全局)
  • 日常流程:启动容器 → VNC 登录 → Clash TUN → ZeroOmega 切换

与其让两个 VPN 抢路由表,不如让一个退到容器里做代理。架构上的一个转身,换来的是每天的流畅开发。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Docker 跑 aTrust + Clash TUN:Windows 上内网外网同时在线的终极方案
https://boke.hackerdream.xyz/posts/atrust-clash-zeroomega-dual-network/
作者
晴天
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Docker 多阶段构建实战:把 1.2GB 的 Node.js 镜像压到 50MB
Docker实战 深入解析 Docker 多阶段构建原理与实战技巧,从臃肿的 node:latest 到精简的 Alpine 生产镜像,手把手教你优化前端和 Python 项目的容器化部署。
2
Docker Compose 全栈编排实战:Vue + FastAPI + Nginx 一键起飞
Docker实战 从零搭建 Vue3 + FastAPI + PostgreSQL + Nginx 的 Docker Compose 全栈编排方案,覆盖多服务协调、环境变量管理、数据持久化、健康检查与生产部署的完整实践。
3
这个 GitHub 爆火的 Docker Patterns Skill 到底能干嘛?实测来了
AI工具 从 everyhing-claude-code 项目搬运的 Docker 最佳实践 Skill,涵盖多阶段构建、容器安全、网络编排和卷策略,一站式解决容器化开发难题。
4
Windows 输入密码后转七八分钟才进桌面:Winlogon 日志分析与登录链优化
系统运维 开机输入密码后转圈 7-8 分钟才进桌面?通过事件查看器 Winlogon 6003/6005/6006 日志精准定位 Profiles 加载 142 秒,发现配置过重、自启过多、快速启动叠加导致的登录链阻塞。分阶段修复后降至 10 秒内,附完整排查流程、PowerShell 命令和日常维护建议。
5
AI 函数调用与 MCP 协议深度解析:从 OpenAI tools 到 Model Context Protocol
AI 系统拆解 AI 函数调用(Function Calling/Tool Use)与 Model Context Protocol(MCP)的来龙去脉。从 OpenAI tools 协议栈、Claude Tool Use、Gemini Function Calling 的差异,到 MCP 协议的 JSON-RPC 通信、Resources/Prompts/Tools/Sampling 四大原语与 stdio/SSE/HTTP 三种传输,再到自建 MCP Server 接入 Claude Desktop 与 Claude Agent SDK 的全链路实战,附 6 个完整可运行示例。
随机文章 随机推荐
Profile Image of the Author
晴天
Hello, I'm 晴天.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
155
分类
24
标签
387
总字数
345,424
运行时长
0
最后活动
0 天前

目录