28 August 2016

如之前的一篇文章所说,我把自己用来翻墙的设施共享给了五个人。 当时我特意将人数限制为这么少,以免引起我国伟大防火墙(GFW)的注意,导致被封禁。但是,三个月不到,我还是被防火墙注意到了。

我真傻,真的。我单知道大量用户共用一个IP翻墙可能引起防火墙的注意,会被封禁;我不知道五个用户也会这样。

我翻墙用的VPN(同时还有Shadowsocks代理)架设在proxy.shengbin.me这个域名下,对应的IP地址是:128.199.225.176。先是南方用电信网的同学先反映出现了连接不上的情况,接着我在北京办公室的网络中访问也时断时续。 后来在家里也连不上了,在学校用教育网也不行了。据说通过4G来访问一直都还可以,但说不定哪天也就不行了。

我自己一个人用了一年多都没出问题,但共享出去后只稳定使用了两个多月就彻底沦陷了。现在我ping上述那个IP地址都不通了,更别说用它来翻墙了。基本可以肯定的是,GFW检测到了这个地址的异常用途,然后把它列入了黑名单。 不同的网络接入商先后都执行了GFW的政策,于是就导致了全线被封禁的结果。

这是一场战争!对方出招了,我该如何回应呢?

我所用的DigitalOcean虚拟主机有一个好处是可以很容易地销毁并重建。DigitalOcean目前还是一个良心商家,它允许使用已有主机的备份数据来重建新主机,并会为每一个新建的主机分配一个新的IP地址, 而且这些都是免费的(它只按照所有主机的运行总时长收费)。当我判断出是IP地址被封之后,我就新建了一个虚拟主机取代了原有的,并拿到了一个新分配的IP地址,然后将域名proxy.shengbin.me指向它。 由于客户端设置用的都是域名,所以无需任何改动。换了IP之后,果然就又能正常连接使用了。

但问题是:这个新的IP能坚持多久?过一段时间GFW又将检测到它的异常用途,它必然重蹈上一个IP的覆辙。更严重的是,如果GFW进一步判断出proxy.shengbin.me这个域名一直在“为非作歹”,直接把它封禁掉,就更麻烦了。 这个子域名我倒是还可以换(比如改成vpn.shengbin.me什么的),但万一把主域名shengbin.me整个封禁呢?那将是个得不偿失的悲剧。

我知道自己终究是斗不过他们的。俗话说,有再一再二没再三再四,我接下来准备这么做:现在换了第二个IP之后,仍继续按现在的方式共享使用;如果这个新IP又被封禁(这几乎是可以肯定的事),那我将停止与五个人共享这一做法。 由于DigitalOcean上可以同时运行多个不同IP的虚拟主机,我可以为需要的同学专门增加主机,当然费用就由使用者承担了。我觉得一个IP最多由两人或三人使用才可能持久。 虽无法精确判断,但可以肯定共享的人越多,越容易被防火墙注意到并封禁;而根据我的经验,一个人专用一个IP的话,基本上不会有被封的危险。该如何操作,等到时候自己决定吧。

GFW检测的大概是如下这种模式:这个IP被多个终端在多个地方连接,用来做中转访问了它认为不该访问的网站。至于具体是如何实现的,我也不是很清楚,但有国家支持,它肯定是可以做到的。 目前我们能做的,也只能是尽量避免上述模式来防止被检测到。如果被检测到,那就只能更换IP,和GFW玩捉迷藏游戏了。

据说,如https://shadowsocks.com/这样提供收费翻墙服务的商家,也是采用了如本文所述的更换IP的方式来避免多人共享的产品被封。 而据使用过这些产品的用户说,其服务也很不稳定。归根结底,用自己专属的虚拟主机来翻墙,才是最靠谱的方法。

如果需要我帮忙设立专属的虚拟主机来翻墙的话,可以联系我。使用者来承担购买虚拟主机的费用(一台机器一个月5美元)即可。然后在此基础上多给我20%的服务费?哈哈哈哈。

附录

更换IP地址时服务器端需要进行的操作

Shadowsocks相关

如果配置文件/etc/shadowsocks.json里写了旧的IP地址,将其改为新的。该文件中指定服务器的地方可以写域名,这样的话就不需任何操作了。

VPN相关

PPTP类型的VPN无需任何操作。

L2TP类型的VPN需要将配置文件/etc/ipsec.conf/etc/ipsec.secrets/etc/rc.local中的旧IP地址改为新的。 其中/etc/rc.local里主要是启动时自动配置iptables的地方(iptables -t nat -A POSTROUTING -o eth+ -j SNAT --to-source %SERVERIP%)用到了服务器IP,需要修改。 这些配置文件中需要服务器IP地址的地方能否写域名是个待验证的问题。我估计是不能,但也懒得验证了。如果写域名的话,也就无需任何操作了。

服务配置修改后重启使之生效即可。

参考

让我们一起翻墙:http://blog.shengbin.me/posts/fight-the-great-firewall

如何配置PPTP:https://linux.cn/article-3376-1.html

如何配置L2TP:https://raymii.org/s/tutorials/IPSEC_L2TP_vpn_with_Ubuntu_14.04.html