科学上网自建服务

科学上网

大部分情况下,中国网民都无需绕过“网络防火墙”(GFW)浏览墙外内容。但是对于国外的先进技术,我们需要科学上网来获取。

服务器

国外服务器的购买。这里我选择的是Vultr,对比了很多国外的服务器,这个蛮靠谱的,vultr服务目前是全英文,按时收费,

完整的中文介绍入门和购买流程;个人提醒:

  1. 选择便宜的主机
  2. 选择USA的主机
  3. 创建的时候尽量不要开启防火墙
  4. 尽量使用 ubuntu14.06系统

可能会遇到的问题:

  1. ssh连接不上,但是可以ping通。解决方法,这其实没得救了,刚开始生成的主机一般22端口是开放的,但是过几分钟就关闭了,我们需要趁着这几分钟把ssh的默认端口改成其他的4422等,这样才好使
  2. 服务器安全,尽量不要用root来登入官方推荐配置

通过以上的步骤,我们完成了一台服务器的简单使用。

shadowsocks

shadowsocks客户端启动后会在本地开启一个代理,可以理解为一个数据的出入口。用户想通过shadowsocks访问墙外网站的请求都要经过这个本地代理。

安装shadowsocks安装参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
apt-get update

apt-get install python-pip

pip install --upgrade pip

pip install setuptools

pip install shadowsocks

vim /etc/shadowsocks.json

// shadowsocks. json should contains this:

{
"server":"0.0.0.0",
"server_port":1024,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"mypassword",
"timeout":300,
"method":"aes-256-cfb"
}

// Note that the password above is the password you will use in the future, and it is not neccessary to be the same as the server password.

chmod 755 /etc/shadowsocks.json

apt-get install python-m2crypto

ssserver -c /etc/shadowsocks.json -d start

vim /etc/rc.local

// Insert this before `exit 0`:

ssserver -c /etc/shadowsocks.json -d start
exit 0

可能会遇到的问题:

  1. 先执行sudo apt-get update
  2. 提示安装pip的版本过低,需要更新pip install --upgrade pip
  3. 缺失setuptools,执行pip install setuptools
  4. perl: warning: Falling back to the standard locale ("C").”等提示错误解决方法; 可以执行export LC_ALL=C;或者参考修改LC_ALL
  5. 如果是16.0以上的ubunutu,还有提示代码错误,需要修改pip文件的源代码,可以自行查看解决方法,参考方法

客户端配合使用:需要区分客户端类型,支持安卓、iOS、mac、window、linux
github仓库组里面有对应的客户端;也可以查看列表各类型客户端;选择自己需要的。

安卓 outline

最开始以为没有对应的安卓apk,所以使用了outline来辅助,这需要在自己的服务器上执行一行代码,安装了一个docker镜像,输出一段代码,这块可能会遇到内核版本问题,需要去github上查看对应的issue;关于docker的问题
docker的issue

所以还是考虑使用官方给的安装包比较靠谱A shadowsocks client for Android;点击进入releases页面,选择自己的安卓apk包即可;比较常见的就是shadowsocks--universal-4.7.3.apk;

使用bbr加速

Google BBR是一个TCP加速优化工具,

安装BBR

Ubuntu开启BBR的前提是内核必须等于高于4.9,所以想要使用这个牛逼的玩意儿,需要先看看你的内核是否是4.9或者以上。使用bbr加速完整指南

查看命令:

1
uname -a

如果是4.9或者以上,那么恭喜你,升级内核这一步你就可以跳过了,如果在4.9以下,那就需要更新一下内核了;很遗憾我们选择的ubuntu14.04官方默认搭载的镜像,内核是3.13的,所以我必须要做一波内核升级了。

升级过程中其实比较简单,先确定你的系统是32位还是64位的,可以用下面的命令查看;

查看命令:getconf LONG_BIT;确定系统之后,需要下载必要的升级程序包
http://kernel.ubuntu.com/~kernel-ppa/mainline/

这个网站可以找到最新的程序包,根据自己的需要使用wget命令来下载到服务器;

1
2
3
4
5
6
7
8
9
10
11
## 下载内核
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9-rc8/linux-image-4.9.0-040900rc8-generic_4.9.0-040900rc8.201612051443_amd64.deb

## 安装内核
dpkg -i linux-image-4.9.0*.deb

## 更新grub引导装入程序。
sudo update-grub

## 重启机器
reboot

重启之后继续查看,执行命令uname -a,确保你实际上是在运行你更新之后的内核。

开启BBR

修改系统变量:

1
2
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

重点,执行以上命令,如果显示拒绝访问可以尝试使用如下命令

1
2
sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'

保存生效:
sysctl -p

执行:
sysctl net.ipv4.tcp_available_congestion_control

如果返回结果:net.ipv4.tcp_available_congestion_control = bbr cubic reno; 那么恭喜你BBR开启成功了!

也可以执行:
lsmod | grep bbr
来检测 BBR 是否真的开启成功……

使用docker快速搭建

由于众所周知的原因,服务器的IP或者端口port总会难免game over的。所以啊,如果每次都要重新创建服务器,然后走这一套流程,香菇蓝瘦,所以最近的docker可以很好的帮助我们来完成这个,我们自己建立一个镜像,每次运行这个镜像就可以了。

  1. 安装docker
  2. 拉去unbuntu14.04镜像
  3. 执行上面的安装shadowsocks教程里面的命令
  4. 使用docker commit、docker login、docker tag、docker push等命令进行容器的生成和上传。

利用shadowsocks-libev

