0、前言
前段时间研究泉州白名单的时候,查资料看到不少人报告河南全省也有出现“白名单”,进一步调查发现河南并不是白名单,而是比通用 GFW 黑名单更严格的省 GFW 黑名单,使用的是经典的 SNI 阻断。
经过测试,河南的 SNI 阻断似乎是两道筛:第一道直接过滤 TLD,.al
这种国别域名、.xyz
和.top
这种被滥用严重的域名会直接阻断;第二道类似黑名单,即使是.com
、.net
等能通过第一道检测的域名,如果不能通过审查也会被阻断,这种审查可能是流量检测,是否符合某些协议的特征;也有可能是网站内容审查,判断是否出现敏感词。
1、解决方法
根据 GitHub 上的讨论1,启用 TCP Timestamps 可以绕过这种阻断。目前来看原理并不是这种方法不会被 GFW 检测到,而应该是 GFW 直接对启用了 Timestamps 的 Client Hello 直接Bypass
(这么说似乎就是暂时对这种包没办法,笑)。
启用 TCP Timestamps:
1.1、Windows
在 PowerShell 中执行:
1 | netsh interface tcp set global timestamps=enabled |
检测是否开启:
1 | netsh interface tcp show global |
如第一行的值为enabled
则开启成功。
1.2、Linux
执行:
1 | sysctl -w net.ipv4.tcp_timestamps=1 |
虽然是指令是ipv4
,但是对 IPv4、IPv6 网络同时生效。
1.3、Android
如果是安卓 13 或以上,系统已经默认开启。
在 Termux(已 Root)/ ADB Shell(未 Root)中执行:
1 | sysctl net.ipv4.tcp_timestamps |
检测是否开启,如输出值等于0
说明未开启。
执行:
1 | cat /proc/sys/net/ipv4/tcp_timestamps 1 |
或
1 | sysctl -w net.ipv4.tcp_timestamps=1 |
即可启用。
2、相关讨论
这种方法并不是万能的,概括 GitHub 上相关讨论供参考:
TCP Timestamps 选项无法绕过位于北上广 GFW 的 SNI 阻断;
TCP Fast Open可以绕过位于北上广的 GFW 的 SNI 阻断(仅测试了广州出口的IPv4和IPv6),但是 Xray 的 TCP Fast Open 仅对 Linux 有效,在 Windows 启用无效。
启用 TCP Timestamps 解决 SNI 阻断
评论