免翻墙上2047:phantomsocks 实测 + thphd 修改增强版

翻墙

警告:本文所列方法并不能保证你避免被网监发现,且我们无法审计源代码,风险自担。

老帖参考:

https://2047.name/t/12699

https://2047.name/t/16727


phantomsocks 原版 编译 + 测试

测试环境:上海电信(感谢某不愿透露姓名的网友)

Windows 10 x64

  1. https://github.com/Macronut/TCPioneer/releases/tag/v0.5.6,下载 tcpioneer.zip,里面有WinDivert dll和sys文件。也可以直接去WinDivert官方下载

  2. https://golang.org/dl/,下载 https://golang.org/dl/go1.17.3.windows-amd64.msi 并安装

  3. 打开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(国内可以反问) 即可。

( 由 其他人 于 1月18日 编辑 )
14 个评论
澎湖灣 凡一國自相紛爭,就成為荒場。一城、一家自相紛爭,必站立不住

GFW修補此類漏洞的難度有多大?需要幾個月,乃至幾年才能補上麼?

修改后的TCP包不合常理,会使GFW状态机紊乱,导致GFW无法正常进行SNI检测,从而也就不会发出RST包阻断连接

从“无二论坛”过来的,收藏了!

习大法

支持,希望论坛增加一个功能:图片可以直接从硬盘上传,而不是传到其它地方,再用链接形式转载

邹韬奋 虽然韬光养晦,亦当奋起而争(拜登永不为奴:h.2047.name)

@avl #174345 你觉得thphd硬盘够大么?

@澎湖灣 #174335 跟西厢计划类似,GFW算力越大,越可以处理复杂的数据包,但是由于网络流量也巨大,总有挂一漏万之忧。

这里顺便说一下,正常国家(世界上绝大多数国家)的互联网审查主要通过DNS污染和路由黑洞来解决。只有中国等少量国家才会部署GFW式的DPI系统,DPI是把互联网通讯本身当成攻击来处理的,因此非常凶残。

thphd 2047站长

@avl #174345 其实就是加图床。需要再等一些时间

@MrAnderson #174365

谢谢。我测试了你的配置中google的部分,可以正常连接google和youtube。

( 由 作者 于 11月7日 编辑 )

@thphd #174366 需要注意的是 YouTube 所用 Google Video Sever 没有可供直连的IPv4 地址。所以我对这个域名用了 sniproxy 。

这个方法其实也是西厢计划和INTANG项目的继续,我之前在《301海外跳转原理解析兼谈缓解假墙伪墙攻击勒索的多种技术手段(一)》中也提到过。

@澎湖灣 #174335 GFW当然有能力进行封锁。不过就像我在那篇文章中提到的那样,即使今后被GFW封锁,我们仍然能用SymTCP发现新的策略绕过GFW。

不过,那篇文章主要提供了客户端不做额外的操作的前提下单纯地如何从服务器端绕过GFW。如果客户端能做额外的操作,那么可以使用的方法其实有很多,甚至都不需要安装额外的程序。

比如Chrome就能强制访问某个网站时主动开启QUIC(HTTP/3)而不需要服务器发送Alt-Svc头。比如可以使用命令行(首先需要关闭所有chrome进程,否则不生效):
chrome --enable-quic --origin-to-force-quic-on=2047.name:443 https://2047.name
这样,在修改了hosts后就能直接访问2047了,不需要安装额外程序,比phantomsocks或TCPioneer方便不少。
甚至可以不需要修改hosts,直接在chrome中指定2047的IP(首先需要关闭所有chrome进程,否则不生效):
chrome --enable-quic --origin-to-force-quic-on=2047.name:443 --host-resolver-rules="MAP 2047.name:443 104.21.83.17:443" https://2047.name

大家可以试试。

( 由 作者 于 11月8日 编辑 )

@davidsky2012 #174455 雖然太高深看不懂,但是覺得很牛!

SymTCP主要作者都是中國人。合作者單位單位竟有美軍實驗室!

GFW目前對QUIC(HTTP/3)無效麼?

海盗湾革命🌈
libgen.eth 天堂应该是图书馆的模样。一个阅读诗歌的人要比不读诗歌的人更难被战胜。创造是一种拯救。创造拯救了创造者本身。

@MrAnderson #174510 大概率是ISP针对UDP无差别断流(俗称UDP被QoS)。一般短时间内UDP传输量较多或长时间UDP传输会有概率碰到。一般过几分钟就能恢复。

至少我这里使用QUIC访问毫无问题。

收到网友反馈:配置文件中的DoT (DNS over TLS) 服务器 tls://1.0.0.1:853,在联通网络和部分电信网络下无法访问,改为 tls://jp.tiar.app:853(国内可以访问) 即可。

( 由 作者 于 11月19日 编辑 )

欲参与讨论,请 登录注册