基于底层原理的办法是使用操作系统自带的一个路由器追踪的软件/命令,Windows 下是 tracert,而 Linux 下是 traceroute。
输入命令加上网站域名就能显示经过的路由器呈现的路径,如果网站被 GFW 封锁了,那么路径会在某个地方无限超时,或者被解析到 FaceBook 的 IP。
如果要进一步确定是否有 DNS 污染,那么可以使用系统自带的查询DNS记录的软件/命令,全平台都能使用 nslookup,不过 Linux 更流行使用 dig。
该命令能查询域名记录,如果没有解析,或者解析出的 IP 地址是错误的,那么就说明 DNS 被污染了。
一般解析错误的 IP 是 FaceBook 或者其他的科技公司。
如果使用未被污染的 DNS 能够登录该网站,那么说明没有封锁 IP,由于现在大多数网站都使用第三方 CDN,所以封锁 IP 有效性越来越少了。
关于 SNI 阻断,测试的方法是使用全平台均支持的 curl 命令,使用以下的两条命令,就能测试维基百科是否遭受到 SNI 阻断。
curl -v --connect-to ::www.kernel.org: https://www.wikipedia.org
curl -v --resolve 'www.wikipedia.org:443:91.198.174.192' --connect-to ::www.wikipedia.org: https://www.kernel.org
www.kernel.org 是一个未被封锁的网站,只要支持 https 且未被封锁的网站都能作为常量参与这个测试。
第一条命令的原理是连接到 www.kernel.org,但尝试使用维基百科的 SNI 进行 TLS 握手。
第二条命令的原理是与维基百科进行 TLS 握手时尝试使用 www.kernel.org 的 SNI,并且使用 --resolve 选项跳过 DNS 解析,以防止 DNS 污染的干扰,你也可以使用加密无污染的 DNS,如 DoH 等技术。
如果第一条命令未能完成握手,第二条命令完成了握手,那么就表明受测试的网站遭受到了 SNI 阻断。
参考资料
如果该指南有任何遗漏、错误,请帮忙指出,我一定虚心接受并改正。
我的PGP公钥 ECFAD774868C9AD1A7FD726C06A8C9E815B31245
2021-01-23T00:00:00Z