利用域前置技术绕过GFW
文章目录
前言
在一些特殊的时期,你的科学上Internet服务不好用时,但又要下一些github上的东西或想上Pixiv时,这篇文章或许对你有所帮助。
原理
HTTPS(更准确来讲是TLS)有一个扩展,使得在Client Hello阶段,浏览器会向服务器明文发送要访问网站的域名。而GFW根据这一原理对特定的SNI进行阻断,这就是俗称的SNI阻断。更多的可以去看:维基百科
而域前置(Domain Fronting)技术,就是利用有的服务器不验证SNI的这一特点,给GFW和服务器一个假的SNI。因为GFW没有私钥,只能通过SNI和IP判断你要访问的网站,而假的SNI就能欺骗GFW。但服务器本身有私钥,解开后,服务器是通过HTTP请求头判断你要访问哪个网站的。(但注意,特殊的比如虚拟主机、Cloudflare免费版等能在一个IP上部署多个证书的,是一定要SNI的,否则会出错。这种唯一的绕过办法就是ESNI,如果有空的话,以后再讲)因此可以通过这种方式绕过GFW的SNI阻断。
一些已经完整实现的开源项目
bypass-GFW-SNI/main和他的Socks5版本bypass-GFW-SNI/proxy
mashirozx/Pixiv-Nginx 注:这个是利用Nginx反向代理时不支持SNI达到目的
教程(以Bypass-GFW-SNI + DNSCrypt-proxy 为例)
如果觉得教程困难的话,可以去评论区下载已打包好的配置文件与程序
Step1.去项目的Release页面下载已编译好的文件
Bypass-GFW-SNI 还有 DNSCrypt-Proxy
注:可能最新版本与本文有一点差异,但大致上方法都是相同的。
Step2.配置DNSCrypt
设置fallback_resolver,即回落DNS为你运营商的DNS,比如114.114.114.114:53(:后面的是端口号,一般情况下DNS都是用UDP53端口的)
设置netprobe_address,即网络检测地址为国内能访问的地址,比如114.114.114.114:53
把[sources]里的全部删掉或在前面加#号,因为raw.githubusercontent.com这个域名已经被SNI阻断了,这段留着,打开DNSCrypt可能会很慢。
在[static]里填上
|
|
将listen_addresses 改为127.0.0.1:5353(因为53端口要给Bypass-GFW-SNI用)
server_names调整为[‘Adguard-DNS-DoH’, ‘Cloudflare-DNS-DoH’] 保存dnscrypt-proxy.toml,双击dnscrypt-proxy.exe运行。如果黑色的窗口一直在,就说明没有问题。
Step3.配置Bypass-GFW-SNI
这个配置十分简单,具体的可以去看看程序自带的帮助,如果是懒人包的话双击MITMCA.crt先导入证书(不会的Google如何导入根证书或看这里把CA.crt换成MITMCA.crt就是了),同目录下的MITMCA.key是CA的私钥(不信任我的,自己去Google一下OpenSSL创建CA),运行StartProgram.bat,把电脑的DNS改成首选127.0.0.1,备选为空(不会的也请Google如何修改DNS或看这里)。用浏览器打开https://www.pixiv.net,Done。
注意事项
有的网站比如Twitter、Google这类大型网站大多为IP黑洞,上述方式是没有用的。通常被SNI阻断的网站,也有DNS污染。请配合下面的其中一个:DNSCrypt、DNS over HTTPS(DoH)、DNS Over TLS(DoT)使用。个人比较喜欢DNSCrypt-proxy和AdGuardHome。其中Adguardhome对小白来说比较友好。
附录
|
|
文章作者 Gulut
上次更新 2020-05-31