这是最原始的方式。比如你自己在美东 VPS 上搭了个简单的加密协议。
因为目的 IP 在境外,GFW 会重点扫描这个 IP。如果你的伪装不够好,或者流量特征太明显,GFW 就会把这个目的 IP 封掉。这就是为什么以前“自建”节点很容易挂掉的原因。
另外,VPS 提供商分大厂(AWS,Azure,Google Cloud)和小厂(BandwagonHost, DMIT, GIA.CN)。如果要从国内连接到大厂的 VPS,一般走的都是普通的公网线路。小厂往往针对国内运营商,他们会在海外(美西、香港、日本)租用机房,然后专门去跟中国电信/联通签协议,买断一部分 CN2 GIA 或 AS9929 的带宽,专门引流到自己的服务器上。
-
出发(你家电脑):
你访问 google.com。
代理软件拦截请求,把它塞进一个加密的“假信封”里(比如 Trojan、VLESS)。这个信封的收件人不是 Google,而是你的 VPS 服务器 IP。
-
出小区(国内 ISP):
数据包走过电信/联通的普通马路(163 线路等)。
-
过海关(GFW):
重点来了! 数据包到达国际出口。GFW 的海关人员拿起扫描仪(DPI 检测):
“咦,这是一封寄往美国的信,但信封看起来像是正常的 HTTPS 网页。”
由于你用了伪装协议,GFW 没看出它是翻墙流量,挥挥手放行了。
-
跨海(海底光缆):
数据包钻进海底光缆,飞向 VPS 所在的机房(比如香港、日本或美国)。
-
接头人(VPS):
服务器收到信封,拆开后发现:“哦,原来你是要去访问 Google 啊。”
服务器代替你向 Google 发出请求。
-
终点(Google 服务器):
Google 把数据传回给 VPS,服务器再重新装进加密信封,原路返回给你。
为了提高稳定性,绝大多数“机场”不会让你家电脑直接连境外。它们会设置一个“国内中转站”(通常在上海、广州、徐州等骨干网节点)。
-
第一段(你家 -> 国内中转机):
你电脑发出的数据包,目的 IP 是国内某个机房的 IP。
GFW 看到的: 它只看到你在连接国内的一个服务器。因为没有出境,海关(GFW)根本不查你。
-
第二段(国内中转机 -> 境外服务器):
国内中转机收到你的包,再通过专门优化的线路(比如刚才说的 CN2 GIA 或专线)把包转发给境外服务器。
为什么这么做? 1. 更稳定:国内连国内非常快,丢包极少。 2. 更隐蔽:你家的数据包根本没直接出境,目的 IP 是国内的,大大降低了被封锁的概率。
优质中转在国内会租用 BGP 多线机房。不管你家是电信、联通还是移动,连接这个国内入口的速度都是极快的(因为机房同时接了三家线)。
另外中转机和海外落地机之间会建立一条加密隧道(如 Gost, ShadowTLS)。这能把原本散乱的代理流量包装成非常有规律的机房数据传输,对 GFW 的指纹识别有极强的干扰作用。
注意,如果是公网中转,中间会有非常多的路由器。数据包离开国内中转机的机房后,会进入运营商的骨干网(CR),一路跑到国际出口网关(IGW),经过防火墙(GFW)的旁路监测,然后下海底光缆,出海底光缆,抵达国内运营商在海外的 PoP 路由器。
PoP 路由器可能通过一根物理光纤直连境外服务器机房的边界路由器。
PoP 路由器也可能经过好几条才抵达境外服务器机房的边界路由器
如果是专线中转,那么国内中转机和境外服务器就像是插在同一台交换机上的两台电脑。
-
第三段(境外服务器访问真正目的 ip)
-
CLash Verge 里的 server 信息
Clash 配置文件里的 server 字段,永远只代表“你的电脑迈出的第一步要去哪里”。它并不一定代表数据的最终归宿。
我们可以把 server 理解为“下一站的接头人”。
对直连模式,server 就是境外的最终服务器。
对中转/专线模式,server 是境内的入口服务器。
-
如何判断 server 在那里
关闭 clash 所有功能,终端里 ping server 的域名,会得到 ip。ipinfo 查这个 ip,可以得到地点。
-
nexttrace 国内中转机的 IP,IP 信息从 clash 配置文件里获取
-
国内中转机到境外服务器的这段没办法看
-
境外服务器到目标网站
用 looking glass。
我们可以把一个访问 [www.google.com](https://www.google.com) 的过程,拆解为以下四个包装阶段:
-
Clash 拦截与提取
当你的浏览器想要访问 Google 时,Clash(作为本地的代理客户端)拦截了这个请求。
Clash 会剥离掉你电脑本地生成的那个没用的 IP 头部,只提取出两个最核心的要素:
目标地址与端口:
[www.google.com](https://www.google.com)和 443。真实 Payload(应用层数据): 比如 TLS 握手数据(Client Hello)。
-
构建 SS 裸报文(拼接明文)
现在,Clash 里的 SS-local 模块开始把上面的信息组装成 SS 协议专属的格式。
SS 的明文报文结构极其精简,没有多余的废话,只包含:
[目标地址类型] + [目标地址] + [目标端口] + [真实数据]。拼出来的结构如下:
-
地址类型 (1 Byte): 0x03 代表后面跟的是一个域名(0x01 代表 IPv4,0x04 代表 IPv6)。
-
地址长度 (1 Byte): 14(也就是
[www.google.com](https://www.google.com)的字母长度)。 -
目标地址: 字符串
[www.google.com](https://www.google.com)。 -
目标端口 (2 Bytes): 443。
-
真实 Payload: 你的 TLS Client Hello 数据。
这个拼接好的东西,就是你要发给国内中转机的“核心指令单”。
-
-
AEAD 加密(穿上隐身衣)
如果直接把上面的明文发到公网上,墙(GFW)的 DPI 一眼就能看到里面的
[www.google.com](https://www.google.com),瞬间就会把连接掐断。所以,SS 必须对其进行强加密。现代 SS 普遍采用 AEAD 算法(比如 aes-256-gcm 或 chacha20-poly1305)。
AEAD 加密的特点不仅是加密,还会对数据进行“分块(Chunk)”并加上“认证标签(Tag)”,防止墙对数据包进行恶意篡改或探测。
经过加密后,上面的明文变成了一坨毫无规律的随机乱码(高熵数据):
[Salt 盐值] + [加密的长度信息] + [Tag] + [加密的(目标地址+真实数据)] + [Tag]至此,你的原始请求被彻底锁进了一个坚不可摧的黑盒子里。
-
套上公网外壳(IP 与 TCP 封装)
这个黑盒子(加密后的 SS Payload)虽然安全,但它自己是无法在互联网上寻址的。它必须伪装成一个正常的普通网络连接。
于是,你电脑里的操作系统网络栈,会给这个黑盒子套上标准的公网 TCP/IP 头部:
协议层字段内容状态谁能看到
-
IP 头部、明文
源 IP = 你的本地IP 目标 IP = 国内中转节点的 IP
沿途所有路由器、GFW 能看到
-
TCP 头部、明文
源端口 = 随机 目标端口 = 代理节点上配置的端口 (如 8388)
沿途所有路由器、GFW 能看到
-
TCP 载荷、密文
上一步生成的 AEAD 密文 (包含了 Google 域名和数据)密文
国内节点解不开,只有海外节点能解开
-
墙在公网上抓到了这个包。它拆开 IP 层,发现目标是某个国内 IP;拆开 TCP 层,发现端口是 8388;再往里看应用层,发现里面全是毫无规律的乱码。墙既不知道你要访问 Google,也不知道里面装的是网页还是图片,只能把它当成普通的未知 TCP 流量放行。
当你的数据包抵达国内中转节点(广州联通)时,这里发生的事情非常关键:国内中转节点通常不负责解密。
中转机上运行的通常不是 Shadowsocks 服务端,而是非常底层的流量转发工具(比如 iptables, HAProxy, Gost 或者直接进入 IEPL 专线的二层交换网络)。
-
剥离旧外壳: 中转机剥离掉来自你电脑的 IP 头部。
-
换上新外壳: 中转机把那个依然保持加密状态的“SS 黑盒子”原封不动地抽出来,给它套上一个新的 IP 头部:
- 源 IP = 广州联通中转机的 IP
- 目标 IP = 海外落地节点的 IP
-
跨国传输: 中转机把换好新 IP 壳的数据包,塞进国际出口光缆(如果是公网中转)或者跨境专线(如果是 IPLC/IEPL)。
这个时候,墙(GFW)在出海口如果抓到这个包,它看到的是:“广州联通的服务器,正在向海外的某台机器发送一段乱码。”(这就是为什么有些机场会被墙封掉国内入口所在的 IP,因为墙发现了这个入口机在大量往海外发乱码)。
换过外壳的数据包抵达海外落地机。
-
海外机房的边界路由器接收数据,送进这台落地机。
-
落地机上的 SS-server(真正的服务端) 接住这个包。
-
它掏出密钥,终于解开了那个从你电脑上发出后、一路未被触碰的“黑盒子”。
-
落地机看到了里面的明文指令(www.google.com:443 和 TLS 数据),然后代你向真正的 Google 服务器发起请求。
-
总体延迟
当你点击 Clash Verge 里的“小闪电”图标测速时,它实际执行的是一个 URL-Test(URL 连通性测试)。显示的时间反映科学上网的实际时间。如果出现 timeout,代表访问不了境外网络。
假设测试目标是 http://www.google.com/generate_204(这是 Clash 的默认标配),数据包的旅程是这样的:
- A 段(你家 -> 机场入口):你的电脑把请求发给 Clash 配置文件里的 server(也就是那个广州联通中转机)。
- B 段(机场入口 -> 境外出口):数据在中转隧道或专线里飞奔,到达台湾/美国落地机。
- C 段(境外出口 -> Google 服务器):落地机向 Google 发起 HTTP 请求,Google 返回一个状态码(204 No Content)。Clash 显示的那个数字,就是 A+B+C 的 RTT。
Clash Verge 的测速通常有两种模式(可以在设置里看,或者不同版本表现不同):
-
URL-Test (最常用):
原理:真刀真枪地去下载一个网页小文件(HTTP GET)。
优点:最真实。如果机场屏蔽了 Google,这里就会报错。它反映的是**“能打开网页的速度”**。
缺点:比纯 Ping 稍微慢一点点(多了 HTTP 握手时间)。
-
TCP Ping:
原理:只是和目标建立一个 TCP 连接(握手),一旦握上手就断开,不算 HTTP 请求时间。
表现:数字通常会比 URL-Test 小个 10-20ms。
坑点:有些机场虽然能握手(TCP 通),但其实连不上网(HTTP 阻断)。这时候 TCP Ping 是绿的,但你网页打不开。
-
分段延迟
-
你家到国内中转机
这段可以用 nexttrace 测出来。
-
中转机到境外服务器
很难测,但是可以合理推测一下。比如沪日大概在 25-35 ms。
-
境外服务器到目标 IP
Looking glass。
-
-
给定任意 IP 任意端口,测延迟
结论是没有方法,根本测不了。下面的脚本是不行的,返回的值非常小。
IP=8.8.8.8 PORT=443 PROXY=127.0.0.1:7890 for i in {1..20}; do echo -n "$(date '+%H:%M:%S') " TIMEFMT='%E' { time nc \ -x "$PROXY" \ -X 5 -z -v \ "$IP" "$PORT" } 2>&1 sleep 1 done -
ping 的问题
注意,如果开了 TUN 模式,在终端里用 ping 测试,如果 ip 是
198.18.0.x,出来的延迟只有零点几毫秒,是假的。nexttrace/traceroute TUN 模式下也不行。Clash 和 Shadowsocks 这类代理协议,根本不支持转发 IP 层的头部信息 TTL。
tcping 也不行。
公网路况随时在变,可能会有抖动。专线几乎没有抖动。
- 小于 10ms:顶级线路(专线水准)。
- 10ms - 30ms:正常水平。
- 大于 50ms:严重抖动,远程桌面会卡顿。
speedtest 测或者 youtube 测。
打开 YouTube,随便找个 4K 视频。右键视频画面,选择 “详细统计信息 (Stats for nerds)”。
看 Connection Speed 这一行:
- 小于 5000 Kbps:垃圾节点,只能看 1080p 以下。
- 大于 20000 Kbps:合格,看 4K 没问题。
- 大于 100000 Kbps:极品,看 8K 随便拖动。
为了良好的上网体验,一个包都不能丢。如果丢包会出现这些问题:网页加载不全、图片裂开、CSS 样式乱了。因为组成网页的几百个包裹里,丢了几个关键的。
-
谁搞的鬼
嫌疑人 A:GFW 的“QoS 干扰” (最恶心的一招)
GFW 不一定要彻底阻断你(直接 Reset)。对于中转流量,它经常使用一种叫 QoS (流量整形) 的手段。
手段:它识别出你在用加密隧道传数据,但它不确定是不是翻墙。于是它采取策略:“每 10 个包,我故意给你扔掉 2 个。”
目的:让你感觉网速极慢、网页打不开,让你产生“这梯子坏了”或者是“这网站挂了”的错觉,从而让你知难而退。这就是你现在遭遇的“精神折磨”。
嫌疑人 B:晚高峰的“国际出口拥堵”
你家是电信,虽然连的是联通中转,但如果那个中转机房的出口带宽爆了:
现象:就像晚高峰的地铁站进站口。人太多,闸机口太少。
结果:路由器缓存满了,后来的数据包直接被物理丢弃。这不是针对你,是单纯的路不够宽。
嫌疑人 C:机场主“超售”
现象:那个中转机可能是一台 1Gbps 的服务器,但机场主卖给了 5000 个人用。
结果:甚至还没出中转机,你的包就在机房内部被挤掉了。
-
专线可以完美解决
避开 GFW:专线走内网,不经过 GFW 的检查站。GFW 根本没机会对你搞“每 10 个扔 2 个”的把戏。
独享路权:真正的专线通常带宽预留很足,不会像公网那样大家挤破头。
-
不换专线怎么办?
Hysteria2 / Tuic 协议。
原理:基于 UDP 的暴力发包。
效果:在公网丢包率高(如 10%)的环境下,它能通过冗余发包强行把网页“拽”出来,体验远好于 TCP (Shadowsocks/VMess)。
-
Cloudflare Speed
这是目前测试代理连接质量最好的工具,因为它能直接生成可视化的图表。
-
步骤
准备:开启 Clash Verge,选好你要测的那个节点,开启系统代理(或 TUN 模式)。
访问:在浏览器打开 speed.cloudflare.com
看结果:等待它跑完(大约 30 秒)。延迟、抖动、网速、丢包率都有。
-
延迟
注意,延迟测出来的是你 ➔ 代理落地机 ➔ 落地机最近的 Cloudflare 节点整个过程的 RTT。
-
丢包率
丢包率可能也不准。
绝大多数科学上网协议(Shadowsocks, VMess, Trojan 等)底层都是基于 TCP 协议的。TCP 是一个“可靠传输协议”,它的核心机制就是丢包重传。
假设你的数据包在跨越太平洋的海底光缆时物理丢失了。你的电脑或代理节点发现没收到确认(ACK),会在底层自动重新发送这个数据包,直到对方收到为止。
浏览器里运行的 Cloudflare 测速脚本属于应用层。它根本不知道底层发生了重传,它只知道“数据最终完整地送达了”。因此,网页计算出的丢包率是 0%。
真实的物理丢包,在测速结果中并没有体现为“丢包(Loss)”,而是转化为了抖动
-
抖动
当跨国线路(你家 ➔ 落地机)拥堵、发生物理丢包时,TCP 开始频繁重传。
重传导致数据包到达浏览器的时间变得极其不规律:有的包 150ms 到达,有的包丢了重传需要 300ms 才到达。
这种到达时间的不一致,在 Cloudflare 测速中就会体现为 Jitter(抖动)数值飙升。
-
只要是走“公网”出去的流量,在出境的那一刻,物理上都必须经过部署在各大国际出口(北京、上海、广州)的 GFW 硬件集群。
GFW 并不是“把墙砌死”,它更像是一个拥有超级算力的海关。它的处理方式分为几种:
- 放行:如果你是正常的网页浏览(HTTPS)、收发邮件、或者是跨国企业的正常业务,它会放你过去。
- 拦截:如果它发现你的数据包指向了黑名单里的 IP(比如 Google, YouTube),直接拦掉。
- 干扰/限速:如果它看不懂你的数据包在干什么,或者发现你在用某种未知的加密协议,它可能会故意丢掉你几个包(丢包),让你用起来奇慢无比。
为什么要伪装?
GFW 拥有非常厉害的 DPI(深度包检测) 技术。它不光看你的包裹寄给谁,还会“闻一闻”包裹里的味道。
- 如果你不伪装:直接用原始的 VPN 协议(比如早期的 PPTP, L2TP, 或者原生的 WireGuard/Tailscale),这些协议的**指纹(特征)**非常明显。GFW 一眼就能认出:“哦,你在翻墙。” 然后反手就是一个封锁或限速。
- 伪装的目的:就是把翻墙流量整容成普通的、合法的流量。
常见的伪装套路:
- 伪装成网页(HTTPS):让流量看起来就像你在刷亚马逊或逛 GitHub。这就是为什么现在主流的协议(如 Trojan, Shadowsocks-libev + TLS, VLESS)都要套一层 TLS 加密。
- 现实主义(Reality):这是目前最高级的,直接借用一个真实存在的外国网站(比如微软官网)的证书来过关,让 GFW 觉得你就是在访问微软。
主流伪装协议:
- Shadowsocks-2022
- VLESS + Reality
- Trojan
- Hysteria2
- Shadowsocks
花云优惠码:ZONGZI SUN20 MOON24 251111
可以参考:毒药、茶波、Duangks 、节点猫、科学上网与机场观察、Speedcentre 、Clash 爱好者、前女友测速、杰尼龟测速、品云测速、NBA 测速联盟、Bronya 的小屋。
-
毒药
纯傻逼
-
Duangks
youtube 频道
TG 频道 30 K
-
前女友测速
TG 频道 91 K
-
海豚
TG 频道