一个解决SNI RST导致维基百科、Pixiv等站点无法访问的工具
支持的站点
从这里下载Windows一键程序,运行既可(建议关闭其他代理软件),首次使用会要求安装证书,选是即可。
pip3 install -U "accesser[doh,doq]"
如果你不需要 DNS-over-HTTPS 和 DNS-over-QUIC,则可以不用带[doh,doq]
。
然后通过如下命令启动:
accesser
对于Windows系统,默认情况下(没有指定--notsetproxy
)会设置PAC代理为http://localhost:7654/pac/?t=<随机数>
,如果没有可以手动设置。
此外,对于Windows系统,默认情况下(没有指定--notimportca
)会自动导入证书至系统,如果没有可以手动导入,请看这里(根证书可从http://localhost:7654/CERT/root.crt
获取)。
*可以使用例如pyenv来安装所需的Python版本(推荐Python 3.11+)。
启动一次Accesser后,会在 工作目录 下生成config.toml
和 rules.toml
,具体含义见其中注释,保存后重新打开程序。
Accesser是一个本地HTTP代理,默认代理地址为http://localhost:7654
,只要网络流量能从其他代理软件以HTTP代理导出就能联合使用。
以v2ray为例,可以添加一个HTTP的outbound指向http://localhost:7654
,并设置相应的路由规则,将维基百科、Pixiv等站点的流量送到这个outbound。
并在启动 Accesser 时带上 --notsetproxy
参数以避免 Accesser 设置系统代理。
此外,你还可以设置一个DNS outbound,然后编辑config.toml
让Accesser使用这一DNS。
编辑工作目录下的pac文件(如果是一键程序,可以从GitHub下载这一文件到工作目录),使要支持的网站从代理过。
然而,并不是所有站点都可以直接工作,可能需要一些调节,见如何适配站点。
时间线与后记
18年夏,通过修改 hosts 以连接被 GFW 屏蔽的维基百科、pixiv 等网站的方法突然失效。很快人们就反应过来问题的所在:SNI RST。 在这之前,修改 hosts 是一个几近于零成本的翻墙方法。突然的变化意味着翻墙成本的急剧上升。
为了重置平衡,同时抱着对更早时期红杏计划的敬佩,我翻阅了关于 TLS 的 RFC 文档,并注意到其中关于 SNI RST 涉及的 server_name
并非 "must",而是可选扩展。
经过简单测试,确认这一思路确实可行。
秉着重置平衡的想法,我制作了 Accesser,并配备了 web UI (现已移除),目的就是让一般人访问维基百科、pixiv 等网站的难度降低到 hosts 时代的水平。
尽管我仅在一个极小众论坛(现已关闭)上自荐过,一段时间后,Accesser 甚至成了中文维基社群推荐的方法。
在这之后,利用相同思路的翻墙软件/方法如春笋般涌现。不过稍微遗憾的是,他们中的许多没有做和远程服务器之间的证书校验,使得用户暴露在可能的危险中。 再往后,一些更加投机取巧,利用非标准协议的方法也有出现。
19年后,因日渐繁忙,加之坚信这一如此简单的思路很快就会失效,故停更。
22年末,契机是 Python 的协程接口日渐稳定,并出现需要的功能,我将 Accesser 的核心重写并在各位贡献者的协助下陆续更新。
Accesser 的大版本号是留予新的技术,然而出乎我的预料,现有的域前置技术在六年后仍未失效。 而另一方面,看起来天朝人民有足够的能力以维持平衡,因此 1.x 可能永远不会到来。