Jade Dungeon

科学上网

设置全局代理

方法一:通过代理的方式,一步搞定,如果你有代理,那么一定是这么玩的。

export ALL_PROXY=socks5://127.0.0.1:1080

测试一下TCP成功到达谷歌服务器,就说明咱们终端的TCP已经走代理了:

tcptraceroute www.google.com

方法二:这个方法不一定靠谱了,很早以前的玩法,这里不推荐大家尝试。

第一步:去这个网站查询3个域名对应的IP地址,不能用ping来获取IP地址哦

https://www.ipaddress.com/

第二步:在/etc/hosts文件中添加类似下面的3行

192.30.253.113  github.com
151.101.185.194 github.global.ssl.fastly.net
192.30.253.120  codeload.github.com

第三步:重启网络

sudo /etc/init.d/networking restart 

现在可以飞快的下载Github上的代码了。注意:静态IP经常会发生变化,下载Github代码之前, 请先检查一下IP地址对不对,保证每次都是最新的地址。如果发现下载速度仍然很慢, 请考虑通过阿里云香港vps下载,速度会达到10M每秒,就是阿里云vps服务器有点小贵。学习的成本 omz~

一行命令

如何一行命令自建一个IPSec/L2TP的VPN?首先,找一台国外的VPS,装个最新版的Ubuntu/CentOS,然后执行:

docker run -d -p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp -e PSK=共享密码 -e USERNAME=用户名 -e PASSWORD=密码 siomiz/softethervpn 

体验GFW

一位信息安全专业人员首次访问了中国,获得了防火长城的第一手经验,发现防火长城能使用机器学习识别流量模式。他在博客上描述了他的经历:他预加载了Google地图,结果发现由于中国的GPS飘移问题地图根本就没有用;为了绕过防火长城,他在宾馆首先设立了SSH隧道,在笔记本上连接美国数据中心的一台服务器,结果前几分钟还行,后几分钟就出现了严重的丢包问题;他在服务器上运行一个Web代理,利用SSH端口重定向访问代理,结果和SSH隧道相同,几分钟后又出现丢包;他改用TLS连接直接访问代理,这一次可以成功访问很长时间,但当他通过代理访问HTTPS网站后防火长城探测到了代理,丢包问题再次出现;他进行了一番实验,确认防火长城能利用TLS的旁路泄露观察数据包特征识别代理服务器,于是利用随机填充修改请求和握手中间发送的数据包大小,结果显示可以正常浏览被审查的HTTP和HTTPS网站,关闭随机填充丢包问题则会立即再现。作者称,防火长城现在利用了机器学习算法自动的学习、发现和屏蔽VPN和代理。他在手机上使用了一个中国可以正常访问的VPN服务ExpressVPN,发现它的Root CA证书使用的是1024位RSA算法加密,而如此长度的RSA密钥中国政府有能力破解,他怀疑中国政府已经这么做了,并利用破解的密钥监视部分用户。他疑惑为什么中国没有屏蔽ExpressVPN。

目前热门科学上网方式介绍及优缺点简评

科学上网主要有两大类:「翻墙」和「穿墙」。「翻墙」主要方式是代理、VPN,需要国外代理服务器,「穿墙」则是读懂GFW的特性,使用特殊方式使得GFW的屏蔽失效。

「翻墙」受代理服务器连接速度的制约,一个日本代理对于东部沿海城市,一个香港代理对于南方城市来说一般速度较好,而最为常见的美国代理往往速度堪忧,毕竟在地球另一边。

而「穿墙」混淆了GFW使得它无法无法屏蔽你的连接,是直连站点的服务器了,通常速度较好,但毕竟能「穿」的站点有限,许多站点光「穿墙」是不行的,因此有许多科学上网工具采用了「穿」、「翻」结合的方式。

穿墙:

1、hosts

