翻墙软件Shadowsocks-libev服务端设置

要利用 shadowsocks-libev翻墙,首先要有一台国外的服务器安装并运行shadowsocks 服务端。如果还没有服务器,可以到业界著名的 Digital Ocean 购买一台SSD虚拟服务器VPS,全SSD硬盘,速度极快

Ubuntu安装 shadowsocks-libev服务端

for Debian 9("Stretch"), unstable, Ubuntu 16.10 and later derivatives:

sudo apt-get update
sudo apt-get install shadowsocks-libev

for other versions:

#Add GPG public key:
wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add -

# Ubuntu 14.04 or above
sudo add-apt-repository "deb http://shadowsocks.org/ubuntu trusty main"

# Debian Wheezy, Ubuntu 12.04 or any distribution with libssl > 1.0.1
sudo add-apt-repository "deb http://shadowsocks.org/debian wheezy main"

sudo apt-get update
sudo apt-get install shadowsocks-libev

Ubuntu 16.10上确认shadows-libev已经运行:

sudo systemctl status shadowsocks-libev

上述命令的效果:

  • 安装ss-local ss-redir ss-server ss-tunnel...到 /usr/bin
  • 启动文件 /etc/init.d/shadowsocks-libev
  • 配置文件 /etc/shadowsocks-libev/config.json (旧版是/etc/shadowsocks/config.json)
  • 一些默认启动配置 /etc/default/shadowsocks-libev (旧版是/etc/default/shadowsocks)

编辑shadowsocks-libev配置文件

sudo vi /etc/shadowsocks-libev/config.json

改成类似如下:

{
    "server":["[::0]","0.0.0.0"],
    "server_port":1098,
    "password":"killgfw",
    "method":"chacha20-ietf-poly1305",
    "ipv6_first":true,
    "dns_ipv6":true,
    "fast_open":true,
    "timeout":600
}

简要解释如下:

  • "server":["[::0]","0.0.0.0"]

    监听本机IPv6和IPv4地址

  • "server_port":1098

    shadowsocks-libev 服务端 ss-server 监听的端口

  • "password":"killgfw"

    shadowsocks-libev客户端加密通信的密码,有以下几个要求:

    • shadowsocks服务端和客户端密码必须一致
    • 密码长度不少于6位
  • "method":"chacha20-ietf-poly1305"

    加密算法,详见 Shodowsocks不同加密算法的区别

  • "fast_open":true

    一种加速数据传送的优化,必须要设置好才能启用这个选项。如果没有设置过,值先改成 false

    详见 Ubuntu OpenWrt 开启 TCP Fast Open (TFO)流量加速

防火墙 ufw 设置

ufw 是Ubuntu设置防火墙的工具,查看 ufw 是否已经启用:

sudo systemctl status ufw

Digital Ocean 创建 VPS 后,默认没有启用 ufw,可以这样启用:

sudo ufw enable

启用了ufw以后,那么要用如下命令开放server_port,注意把下面的1098换成你的实际端口:

sudo ufw allow 1098

查看 ufw 状态

sudo ufw status

查看 ss-server 监听的端口:

netstat -lnp

你可以给 ss-server 启动参数加上或去掉 -u 运行 netstat 命令看看区别

给 shadowsocks-libev 创建 ufw profile

我们也可以换一种方式开放 1098 端口 给 shadowsocks-libev 服务端 ss-server

$ cd /etc/ufw/applications.d/
$ sudo vi shadowsocks

# add lines
[shadowsocks-libev]
title=shadowsocks-libev
description=shadowsocks-libev server
ports=1098/udp|1098/tcp

然后我们可以这样给shadowsocks-libev添加防火墙规则:

$ sudo ufw allow shadowsocks-libev
Rule added
Rule added (v6)

$ sudo ufw status verbose | grep 1098
1098/udp (shadowsocks-libev) ALLOW IN    Anywhere
1098/tcp (shadowsocks-libev) ALLOW IN    Anywhere
1098/udp (shadowsocks-libev (v6)) ALLOW IN    Anywhere (v6)
1098/tcp (shadowsocks-libev (v6)) ALLOW IN    Anywhere (v6)

更加清楚地显示了谁监听在什么端口

如果前面已经运行了 sudo ufw allow 1098 可以这样删除重复规则:

sudo ufw delete allow 1098

再用 netstat 命令查看一下 shadowsocks-libev 监听的端口:

$ sudo netstat -lnp | grep ss-server
tcp        0      0 0.0.0.0:1098            0.0.0.0:*               LISTEN      2414/ss-server
tcp6       0      0 :::1098                 :::*                    LISTEN      2414/ss-server
udp        0      0 0.0.0.0:1098            0.0.0.0:*                           2414/ss-server
udp6       0      0 :::1098                 :::*                                2414/ss-server

控制shadowsocks-libev的方法

在Ubuntu 16.10上安装shadows-libev后,默认已经随机启动了

sudo service shadowsocks-libev restart
sudo service shadowsocks-libev start
sudo service shadowsocks-libev stop

查看ss-server是否已经启动并且带有 -u启动参数

ps ax | grep ss-server

如果启动正常,返回结果类似如下:

/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -u

注意其中有-u。如果shadowsocks客户端启用了udp relay, 而服务端启动时不带-u参数,翻墙自然就失败了

相关资源: