程序员必备:正确的科学上网方式
由于 GFW 的存在,大量非常有价值的国外网站在大陆无法访问,海外华人也无法访问很多大陆的站点。很多资料的获取、信息的沟通变得无比困难,这里特别指出 Github,用直连的方式经常奇慢无比甚至无法连接。每当这种时候,就会觉得自己和这个世界的连接中断了。所以,“爬墙”是每个程序员都要熟练掌握的基本技能!这篇文章就是教你如何正确的科学上网,必备工具:Shadowsocks(以下简称 SS)。
SS vs VPN
- VPN 是网络层以下的代理,SS 是应用层代理,因此 SS 支持按照规则的代理,而不是像 VPN 那样暴力的全局代理。
- VPN 没有有效的消除流量特征的手段,容易被 GFW 屏蔽,不适合翻墙。
- VPN 的服务相对来说比较贵。
对于程序员,光第一条就有充分的理由使用 SS 了,因为 VPN 没法本地调试,除非你愿意不断的开关代理。
对于执着于 VPN 的朋友,这里有一个 2005 年就开始在中国生活的加拿大人做的网站,里面提供了各种 VPN 服务商的比较。Tip for China;
自建 SS 服务器
我建议自建 SS,有多种好处:
- 便宜。
- 不用担心服务商跑路。
- 节点 IP 随心换。
- 不限设备数。
- 因为是一台云服务器,所以可以建站、可以学习 Linux、可以装杯。
云服务器推荐
这里只推荐 Vultr。便宜(5 刀每月)、按时付费(0 成本换 IP)、支持支付宝(随心买)、随时开关服务器(换 IP 方便)。
部署 SS
操作系统请选择 ubuntu 18.04,Vultr 的该版本系统默认已经安装了 Google BBR(一种 TCP 拥塞控制算法,能够减少丢包率提升网速)。
如果选择了其他版本,并且有需要的话,可以按照链接里的步骤进行手动安装:Install Google BBR and Optimize the Server
ssh 连接进入云服务器后,先安装 C 版本的 shadowsocks:
$ sudo apt update
$ sudo apt install shadowsocks-libev
然后修改配置文件:
$ vi /etc/shadowsocks-libev/config.json
// 按要求填入基本配置
{
"server":"0.0.0.0", // 必须 0.0.0.0 或者服务器 IP
"server_port":443, // SS 的监听端口,建议 443,运营商给的流量大一些
"local_port":1080, // 本地监听端口,默认就好
"password":"Passw0rd!", // 密码
"timeout":60, // 超时时间,默认就好
"method":"aes-256-gcm" // 加密方法,建议 ‘aes-265-gcm’
}
最后一步,重启服务并设置自动启动即可。
$ sudo systemctl restart shadowsocks-libev.service
$ sudo systemctl enable shadowsocks-libev.service
然后打开你的 SS 客户端,输入地址、端口、密码、加密方式即可开启科学上网之旅。
优雅地自动部署
由于 GFW 可能会屏蔽你的服务器 IP,因此当 SS 无法使用的时候,就需要创建一个新的 Vultr 实例,然后删除之前的实例(顺序很重要,否则 IP 不会变),并重复部署的步骤,繁琐,相当繁琐。
为了更美好的明天,拿出更多时间陪女朋友,自动部署就很有必要。
好在 Vultr 提供了 Startup Scripts
功能,用于在部署操作系统后执行一个 Shell 脚本,只需要把以上部署的步骤依次写在脚本里,以后每次新建实例的时候选择该脚本即可。
$ # Shadowsocks Server 自动部署脚本
$ sudo apt update
$ sudo apt install shadowsocks-libev -y
$ cat <<EOF > /etc/shadowsocks-libev/config.json
$ {
$ "server":"0.0.0.0",
$ "server_port":443,
$ "local_port":1080,
$ "password":"Passw0rd!",
$ "timeout":60,
$ "method":"aes-256-gcm"
$ }
$ EOF
$ sudo systemctl restart shadowsocks-libev.service
$ sudo systemctl enable shadowsocks-libev.service
客户端推荐
官网上的都推荐,由于需要翻墙才能打开,这里做一波搬运工:
Windows GUI Client
Windows Command-line Client
pip install shadowsocks
Mac OS X GUI Client
Mac OS X Command-line Client
brew install shadowsocks-libev
cpan Net::Shadowsocks
Linux GUI Client
- Shadowsocks-Qt5: GitHub
- Outline Linux
Linux Command-line Client
apt-get install shadowsocks-libev
cpan Net::Shadowsocks
Android
- shadowsocks-android:
- Outline Android
iOS
OpenWRT
- shadowsocks-libev
opkg install shadowsocks-libev
- shadowsocks-libev-polarssl
opkg install shadowsocks-libev-polarssl