eternal-flame-AD / go-pixiv

Bypass SNI censorship on Pixiv with golang
Apache License 2.0
14 stars 1 forks source link

请求增加对其它网站的支持 #1

Open majiayeah opened 5 years ago

majiayeah commented 5 years ago

作者您好,请问能否增加一些功能? 比如: 1.添加自定义的网站网址(使用通配符)。 2.使用自制证书。 3.使用自定义的DNS服务器。

尤其是第一条。

万分感谢!

eternal-flame-AD commented 5 years ago

我现在知道的使用sni过滤的网站只有pixiv,能否提供一些同样可用的网站例子?如果有必要我会增加可配置的支持

eternal-flame-AD commented 5 years ago

DOH服务器可以用-e [DOH服务器地址]配置

majiayeah commented 5 years ago

您好,SNI过滤的网址有非常多。 最典型的是https://zh.wikipedia.org
大约是从2018年10月左右开始部署的。 这里: https://zh.wikipedia.org/wiki/Help:%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91 有讨论。其中提供了一种用nginx反向代理的方法,但是我经过实验,发现不容易扩展到其它网站。 (注意到 https://www.wikipedia.org 反而没有过滤。如果先访问此网站,浏览器会缓存证书,在一小段时间内可以正常访问zh站。)

还有许多其它的网站,比如: https://www.bbc.com https://www.rfa.com https://www.tumblr.com 凡是能够ping通但是又打不开的https站基本都是SNI阻断。

关于DOH服务器,能否支持本地服务器?比如指向本地用dnscrypt-proxy建立的127.0.0.1地址。

谢谢!

majiayeah commented 5 years ago

此外,在这里: https://github.com/brave/browser-laptop/issues/12235 讨论过几种应对SNI过滤的办法。 其中,安装Escape扩展到Firefox,使用起来最方便。可惜只能支持到旧版的Firefox,v32. 而且不再更新,对网站的兼容性就成问题。从长远看,这种方法肯定不好用。

我实验过,Escape扩展这种最方便,还可以自定义SNI,或者随机SNI。 您如果懂JavaScript,可以看看这个扩展的代码,也许对您有帮助。

eternal-flame-AD commented 5 years ago

关于DOH服务器,能否支持本地服务器?比如指向本地用dnscrypt-proxy建立的127.0.0.1地址。

dnsproxy的下游协议应该是明文的UDP DNS,可以考虑支持明文DNS

使用自制证书。

是使用指定的CA证书吗?可以考虑

其中,安装Escape扩展到Firefox,使用起来最方便。可惜只能支持到旧版的Firefox,v32. 而且不再更新,对网站的兼容性就成问题。从长远看,这种方法肯定不好用。

新版的浏览器都不允许扩展控制TLS握手信息了,这条路以前可以但是现在不太行了

需求值得考虑,过几天加上支持

majiayeah commented 5 years ago

dnsproxy的下游协议应该是明文的UDP DNS,可以考虑支持明文DNS

增加明文DNS有一个好处,就是在DOH服务器不能连接时能够通过其它路径获得真实DNS。目前您的程序里写的1.0.0.1的DOH,而Google的DOH已经被封,IP地址不能访问。有可能未来1.0.0.1也被封。那样的话,可以用dnsproxy来造一个本地DNS,毕竟dnsproxy能够加密连接的DNS服务器很多,不可能完全被封。

是使用指定的CA证书吗?可以考虑

是的,使用自制的CA证书。这样可以增加安全性,保证每个用户的证书都是独一无二的,避免中间人攻击。还可以在自制证书的SAN值内填入多个网站域名,这样一个证书就通用多个网站。

需求值得考虑,过几天加上支持

非常感谢您!为了解决这个SNI过滤的问题,花了好多时间,进行了大量的搜索和实验,始终没有完美的解决方案。希望能通过您的项目得到解决。