臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速Obsidian、双向链接与知识图谱
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
中华财险-公司项目
对外接口文档
基础数据码表对外接口(仅支持rpc调用)业务码表对外接口应用主数据对外接口
基础运营查询版本更新日志详情消息中心对外接口站内信对外接口站内信模板配置手册
权限中心权限中心对外接口文档(最新)权限中心对外接口文档前端ACL-CORE FACADE依赖版本
审计中心审计中心对外接口文档audit-center-facade版本
审批中心工作流迁审批流现状工作流迁审批流API能力替换方案老审批流接口文档审批中心接口文档审批中心业务回调FAQ
账号中心内部系统对接单点登录内部系统对接认证中心三方网页应用登录授权账号中心对外接口文档前端账号中心RPC接口文档账户变更对外广播消息文档账户中心对外接口HRMS外部员工变更广播消息文档HRMS外部员工对外接口
组织员工岗位🔥机构映射SDK接口文档员工岗位变更通知说明组织机构管营一体概念与用法组织员工对外广播消息文档组织员工岗位对外接口文档组织员工岗位对外接口文档前端组织员工岗位数据模型组织员工主数据业务场景案例organization-facade版本
hrms(大型人力资源外包管理系统)
项目架构说明HRMS Maven模块与依赖说明
项目说明0.流程中心模块0.组织模块说明1.业务线模块2.计划模块3.项目模块4.协议模块5.供应商模块6.合约域模块7.外包人员模块*核心:外包人员生命周期
项目运维外包人员项目编制差异排查与修复2.HRMS相关问题排查4.修改externalId(externalId和accountId不一致)
需求-系分
1.内部转外包0723外包人员关联历史内部账号系分新增外包人员关联历史账号内容(紧急0723上线)需求
2.工作岗位0820工作岗位0820需求工作岗位0820需求-系分
3.用工模式调整0917内部人员转外包用工系统需求2内部人员转外包用工系统需求-系分
sso(账号中心-单点登录)
项目架构说明aboss-sso项目架构入门AOP统一日志打印链路Maven多模块项目高级知识OAuth2.0
项目说明1.SSO-OAuth2.0与IDaaS登录流程2.外部账号创建流水号并发问题分析
AI
使用说明
第三方插件&技能简介Archify使用与安装指南Ponytail使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.完成可运行聊天接口
GitGit常用命令与Obsidian推送排查
Java
面试题Java基础与集合面试题
AtomicInteger原子计数与并发安全ConcurrentHashMap并发安全与计数Java线程、线程池与Future
python
基础Python基础语法
HTTPXHRMS员工详情接口调用(Python HTTPX)

关联笔记:1.臭名昭著aTrust隔离计划

1. VPN 到底是什么

VPN(Virtual Private Network,虚拟专用网络)可以理解为:

先在你的设备和远方的 VPN 服务器之间建立一条“加密隧道”,再让 VPN 服务器替你访问互联网。

以“在中国使用本地网络无法直接访问 ChatGPT”为例:

图中的紫色边框就是 VPN 加密隧道的范围:它从你的设备开始,到 VPN 服务器结束,并不会一直延伸到 ChatGPT。

这里同时存在两层加密:

  • 你的设备 ↔ VPN 服务器:使用 VPN 隧道进行外层加密,VPN 服务器负责拆掉这一层。
  • 你的设备 ↔ ChatGPT:使用 HTTPS 进行端到端加密,贯穿整条访问路线。正常情况下,VPN 服务器只能转发数据,无法解密具体的聊天内容。

原来是你的设备直接尝试连接 ChatGPT;使用 VPN 后,网络路线变成:

你的设备 → VPN 服务器 → ChatGPT

VPN 在这个例子中主要做两件事:

  1. 改变访问路线:请求先到能访问 ChatGPT 的 VPN 服务器,再由它继续访问。
  2. 改变网络出口:ChatGPT 看到的来源通常是 VPN 服务器的公网 IP,而不是你本地网络的公网 IP。

2. 什么是“加密隧道”

“隧道”不是真有一根专用网线,而是一种网络封装方式:

原始请求:访问 ChatGPT
        ↓ 加密并套上外层地址
外层数据:发送给 VPN 服务器
        ↓ 到达后解密
还原请求:由 VPN 服务器继续访问 ChatGPT

可以把它想象成一辆上锁的快递车

  • 原始网络数据是车里的货物;这件货物通常还由 HTTPS 单独上锁。
  • 互联网负责修路和运送,但看不清车内货物。
  • VPN 服务器拥有 VPN 外层的钥匙,负责打开“快递车”并继续转发,但通常打不开 HTTPS 保护的具体内容。

加密隧道并不是隐形隧道

在这个例子里,本地网络通常无法直接看清隧道里的原始请求,但仍然能够看到:

  • 你的设备连接了哪个 VPN 服务器 IP。
  • 使用了哪个端口、连接了多长时间。
  • 数据包的大小、频率和流量特征。

