警告:本文所列方法并不能保证你避免被网监发现,且我们无法审计源代码,风险自担。
老帖参考:
phantomsocks 原版 编译 + 测试
测试环境:上海电信(感谢某不愿透露姓名的网友)
Windows 10 x64
-
https://github.com/Macronut/TCPioneer/releases/tag/v0.5.6,下载 tcpioneer.zip,里面有WinDivert dll和sys文件。也可以直接去WinDivert官方下载
-
https://golang.org/dl/,下载 https://golang.org/dl/go1.17.3.windows-amd64.msi 并安装
-
打开cmd(管理员权限)
git clone https://github.com/Macronut/phantomsocks
cd phantomsocks
set https_proxy=http://你的翻墙代理
set GOOS=windows
set GOARCH=amd64
go build -tags windivert -v
(将WinDivert dll和sys放到当前目录)
phantomsocks.exe -socks 0.0.0.0:2047 -log 3
然后浏览器socks5代理指向本机2047端口,即可直连中文维基(默认conf文件里有维基百科的域名和IP),且不会被SNI RST.
phantomsocks 工作原理
HTTPS握手时会发送明文SNI,如2047.name
或者zh.wikipedia.org
,GFW看到之后就会发送RST包阻断连接
phantomsocks在windows上利用windivert修改TCP包(在其他OS上用其他方式),修改后的TCP包不合常理,会使GFW状态机紊乱,导致GFW无法正常进行SNI检测,从而也就不会发出RST包阻断连接
phantomsocks作者提供了一个default.conf,允许用户指定每个域名的:
- IP地址,类似hosts文件(对于google等大范围IP封锁的服务,用户需要手动指定可用的IP地址,而不能依赖DNS服务器返回的结果)
- TCP包修改及发送策略(不同网站由于采用的服务器技术不同,对各种修改后的TCP包的适应性也不同)
- 解析(若未提供IP地址)时使用的DNS服务器
thphd修改增强版
https://github.com/thphd/phantomsocks
经过试用,我们发现原版phantomsocks最大的一个问题是,用户必须手动把需要解析的域名添加到default.conf中,不添加就不能正常解析,工作量很大。
为此我略微修改了phantomsocks,现在对于配置文件中不存在的域名,也会通过cloudflare dns解析,不需要再手动添加到配置文件中。详情见代码及default.conf.
- google/youtube 是大范围IP封锁,所以仍然要手动添加未被封锁的IP到配置文件中,才能直连访问。
- 所有挂在Cloudflare等CDN上的域名(例如2047.name和pincong.org),都是SNI封锁(因为封CF的IP代价太大),因此在DNS正常工作的情况下,无须更多设置便可直连访问。
为方便各位测试,提供一个预编译版本,内附配置文件和WinDivert驱动,解压即可使用。https://github.com/thphd/phantomsocks/releases/tag/initial
(管理员权限CMD)phantomsocks.exe -socks 0.0.0.0:2047 -log 3
浏览器代理指向本机2047端口,即可正常访问:
- 2047.name
- protonmail.com
- https://chinadigitaltimes.net/chinese
- github.com
在修改增强版中,未填写的域名(例如2047)的IP是用 cloudflare dns (tls://1.0.0.1:853)解析出来的。
如果您连接1.0.0.1不畅,请在配置文件中wikipedia.com=208.80.153....
行的上方手动添加2047的IP地址:
2047.name=104.21.83.17
(11月16日)收到网友反馈:配置文件中的DoT (DNS over TLS) 服务器 tls://1.0.0.1:853
,在联通网络和部分电信网络下无法访问,改为 tls://jp.tiar.app:853
(国内可以反问) 即可。