用GCP搭建SSserver

写在前面

翻墙小白一枚,按照网上的这篇用Google Cloud Platform搭建Shadowsocks服务教程 来搭建小飞机服务,但是操作的过程中踩了点坑,这里记录下在服务器上搭建的详细过程, 以备下次少踩点坑。

有关申请GCP和创建实例的步骤,这里略去,以下操作步骤基于Ubuntu 18.04.2,主要的命令语句参考用Google Cloud Platform搭建Shadowsocks服务教程

准备工作

创建实例后,点击VM实例页面中的SSH按钮,连接到服务器。

登录服务器后,先获取 root 权限:

sudo -i

更新系统:

apt update
apt upgrade

启用BBR

BBR 由 Google 开发,供 Linux 内核的 TCP 协议栈使用,具体我也不甚了解,可以简单理解为它能加速网络传输速度。

好了,启用吧。

写入配置:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf

echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

配置生效:

sysctl -p

校验:

lsmod | grep bbr

看到输出类似tcp_bbr 20480 这样的内容,则表明启用成功了。

搭建SS Server

SS Server的安装可以参考官方文档:shadowsocks.

更新软件包:

apt-get update

安装python-pip:

apt-get install python-pip

使用 pip 安装 SS server:

pip install shadowsocks

安装成功后,创建配置文件:

vi /etc/shadowsocks.json

在文件中添加以下内容:

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

这里:server_port, password对应的是之后你在Shadowsocks客户端上配置的端口和密码,请自定义。

保存文件后,启动SS server:

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

看到输出started,则表示启动成功。

但是很不幸,我执行这一步时,启动报错,显示:

undefined symbol EVP_CIPHER_CTX_cleanup shadowsocks start failed

参考这篇ShadowSocks2.8.2启动报错”undefined symbol EVP_CIPHER_CTX_cleanup”, 作者指出是由于openssl升级导致,按照文章指示,做了如下操作:

编辑/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py 文件:

【这里文件地址可能不大一样,你可以使用find找到shadowsocks/crypto/openssl.py文件】

使用 vi 打开文件,将文件中所有EVP_CIPHER_CTX_cleanup都修改为EVP_CIPHER_CTX_reset

作者在文中很贴心的指出共有两处,在第52行和111行,感谢作者的分享。

修改完成后,重新启动SS server即可。

更多SS server相关命令,参考shadowsocks wiki.

设置开机自启

创建脚本文件:

vi /etc/init.d/shadowsocks

添加如下内容:

#!/bin/sh

start(){
   ssserver -c /etc/shadowsocks.json -d start
}
stop(){
   ssserver -c /etc/shadowsocks.json -d stop
}
case "$1" in
start)
   start
   ;;
stop)
   stop
   ;;
reload)
   stop
   start
   ;;
*)
      echo "Usage: $0 {start|reload|stop}"
      exit 1
   ;;
esac

为该文件添加可执行权限:

chmod +x /etc/init.d/shadowsocks

新建shadowsocks.conf:

vi /etc/init/shadowsocks.conf

添加如下内容:

start on (runlevel [2345])stop on (runlevel [016])pre-start script
/etc/init.d/shadowsocks start
end script

post-stop script
/etc/init.d/shadowsocks stop
end script

执行:

update-rc.d shadowsocks defaults

开机自启设置完成。

如果开机自启没有成功,请检查下/etc/init.d/shadowsocks 文件,确保脚本中不存在语法错误,比如中文符号。

防火墙配置

写这个是因为当时按照教程搭建完SS server后,发现还是翻不了墙,又不知道哪里出了问题,领导帮忙debug了下,修改了防火墙规则,问题解决。

在GCP 主页中,选择菜单 VPC 网络 =>防火墙规则创建防火墙规则:

查看日志

less /var/log/shadowsocks.log

如果日志上没有访问记录,可以考虑查看防火墙状态:

ufw status

或者查看端口情况:

netstat -anp

判断问题出在哪里。

参考:

用Google Cloud Platform搭建Shadowsocks服务教程

ShadowSocks2.8.2启动报错”undefined symbol EVP_CIPHER_CTX_cleanup”