所以,加密只能做到看不清车里的货物,不能让整辆车消失。如果某个 VPN 服务器或协议被识别,连接仍可能通过以下方式被拦截:

  1. 封锁服务器 IP 或端口:直接阻止设备连接已知的 VPN 节点。
  2. 识别协议特征:根据握手方式、数据包大小和字节分布等特征判断它像不像 VPN 流量。
  3. 主动探测服务器:主动连接可疑服务器,根据其响应判断它是不是代理或 VPN 节点。

公开研究表明,即使流量已经完全加密,仍可能通过流量特征进行识别;OpenVPN 等协议也可能被“被动识别 + 主动探测”。参见 USENIX 2023:全加密流量的检测与封锁USENIX 2022:OpenVPN 协议指纹

之所以不能简单地拦截所有加密连接,是因为 HTTPS、银行、云服务和企业办公也会产生大量正常的加密流量;全部拦截会造成严重误伤。因此现实中通常是选择性识别和封锁。

不过,加密隧道只覆盖 你的设备到 VPN 服务器 这一段。VPN 服务器到 ChatGPT 的后半段,仍然需要依靠 HTTPS 等协议保护。

3. VPN 服务器做什么

VPN 服务器是加密隧道的另一端,也是你的网络出口。可以把它理解成一个位于远方的“网络中转站”。它通常负责:

  • 验证你的 VPN 账号或密钥。
  • 与 VPN 客户端协商密钥并建立加密连接。
  • 解密隧道中的请求,读取你要访问的目标地址。
  • 代替你的设备连接 ChatGPT。
  • 把 ChatGPT 的响应重新送入加密隧道,传回你的设备。

例如你连接的是新加坡 VPN 服务器,访问路线就是:

中国本地网络 → 新加坡 VPN 服务器 → ChatGPT

此时,ChatGPT 通常看到的是新加坡 VPN 服务器的公网 IP。你的真实网络并没有“搬到新加坡”,只是互联网请求改为从新加坡服务器中转出去。

VPN 服务器处在通信中间,因此服务商是否可信很重要。另外,VPN 只负责改变连接路线和网络出口,并不能保证账号一定可用;目标网站仍可能根据账号、出口 IP、服务地区和风控规则决定是否提供服务。

4. 普通机场是怎么工作的

“机场”是代理服务商的俗称。机场通常提供订阅链接和多台代理服务器,这些服务器一般叫作“节点”。

几个常见概念的关系是:

  • 机场:提供整套代理服务的服务商。
  • 节点:真正替你访问目标网站的代理服务器。
  • 订阅链接:保存节点地址、端口、认证信息和协议等配置的清单,本身不传输流量。
  • FlClash:读取订阅、接管请求并按规则选择节点的本地客户端。

Shadowsocks、Trojan、VLESS 和 TLS 是什么

先记住最重要的区别:

Shadowsocks、Trojan、VLESS 是代理协议,负责规定 FlClash 怎样把请求交给机场节点;TLS 是通用的安全协议,负责给一段连接加密、验明服务器身份并防止数据被篡改。

可以把访问请求想象成一个快递包裹:

名称大白话理解加密由谁负责
Shadowsocks一套“带密码的快递规则”:客户端按约定加密并打包,节点解密后代为转发Shadowsocks 自己使用约定的加密算法保护代理数据
Trojan把代理请求装进一条真正的 TLS 连接中,外部看起来更接近普通的加密网站连接主要由 TLS 负责
VLESS一张轻量的“快递单”:说明用户身份、目标地址和数据怎样转发,本身不负责把内容加密通常搭配 TLS 或其他安全传输方式
TLS通用的“防拆安全箱”,HTTPS 中的 S 主要就来自它;它不是机场节点,也不负责选择访问路线TLS 自己负责加密、完整性保护和服务器身份验证

它们之间不是四选一的同类关系。更准确地说:

Shadowsocks = 代理规则 + 自带加密
Trojan      = Trojan 代理规则 + TLS
VLESS       = VLESS 代理规则 + TLS 等安全传输方式
TLS         = 可被不同上层协议使用的通用安全外壳

例如订阅中写着 VLESS + TLS,意思不是同时使用两个代理,而是:VLESS 负责组织和转发代理请求,TLS 负责把 FlClash 到机场节点的这段连接保护起来。

相关规范:Shadowsocks 官方说明Trojan 协议说明VLESS 协议说明TLS 1.3 标准

以通过日本节点访问 Google 为例:

完整过程是:

  1. 应用发出访问 Google 的请求。
  2. FlClash 捕获请求,根据规则决定使用哪个机场节点。
  3. FlClash 通过 Shadowsocks、Trojan、VLESS 等代理协议,把请求发送给节点。
  4. 节点取出目标地址,代替用户连接 Google。
  5. Google 把结果返回给节点,节点再把数据送回 FlClash 和应用。

