Across the Great Wall, we can reach every corner in the world

科学上网估计是每个搞 IT 的人必须要掌握的知识了。简单讲讲我目前使用的一些方法。

国外服务

首先肯定需要先有个国外的资源,比如买专业的 vpn ss 服务等。数据经过第三方都不一定那么可靠,我的主力邮箱在 gmail,可不想被攻破,所以我选择了自己购买和搭建服务。

我买的是 linode 的服务,最便宜的是 10$ 一个月。也可以买一些美国的 kvm 或者 zen 的虚拟机,有比较便宜的一个月可能才不到 1$,当然这种便宜的一般很快就会卖没,得看运气。我的 linode 是和 3 个基友一起合租的,这样大家每个人一年也就 300 来块钱,也就一顿海底捞(我这两年非常喜欢用饭钱来衡量消费,吃饭可是天天都有的,但是有些消费,比如买软件,买服务这些一般都是一年或者几年才一次,比起吃饭真的便宜多了),一般都能承担的吧。

早期我买过一些 ssh 服务,速度不稳定,因为很难限制超售。后来还买过云梯,他们提供的节点比较多速度还不错。

有了 vps 搭一个 ssserver 就是很简单的了,就不多说了。服务器上面我还配置了 ocserv 这个支持 cisco 客户端的 vpn 服务。当然并不是所有 vps 都支持,有的 vps 没有 tun 设备,跑不起来,买的时候要注意。

ssh 方式

使用 ssh 方式的时候,最早是直接 ssh 链接弄一个 socks 端口给本地,然后本地使用 pac 配合。

后来有段时间被断的不行,就试了 stunnel,可以把 ssh 转为 https 服务,这样就可以跑在 443 端口了,和其他 https 服务比较难区分。可以起点作用。

这个方式没法支持手机。

使用 ngx

有段时间还使用 hosts 文件加 ngx 反向代理还翻墙。ngx 上面配置 google.com 和 twitter.com 的反向代理,然后手机或者电脑上面配置 hosts 指向 ngx。就可以实现翻墙了。不过因为都是 https 的网站,所以服务器上面得配置 https 的服务,证书得弄到电脑或者手机上面信任才行。

这个手机想要支持的话,ios 比较麻烦,必须得越狱。

vpn 方式

早期用 vpn 方式的时候,pptp 可以搭配 chnrouts 来实现国外和国内走不同的路由。用起来也不错,不过问题是全局的有时候切换也不方便,并且有时候还需要连公司的 vpn 路由一乱就麻烦了。

pc 上面选择比较多。手机上面,试过 anyconnect,缺点就是全局翻墙(我试过让 server 只 push fb twitter 的路由,但是维护麻烦,效果也不好)。anyconnect 比较赞的地方是他的链接 cookie 可以设置比较长的有效期,这样网络切换什么的临时断开之后自动重连也不需要输入密码。哦,当然,我的 anyconnect 和后面提到的 openvpn 都是通过自己签的证书来认证的,也不需要输入密码。

后来用过 openvpn,openvpn 是基友维护的。他的思路很赞。

他买了一台 server 放家里,家里是联通 adsl 24h 联机,然后 server 上面跑一个 openvpn 的服务器端给手机连接用,服务器上面再通过 vpn 和 vps 的 vpn 链接,同时这机器配置只有国外路由才走 vps,国内都是直接链接。大概链路就是 手机 -> 家里的 server -> vps。如果是国内的网站,就直接通过家里的 server 访问了,比国外的 vps 访问速度快。

这个方法还有好处是有时候一些公开的场合链接一些 wifi 的时候,很不安全,而通过 vpn 之后,数据都是加密的,就安全多了。我在 surge 之前,在 hosts 不能用之后,基本都是用这个和 anyconnect。

使用 ss

开始使用 ss 的时候,是使用 goagentx (貌似已经比较难找到下载了)的,这个工具异常好用,支持切换全局还是使用 pac 非常方便。pac 推荐使用 genpac 来维护 pac,放到 dropbox 里面就可以四处用了。

我有相当长一段时间都是这么翻墙的。直到后面 ios 9 放开网络权限之后,出来了 surge。surge 现在卖的太贵了,不建议购买,最近好像看到有一些新的软件也在出现,可以考虑。

surge 出来之后,ios 基本就是用这个了。

surge 也有 mac 版本。如果没有,使用 ss mac 版本也可以,搭配 pac 可以做到透明。

应对不稳定的网络情况

家里是联通 adsl,链接我的 linode 一直都比较稳定,速度不错也没有丢包。公司访问 linode 有时候丢包比较严重,不过也将就用了。去年去长沙出差,那边完全访问不能把我搞的很痛苦。回来就开始琢磨怎么搞。

上面基友的思路提醒了我,就是自己家里一台 server 建长链接,然后在外面翻墙先连家里。但是家里的路由器完全不能定制,后来发现我的群晖的 nas 可以装 haproxy,就搞定这个事情了。在路由器上面映射一个端口给群晖,群晖上面跑 haproxy 转发到 linode。给路由器弄了个 ddns,在外面翻墙都连接这个 dns。

群晖上面跑 haproxy 还不影响硬盘休眠,还挺不错。这样就彻底解决了我翻墙的问题了。

但是遇到家里停电断网就虾米了。。

家里的全局翻墙方案

前段时间换了 Netgear R6300v2,才发现我之前错过了好多好玩的东西。刷了个国内论坛定制的梅林 rom,自带了 ss 客户端,并且配置的非常完美,支持多种翻墙策略,具体就不细说了。就说现在的效果吧。

直接映射了端口到 linode 的 ss,并且也支持 ddns(我用的 3322 的),这样 nas 上面的 haproxy 就彻底可以不用了。

路由器跑了 ss 客户端,加 redsocks2 和 dns2proxy,实现了国内网站直连,国外根据域名匹配到列表里面的服务器通过 ss 链接。这样家里所有的终端,不需要跑任何服务,就可以无缝翻墙了。我的 ps4,apple tv,ipad 上面的 yotube 都可以访问了。然后还支持黑名单,我把 nas 加进去了,防止使用 bt 下载的时候跑到国外流量。

这样我目前手机和 mac 都是直接通过 surge,国外流量通过 3322 的 dns 先链接到路由器,然后转发到 linode 实现翻墙。

目前唯一的问题

mac 版本的 surge,还不能自己配置网络,这样临时想关掉代理的时候,就比较麻烦,得去网络配置里面关。也不能很简单的配置让全部流量走 proxy,有时候需要测试下什么的,就比较麻烦。所以我现在有时候还会使用 goagentx 辅助一下。