科学上网

作者:左耳朵 http://coolshell.cn 更新时间:2018-11-29

这篇文章可以写的更好,欢迎到 https://github.com/haoel/haoel.github.io 更新

0. 序

首先,我们先明确一下,我科学上网的目的主要是为了学习、工作、交友、查资料、和丰富自己的眼界,不是为了看黄片,或是干一些非法、政治或是见不得人的事。

对我来说,科学上网很重要,下面罗列一下需要科学上网,我才能真正学习工作和生活的网站:

是的,我的互联网不是——全是骗子的百度、充满广告的微信朋友圈、质量低下的公众号、娱乐至死的新浪微博、只有抖机灵和“怎么看XX”的知乎、毫无营养的今日头条…… 在这样的网络空间里,我真的无法生存…… 这根本不是互联网,不是为我服务的互联网,而是在消费我的互联网,是让我变傻变笨的互联网…… 我不能忍,因为它影响到了我的生存……

1. 英文能力

首先,你应该对英文读写没什么问题!

为什么这么说?逻辑是这样的,如果你上了Google还是在用中文关键词,那么你科学上网有什么意义呢? 换言之,科学上网的目的是为了进入广阔的世界范围与全世界的人交流,所以,英文是必备的,如果你英文有问题,VPN过去的用处也不大。

所以,我把这个前提条件放在第一的位置,就是说—— 真正的墙不是GFW,而是人的大脑!

2. 购买VPS

然后,你需要一个VPS。