原理:GFW的封锁策略中,对启用了cdn的站点不可能进行简单的封IP策略,多采用劫持、污染DNS记录、HTTP阻断、HTTPS干扰等各种方 式,个别IP被封锁也是有的。Google、facebook等这类站点,通过DNS查询获取的IP通常位于香港或者美国,而这些IP有不少要么被封、要 么速度慢,有的干脆GFW没封锁你也连不上,而修改hosts,就是将这类站点的域名,指向国内服务器、或者国外没有被封、速度尚可的服务器。这样就可以 直接避免了GFW的干扰完成「穿墙」。

优点:「穿墙」速度较好,对于google部分站点,是有国内服务器的,甚至可以获得更快的速度。

缺点:google、facebook这些站点通常服务器非常多,采用了CDN,本来通过DNS查询后会连到他们的CDN服务器上,再根据你的地理 位置、服务器状态等情况为你跳出一个相对优质的服务器。然而hosts只能选择固定的服务器,你会发现有些网络条件下,诸如smart hosts之类的列表中的IP很多根本就ping不通,导致你无法连接某些服务器,而且不同ISP,不同地区,情况都不同。加上这些服务器老在变,你必须 经常更新你的hosts,否则哪天可能网站就上不了了,非常的不便。导致一个hosts难以解决全国各地的需求。

2、流量混淆

原理:其实是加密的一种,只不过这种加密会导致流量所使用的协议都会变得难以分辨,使得GFW无法识别你是使用了HTTPS还是OpenVPN还是 说其他的协议类型。局限性较大,需要服务器支持,通常与其他翻墙类科学上网方式相结合,达成防GFW阻断的功能,不单一使用,不再赘述。

3、加密协议

原理:使用加密的协议来进行数据传输,通常针对GFW的关键字审查。加密后的数据GFW无法进行关键字审查,从而避免GFW的连接重置阻断。网页服 务通常使用HTTPS协议(SSL加密),而其他软件不少也有自己的自定义加密连接协议。常见的例子是使用 https://www.google.com/ 来进行搜索避免搜索某些敏感关键字时候遭遇连接重置,类似的还有维基百科。chrome浏览器可使用hsts功能强制开启站点的https。

优点:非常直接的穿墙方式,同样是直连,如果能连上的话,速度有保障。

缺点:局限性较大,一是服务器可能不支持HTTPS,二是GFW会特殊照顾一些名气较大的站点,这些站点你开了HTTPS照样会被阻断。

翻墙

1、普通HTTP/socks代理

最常见的代理方式了,利用HTTP,socks等方式进行代理,应用非常广泛,远不止科学上网领域。然而这种连接方式未经加密,依然会遭遇连接重置,基本是完全暴露给GFW,不适合目前的网络环境,随时可能挂掉。

2、变式HTTP/socks代理

这是目前主流的翻墙方式,使用自家协议防止GFW简单识别代理协议并阻断,并且可以使用AES等加密方式加密流量来进行代理,比较出名的有goagent和shadowsocks。

goagent比较特殊,利用Google App Engine(GAE)来做代理服务器,利用了GFW不可能封杀GAE但GAE却可以直连被墙站点的特性。GAE的特性也决定了其速度相当不错,而 goagent封装的代理数据包在多数地区就算未加密也没有收到干扰可以无障碍通讯。部分地区可能需要加密数据。

优点:使用谷歌服务器代理,速度快,较稳定。通过代理上网的用户可以配置二级代理也可以翻墙。

缺点:部署略繁琐,受限于GAE,HTTP代理没有问题可是不能实现HTTPS代理,只能采用了伪HTTPS代理,导致必须导入其根证书。安卓下的客户端不是很好用。看网页尚可,其他应用用了自己协议的就有很多无法代理了。

而shadowsocks则是一款轻量级socks5代理,在安卓机子上很出名。使用Linux服务器做代理,必须有国外代理服务器,手机版提供了一个公共代理,速度尚可。