shadowsocks是有好几种语言来实现的不同版本的,上文使用了Python版本【可以认为是最先推出的版本,后来大神被请去喝茶之后就删除了github上Python版本shadowsocks的相关内容,不过github上有了新的一批社区高手开始支持各个语言的版本开发,其中c语言版本就属于迭代比较快速的版本】,这里介绍另外一个版本纯C语言的版本shadowsocks-libev

步骤

来自github的wiki

  1. 购买服务器,这里使用了高版本ubuntu 19.04
  2. 获取源码shadowsocks-libev

    1
    2
    3
    git clone https://github.com/shadowsocks/shadowsocks-libev.git
    cd shadowsocks-libev
    git submodule update --init --recursive
  3. 安装shadowsocks-libev [不同版本系统操作不一致]

    1
    2
    sudo apt update
    sudo apt install shadowsocks-libev
  4. 编译源码deb Build deb package from source

    1
    2
    3
    4
    mkdir -p ~/build-area/
    cp ./scripts/build_deb.sh ~/build-area/
    cd ~/build-area
    ./build_deb.sh
  5. 配置服务和服务启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Edit the configuration file
    sudo vim /etc/shadowsocks-libev/config.json

    # Edit the default configuration for debian
    sudo vim /etc/default/shadowsocks-libev

    # Start the service
    sudo /etc/init.d/shadowsocks-libev start # for sysvinit, or
    sudo systemctl start shadowsocks-libev # for systemd [本次使用启动命令]
  6. 同样可以BBR加速, 因为shadowsocks-libev的对于系统的版本要求越高越好,所以这个使用bbr还可以避免重新安装内核的操作,更加简化。

极简使用 简单实践

那么我们个人想要科学上网,可以:

寻找一些TTMM的供应商,购买服务;

自己搭建代理服务完成科学上网【以Shadowsocks为例】;

以第二个为例,选择Vultr服务,搭建Shadowsocks代理,具体步骤:

  1. 购买服务器:https://www.vultr.com/zh/products/cloud-compute/ [韩国]

    • ssh的操作性高,官方console反应迟钝:cat ~/.ssh/id_rsa.pub 把公钥提交一下,方便后续登录
    • ssh是linux远程登录的安全协议,是 C/S 模式的架构,配置文件分为:
      • 服务器端配置文件 [/etc/ssh/sshd_config]
      • 客户端配置文件默认配置文件[/etc/ssh/ssh_config]
      • 用户配置文件[~/.ssh/config]
  2. 确认服务器可用性:https://www.toolsdaquan.com/ipcheck/
  3. 访问服务器:ssh 或者 官方提供的console
    • 修改root的密码:sudo passwd root
    • 修改ssh的port:11235,重启:sudo service ssh restart
  4. 通过ssh链接该服务器
  5. 开始部署Shadowsocks服务,以C语音的libev版本为例, https://github.com/shadowsocks/shadowsocks-libev#debian--ubuntu

    • 因为高版本Ubuntu已经有snap了,所以直接安装:sudo snap install shadowsocks-libev
    • 配置shadowsock:在/snap/shadowsocks-libev/目录下新增配置文件:config.json,参考:https://github.com/shadowsocks/shadowsocks/wiki/Configuration-via-Config-File
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      vim /snap/shadowsocks-libev/config.json
      // 内容如下
      {
      "server":"0.0.0.0",
      "server_port": 58132,
      "password":"1123581321CWJ!",
      "timeout":5000,
      "method":"chacha20-ietf-poly1305",
      "fast_open": false
      }
  6. 启动服务:

    1
    2
    3
    4
    5
    6
    # 1. 后台守护程序运行,脱离终端控制台(ss-pid文件会自动创建)
    /snap/bin/shadowsocks-libev.ss-server -c /snap/shadowsocks-libev/config.json -f /snap/bin/ss-pid
    # 2. 后台运行,但不脱离终端控制台
    /snap/bin/shadowsocks-libev.ss-server -c /snap/shadowsocks-libev/config.json &
    # 3. 前台运行 shadowsocks 服务
    /snap/bin/shadowsocks-libev.ss-server -c /snap/shadowsocks-libev/config.json
  7. 关闭服务:

    1
    2
    3
    4
    # 此命令可查看正在运行的 shadowsocks 服务的进程ID,进程名叫 ss-server 
    netstat -lptn
    # 关闭 shadowsocks 服务,xxxx 请改用你上面命令查到的进程id
    kill -9 xxxx
  8. 客户端连接:

  9. 加个速:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #修改系统变量:
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

    # 重点,执行以上命令,如果显示拒绝访问可以尝试使用如下命令
    # sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
    # sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'

    # 保存生效:
    sysctl -p

    # 执行:
    sysctl net.ipv4.tcp_available_congestion_control

    #检测 BBR 是否真的开启成功
    lsmod | grep bbr
  10. 开机自启动处理:
    开机自启动处理:

  • 写脚本:vim ss_setup.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: ss_setup.sh
    # Required-Start: mountkernfs
    # Required-Stop:
    # X-Start-Before: checkroot
    # Default-Start: S
    # Default-Stop:
    # X-Interactive: true
    # Short-Description: 使用shadowsocks
    # Description: 启动shadowsocks
    ### END INIT INFO

    # 开启shadowsocks服务
    /snap/bin/shadowsocks-libev.ss-server -c /snap/shadowsocks-libev/config.json -f /snap/bin/ss-pid

    exit 0
  • 拷贝:cp ss_setup.sh /etc/init.d/

  • 权限修改:chmod 755 /etc/init.d/ss_setup.sh
  • 设置启动顺序:
    • cd /etc/init.d/
    • update-rc.d ss_setup.sh defaults 95