安装 Shadowsocks

添加yum源后使用yum安装,安装完成后,会有ss-local,ss-manager,ss-nat,ss-redir,ss-server,ss-tunnel命令可用

cd /etc/yum.repos.d/
curl -O https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo
yum install -y shadowsocks-libev

有现成的rpm包,也可以是用rpm -ivh安装

如果安装报类似如下错误

Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
           Requires: libsodium >= 1.0.4
Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
           Requires: mbedtls

说明系统没有启用 EPEL (Extra Packages for Entreprise Linux).那么我们需要首先启用 EPEL,再安装 shadowsocks-libev

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y shadowsocks-libev

常见问题

  • 执行ss-server报错:ss-server: error while loading shared libraries: libmbedcrypto.so.0: cannot open shared object file: No such file or directory
使用 root 身份执行以下命令即可
cd /usr/lib64
ln -s libmbedcrypto.so.1 libmbedcrypto.so.0

添加配置文件

COPR 里的shadowsocks-libev默认读取位于/etc/shadowsocks-libev/config.json的配置文件,我们可以根据需要参考以下配置文件进行修改

{
    "server": "0.0.0.0",
    "server_port": 1997,
    "password": "1997sty",
    "method": "aes-256-cfb",
    "mode": "tcp_and_udp"
}
  • server : 选填,默认0.0.0.0.配置客户端时填入服务器的实际IP.0.0.0.0 表明服务端接受来自任何网络接口的连接.配置服务端时填入0.0.0.0总是能生效,而不必填入服务器自身的IP
  • server_port : 必填.需要在客户端配置时填入相同的值.此处填入服务端要监听的端口.需要选择 1024 或以上的端口号,否则启动ss-server时将会需要root权限,而默认的服务文件则是以nobody用户启动Shadowsocks的.如需选用低于 1024 的端口,也可执行命令 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ss-server 赋予相应权限,后续就可以使用nobody用户或普通用户启动Shadowsocks或执行systemctl edit shadowsocks-libev命令,并输入以下内容
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
  • password : 必填.需要在客户端配置时填入相同的值.连接服务端所需的密码,建议替换为复杂密码,避免被攻击者暴力破解.
  • method : 选填,默认 rc4-md5.需要在客户端配置时填入相同的值.服务端所用的加密方法,推荐以下几种算法:
  1. chacha20-ietf-poly1305 具有优秀的安全性,更佳的性能,属于 AEAD 加密算法,少部分客户端(如 iOS Wingy)不支持此算法;
  2. aes-256-cfb 具有足够安全性,且被各服务端及客户端广泛支持;
  3. rc4-md5 算法快速,且具有一定的安全性,适合运算能力受限的设备如路由器等.
  • mode : 选填,默认 tcp_only.服务器所要监听的协议,可填 tcp_only, udp_onlytcp_and_udp.填入 tcp_and_udp 相当于命令行上提供-u参数;填入 udp_only 相当于命令行上提供 -U 参数.

如果想要变更默认的配置文件,或者提供其他命令行参数,我们可以修改/etc/sysconfig/shadowsocks-libev.其中 CONFFILE 指定了shadowsocks-libev所读取的配置文件;DAEMON_ARGS 则指定了额外的命令行参数,此处的 -u 表示启用 UDP 协议

# Configuration file
CONFFILE="/etc/shadowsocks-libev/config.json"

# Extra command line arguments
DAEMON_ARGS="-u"

配置防火墙

CentOS7系统自带了防火墙,为了使我们的 Shadowsocks 服务器能够正常工作,我们还需要添加相应的防火墙规则.假设我们在配置 Shadowsocks 服务器的端口时填入了 "server_port": 10443,那我们可以使用以下命令.如果服务器是运行在VPS或云服务器上,则往往还需要在云服务商的控制面板中配置相应的防火墙规则

firewall-cmd --permanent --add-port=10443/tcp
firewall-cmd --permanent --add-port=10443/udp
firewall-cmd --reload

启动 Shadowsocks 服务

有了 Shadowsocks 服务端的配置文件后,我们通过 systemd 启动 Shadowsocks 的服务端服务

#启动 Shadowsocks 服务
systemctl start shadowsocks-libev
#检查服务状态
systemctl status shadowsocks-libev
#服务开机自启
systemctl enable shadowsocks-libev
#查看 Shadowsocks 服务的全部日志
journalctl -u shadowsocks-libev

配置客户端

关于客户端的配置文件,可以复制使用服务端的配置文件,并将 server 中的地址换为服务端的实际 IP 或域名,再加上关于 local_addresslocal_port 的配置即可

{
    "server": "ss.zzz.buzz",
    "server_port": 10443,
    "local_address": "0.0.0.0",
    "local_port": 1080,
    "password": "zzz.buzz",
    "method": "aes-256-cfb",
    "mode": "tcp_and_udp"
}

https://zzz.buzz/zh/gfw/2017/08/14/install-shadowsocks-server-on-centos-7/