这时,网站通常看到的是机场节点的公网 IP,而不是用户本地网络的公网 IP。运营商主要能看到用户正在连接某个节点;节点则能知道请求要去往哪个目标地址。

需要注意,这里可能同时存在两层保护:

  • FlClash 到机场节点:通常由代理协议和 TLS 等方式保护,是否加密以及如何加密取决于具体节点配置。
  • 应用到 HTTPS 网站:由 HTTPS 提供端到端内容加密。

代理不天然等于加密,因此可信节点仍然很重要。节点掌握连接目标、时间和流量等信息;访问未使用 HTTPS 的网站时,它还可能看到明文内容。

机场代理和公司 VPN 的区别

两者都包含“先连接远端服务器,再由服务器转发”的过程,但目的不同:

对比普通机场公司 VPN
远端服务器机场节点公司 VPN 服务器
主要目的通过其他网络出口访问互联网安全进入公司专用网络
常见目标普通互联网网站公司域名和内网 IP
当前实践FlyBit 等代理节点Docker 中的 aTrust

FlClash 开启 Tun 模式后,从应用视角看很像 VPN:它通过虚拟网卡接管更多系统流量。但在这套实践里,FlClash 的核心职责仍是代理和分流,真正进入公司内网的 VPN 隧道由 aTrust 建立。

5. aTrust 放进 Docker 后发生了什么

原来 aTrust 直接运行在 macOS 上,会创建虚拟网卡并修改宿主机路由,容易和 FlClash 的 Tun 模式争夺流量控制权。

把 aTrust 放进 Docker 后,真正的公司 VPN 隧道只存在于容器内部。容器再通过 127.0.0.1:1080 暴露一个 SOCKS5 代理入口,供宿主机使用。

SOCKS5 是什么

SOCKS5 是一种通用的网络转发协议,可以把它理解成一个“网络转发窗口”。

客户端连接 SOCKS5 服务后,会先告诉它:

请帮我连接这个目标地址和端口,后面的数据都由你代为转发。

SOCKS5 服务收到要求后,会替客户端连接目标服务器,然后在双方之间来回搬运数据。它可以处理 TCP,也定义了 UDP 转发方式,并支持 IPv4、IPv6 和域名形式的目标地址。

需要注意:**SOCKS5 本身通常不负责加密。**它主要规定怎样提交目标地址、建立连接和转发数据。是否加密,要看外面是否还有 TLS、VPN 或其他安全协议保护。

SOCKS5 和 Shadowsocks 也不是同一种协议:

对比SOCKS5Shadowsocks
核心作用通用地转交目标地址并转发数据把代理请求加密后发送给远端节点
默认加密通常没有有自己的加密方式
当前实践中的位置FlClash 到 Docker aTrust 的本机交接常用于 FlClash 到机场节点的远程连接

在当前方案中,FlClash 把公司请求交给 127.0.0.1:1080,SOCKS5 再从容器内部替它连接目标。这个过程只是宿主机与容器的交接,真正通往公司的加密隧道仍由 aTrust 建立。

测试命令中的 socks5h://127.0.0.1:1080 多了一个 h,表示域名也交给 SOCKS5 服务所在的一侧解析,适合只有公司网络才能解析的内部域名。

一句话记忆:SOCKS5 是转交请求的窗口,aTrust 才是建立公司加密隧道的人。

相关规范:RFC 1928:SOCKS Protocol Version 5

这里有两个容易混淆的连接:

连接作用是不是公司 VPN 隧道
FlClash → 127.0.0.1:1080 → Docker把公司请求交给容器不是,只是本机 SOCKS5 转发
Docker 中的 aTrust → 公司 VPN 服务器加密传输并进入公司网络

6. 这套实践中的完整流程

以访问 platform.cic.inter 为例:

各组件的分工是:

  • FlClash 是交通指挥员:识别请求该走公司内网、外部代理还是直连。
  • SOCKS5 是交接窗口:把宿主机选中的公司请求送进 aTrust 容器。
  • aTrust 是 VPN 客户端:在容器里完成登录、加密和隧道建立。
  • 公司 VPN 服务器是远端网关:解密请求并转发到公司内网。
  • Docker 是隔离房间:把 aTrust 的虚拟网卡和路由变化限制在容器网络中,减少对 macOS 路由的影响。

因此,FlClash 开启 Tun 模式时可以统一接管应用流量,但不再与宿主机上的 aTrust 抢虚拟网卡;公司请求被转交给容器,其余请求继续按 FlClash 规则处理。

7. 一句话总结

机场节点是访问互联网的“网络代办员”,公司 VPN 服务器是进入公司内网的专用入口;你的方案让 FlClash 统一分流,把普通外网交给机场,把公司流量通过 SOCKS5 交给 Docker 中的 aTrust。

注意:Docker 隔离主要解决宿主机路由冲突,不等于绝对安全隔离;aTrust 容器使用 privileged/dev/net/tun 时,在容器内部仍拥有较高权限。