(注:当然,你也可以直接购买一些科学上网的服务,但我这里不推荐了,一方面是广告,另一方面可能会害了对方

现在你买一台VPS也不贵了,也就是一个月10美金左右(70元),我个人一个月你花70元钱不算奢侈的事,而且会让你的生活质量得得改善

2.1 常规VPS

对于VPS,下面是一些常规选项。

注意

2.2 CN2 线路

如果你需要更好更高速的网络服务(比如你要看Youtube的1080P),那么,你需要下面的这些服务器资源了(价格也会高一些)

CN2GIA 是两个关键词。CN2 GIA 全称 China telecom Next Carrier Network- Global Internet Access 电信国际精品网络,特征是路由线路上骨干节点均为59.43开头的IP。如果想要寻找接入CN2线路的国外VPS提供商,建议使用 Next Carrier Network 或者 CN2 这个关键词搜索即可。

多说一句, CN2本身又分为两种类型:

关于 CN2 线路的主机提供商,下面罗列几个

更多的可以参考这篇文章《CN2 GIA VPS主机收集整理汇总-电信,联通,移动三网CN2 GIA线路VPS主机

重点说一下,CN2 GIA + 香港机房,你会得到巨快无比的上网速度,然而,香港地区的VPS的确是有点贵了。在Youtube.com上看1080p的视频毫无压力。虽然阿里云和腾讯的也有,但是被查到的风险基本上是100%,不建议使用,被抓了别怪我没警告过你。

2.3 NCP 线路

NCP 全称 New Cross Pacific(新跨太平洋海底光缆系统)。 2018年11月底,中国到美国之间的海底光缆新开通了NCP线路,并且容量更大(系统设计容量超过80Tbps),路由更少(中国上海到美国中间路由节点只有11个,ping值110ms)。

NCP线路全长13,000公里,连接美国俄勒冈州希尔斯伯勒,连接崇明(中国大陆),南汇(中国大陆),临港(中国大陆),釜山(韩国),头城(台湾),和丸山(日本)。

相对于第二条中美直达海底光缆系统(跨太平洋快线,TPE),现阶段NCP线路的网络流量更少更稳定。特征是华东/中地区流量会经过NCP直达路由节点,IP地址为202.97.95.201/202。

关于 NCP 线路的主机提供商,下面罗列两个

3. 搭建 Shadowsocks 和 VPN 服务

3.1 设置Docker服务

首先,你要安装一个Docker CE 服务,这里你要去看一下docker官方的安装文档:

然后开始设置你的VPN/SS服务

3.2 开启 TCP BBR 拥塞控制算法

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来创建网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。该算法认为随着网络接口控制器逐渐进入千兆速度时,分组丢失不应该被认为是识别拥塞的主要决定因素,所以基于模型的拥塞控制算法能有更高的吞吐量和更低的延迟,可以用BBR来替代其他流行的拥塞算法,例如CUBIC。Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%。

BBR之后移植入Linux内核4.9版本,并且对于QUIC可用。

如果开启,请参看 《开启TCP BBR拥塞控制算法

3.3 设置Shadowsocks服务

Shadowsocks 的 Docker 启动脚本 (其中的 SS_PORTSS_PASSWD 需要重新定义一下)

#!/bin/bash

SS_PORT=1984
SS_PASSWD=MyPasswd

sudo docker run -dt --name ss \
   -p ${SS_PORT}:${SS_PORT} mritd/shadowsocks \
   -s "-s 0.0.0.0 -p ${SS_PORT} -m aes-256-cfb -k ${SS_PASSWD} --fast-open"

3.4 设置L2TP/IPSec服务

L2TP/IPSec 的启动脚本,其中的三个环境变量 USERPASSPSK 需要替换一下。

#!/bin/bash

USER=someone
PASS=password
PSK=psk_key

sudo docker run -d  --privileged \
    -e PSK=${PSK} \
    -e USERNAME=${USER} -e PASSWORD=${PASS} \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -p 1701:1701/tcp \
    -p 1194:1194/udp  \
    siomiz/softethervpn

3.5 设置PPTP服务

PPTP不安全,请慎重使用

sudo docker run -d --privileged --net=host 
                -v {/path_to_file/chap-secrets}:/etc/ppp/chap-secrets \
                mobtitude/vpn-pptp

PPTP 使用 /etc/ppp/chap-secrets 文件设置用户名和密码,所以你需要给docker容器提供这个文件,下面是这个文件的示例:

# Secrets for authentication using PAP
# client    server      secret           acceptable local IP addresses
  fuckgfw   *           whosyourdaddy    *

4. 客户端设置

4.1 Shadowsocks 客户端

对于 Shadowsocks 客户端,可以到这里查看 Shadowsocks Clients

注意

4.2 VPN 客户端

对于L2TP/IPSec,几乎所有的客户端操作系统(无论是Windows/Mac/Linux的电脑,还是iPhone/Android)都支持,你可以自行Google。

5. 流量伪装和其它方式

我们知道,你翻墙的行为,其实都是在被探测中的,因为无论你的手机还是宽带都是有需要到运营商那里开通上网账户的,所以,各大电信运营商有你的所有的上网的记录。

在Youtube上有个视频,你可以看一下 《哪种翻墙软件更隐蔽?》,这个播主实测过,SS也好,SSR也好,无论你怎么混淆,都是没用的,都是可以被抓出来的。只有V2Ray 和 Brook 可以伪装得很好。

注: 说句老实话,我其时并不想害怕别人知道自己的上什么样的网站,因为我觉得我访问的都是合法的网站,但是就今天这个局势我也没办法——为什么要让像我这样的光明正大的良民搞得跟偷鸡摸狗之徒一样……

5.1 V2Ray

V2Ray 是一个与 Shadowsocks 类似的代理软件,可以用来科学上网(翻墙)学习国外先进科学技术。

V2Ray 配合一些模块目前来说可以伪装成正常的流量。但是配置想当复杂。大家可以自己Google自己玩吧。

5.2 Brook

Brook是一个由 Go语言编写的跨平台代理软件,支持 Linux/MacOS/Windows/Android/iOS 各个平台。

服务器一行命令安装:

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/brook.sh && chmod +x brook.sh && bash brook.sh

运行 brook.sh 会出菜单项,你可以按菜单项来,主要就是设置端口号,密码。很简单的,我这里就不截图了,因为这个脚本运行起来中文菜单式的。

然后你可以在 Brook 项目的 Github 首页上下载不同平台的客户端。设置起来也很简单!

(全文完)