优点:使用完整Linux服务器代理而不是GAE这种功能受限的Web host,shadowsocks可以完整代理你所有类型的流量。跨平台,主流操作系统均有支持的客户端。

缺点:受限于代理服务器的连接速度,除非你使用离你所在地距离较近的国外代理服务器,否则速度上很难达到goagent的速度。

3、混合式代理

这类的代表就是fqrouter,穿墙加翻墙,用到了上面提到的所有方式。穿墙用了流量混淆和类似hosts的技术,翻墙则混用了goagent和 shadowsocks,能走goagent的走goagent,HTTPS之类的不能走的走shadowsocks。fqroutwr不使用 goagent的伪HTTPS代理。

fqrouter提供了不少公共goagent和shadowsocks代理,并智能判断是否走代理,能直连的直连。简单易用。你也可以添加自己的代理,goagent、shadowsocks、其他HTTP代理都可以添加

优点:混用多种方案,可解决大多数被墙网站,速度较快,稳定

缺点:方式较复杂,虽然效果好但耗电量会大些;只有安卓版;客户端不支持二级代理,可能需要借助第三方软件才能实现。

当然,通过对代理管理软件的配置,自己也能配置出混合代理方式。见这篇文章 https://cokebar.info/archives/191

4、VPN

这个算是终极方案了,在代理无效的情况下,利用VPN技术进行翻墙。

优点:如果连接没有问题,几乎可以解决任何被墙站点的访问问题。

缺点:许多VPN只在Windows/Linux下有客户端,对于android、ios的支持不是很好。

GFW对于VPN的封杀无时无刻不在进行,最典型的就是GFW早已可以准确识别OpenVPN,原理是利用协议在握手阶段的某些特征来检测,从而可 以达成瞬间阻断OpenVPN连接,很有可能你连第一次连接都连不上就被检测到了。而且这还没完,你胆敢用OpenVPN的后果,就是服务器IP立马被照 顾,所有不能被识别的加密流量均会被阻断。我就尝试在自己的VPS上部署了一次OpenVPN,然后连不上,接着第二天发现自己部署在VPS上的 shadowsocks也连不上了。能连上的加密协议只有SSH、HTTPS(SSL)这类,无奈最终换IP,还好提供商的snapshot功能很好用, 很快就搞好了。

所以现在使用VPN,不能使用原生的OpenVPN。必须使用变式的OpenVPN或者其他类的VPN软件。比如说给流量做混淆,再比如使用GFW目前无法识别的VPN,比如:SoftEther VPN(见这篇文章)

VPN很多都是收费的因为要购买服务器,而且很多都是美国VPN速度不怎么样。收费VPN也购买过一些小公司搞的便宜的VPN,网络质量多数不是太好,速度一般,国外有不少大一点的VPN提供商,质量好些但是普遍都比较贵。

而免费的VPN里,VPN GATE是个不错的选择,全球分布式VPN,速度很快。也有人用地下铁之类的,我没用过不知道怎么样,不做讨论了。

GFW对于VPN是坚决封杀的,目前引入的流量检测技术,识别流量类型,导致很多VPN都跪了。加之目前的「有罪推定」这一蛋疼的方式,导致一切加 密手段都变成了浮云。无论你使用多复杂的加密手段都没用,GFW会认为所有他认不出来的加密浏览都是「犯罪嫌疑人」,并对这些流量进行监控。如果满足一定 的条件,GFW将会判定「罪名成立」并处「暂时截断所有不能识别的加密浏览」等类似处罚,也就是「死缓」,如果屡教不改者判以「死刑立即执行」,予以永久 封IP处罚。

总之能代理就先代理,代理不行再挂VPN,VPN要少用,万一被检测出来,后果很严重。。说不定你花钱买的VPN就这么跪了,钱就白瞎进去了。

proxychains

装了Proxychains,解决了命令行下sock5代理问题。连不上时, 只要在命令前加proxychains4就行了,比如

sudo apt-get update

改成

sudo proxychains4 apt-get update