启用 TCP Timestamps 解决 SNI 阻断

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 中执行:

PowerShell
1
netsh interface tcp set global timestamps=enabled

检测是否开启:

PowerShell
1
netsh interface tcp show global

如第一行的值为enabled则开启成功。

1.2、Linux

执行:

Bash
1
sysctl -w net.ipv4.tcp_timestamps=1

虽然是指令是ipv4,但是对 IPv4、IPv6 网络同时生效。

1.3、Android

如果是安卓 13 或以上,系统已经默认开启。

在 Termux(已 Root)/ ADB Shell(未 Root)中执行:

Bash
1
sysctl net.ipv4.tcp_timestamps

检测是否开启,如输出值等于0说明未开启。

执行:

Bash
1
cat /proc/sys/net/ipv4/tcp_timestamps 1 

Bash
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 阻断

https://blog.tsinbei.com/tw/archives/1361/

文章作者
Hsukqi Lee
发布于

2023-09-24

修改于

2023-11-19

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
9 条

xiaonuo

xiaonuo

河南用户在此,真的很不幸。我用的top域名,现在除了更换域名外,没有别的方法了吗?

  回复

Hsukqi Lee

Hsukqi Lee 作者

文章中的方法有用户反馈已经失效。除了换域名、去申诉之外,就是等,我的*.tsinbei.com就是等了一段时间就被放出来了

  回复

hjr77543

hjr77543

如果是网站的话,开启TCP Timestamps 是否有用呢?

  回复

Hsukqi Lee

Hsukqi Lee 作者

只有在客户端开启有意义

  回复

chancat

chancat

所以,我也正是在犹豫要不要开启tfo,和timestamps.。不开怕被干,开了又担心有副作用和性能折损,我用的reality ,mux都没敢用,坐标江苏,比河南福建稍微好一些。。。.
额咋回事?刚提交一次评论点发送直接无了。。

  回复

Hsukqi Lee

Hsukqi Lee 作者

目前来看没有什么副作用,福建reality可以稳定连接,但是由于要到伪装网站获取client hello,有的时候速度会受影响。
评论发送没掉了可能是ajax问题(不应该啊,我前段时间修复了)或者是评论自动未通过自动审核,等待人工审核中。
我看是后一种,因为你发了两条评论:)

  回复

DNShunter

DNShunter

文中描述的突破方法是在访问端部署还是服务端部署?

  回复

Hsukqi Lee

Hsukqi Lee 作者

客户端

  回复

kong

kong

这篇文章真的很有价值,非常感谢作者的分享

  回复