CentOS7 下安装 Shadowsocks 服务端

安装个 Shadowsocks 给新买的隧道用。


1、配置 repo 仓库给后面 YUM 安装使用
注:原仓库已经删除,现在只剩备份仓库,使用的 repo 源是备用仓库中 README.md 中记载的,应该是可信的,并且我参考大量的教程也均使用的是这个地址,如果你还是不放心请在代理专用服务器上安装。

cd /etc/yum.repos.d/
# 配置 repo 仓库
curl -O https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo

2、YUM 安装
执行:

yum install -y shadowsocks-libev

测试下是否安装成功:

ss-server

测试

3、配置
默认配置路径为:/etc/shadowsocks-libev/config.json

vi /etc/shadowsocks-libev/config.json

默认的配置如下:

{
    "server":"127.0.0.1",
    "server_port":8388,
    "local_port":1080,
    "password":"mypassword",
    "timeout":60,
    "method":"chacha20-ietf-poly1305"
}

参数的解释(连接用的客户端简称为小飞机):

参数 解释 样例 效果
server 和 Nginx 的 server 差不多,解析来自指定 IP 或域名的流量。 example.com 只解析来自 example.com 的流量,连接时小飞机也配置同样的域名。
server_port 服务端启动在的哪个端口。 18388 小飞机配置连接本服务器时的端口。
local_port 客户端连接用的端口。 1080 服务启动在本地的 1080 端口上,与连接信息无关。
password 客户端连接用的端口。 mypassword 小飞机配置连接本服务器时需要使用的密码。
timeout 连接超时时间。 60
method 加密方式 aes-256-cfb 小飞机配置连接本服务器时需要使用的加密方式。

加密方式可选:rc4、rc4-md5、aes-128-cfb、aes-192-cfb、aes-256-cfb、bf-cfb、camellia-128-cfb、camellia-192-cfb、camellia-256-cfb、cast5-cfb 和 des-cfb,推荐选择最常用的 aes-256-cfb 以免造成客户端不支持部分加密方式的尴尬情况。

我修改后的配置:

{
    // 0.0.0.0 即接受所有来源的请求,如果配置域名的话你需要先将域名解析到此服务器,防止出现 failed to resolve server name 的错误。
    "server":"0.0.0.0",
    "server_port":18388,
    "local_port":1080,
    "password":"mypassword",
    "timeout":60,
    "method":"aes-256-cfb"
}

5、开放防火墙和安全组
不赘述流程但是不要忘记有这一步。

我的 Linux 基础指令笔记中也有:Linux 命令(1)防火墙端口开启关闭

6、启动服务
启动和其他的常用指令一起写上:

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

启动完状态应该是 active 的:
状态

7、客户端测试连接
一般情况下你们都是在 Windows 或是手机端进行测试连接,这种情况我就不掩饰了手头没有闲置机器。
我这里挑一台空闲的 CentOS7 机器安装 Shadowsocks 客户端(说是客户端,其实 Shadowsocks 服务端和客户端是一体的)来测试刚刚配置的服务端能否正常使用:

# CentOS7 下一键安装 Shadowsocks 客户端
curl -s https://gitee.com/senjianlu/one-click-scripts/raw/main/CentOS7%20%E4%B8%8B%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%20Shadowsocks%20%E5%AE%A2%E6%88%B7%E7%AB%AF/install.sh | bash

然后配置下客户端连接信息(位置和服务端都一样的):

vi /etc/shadowsocks-libev/config.json

配置文件只将 server 改为服务端的 IP 或绑定域名即可,其他不动:

{
    "server":"188.188.18.99",
    "server_port":18388,
    // 客户端的本地端口就在后续的访问上用到了
    "local_port":1080,
    "password":"mypassword",
    "timeout":60,
    "method":"aes-256-cfb"
}

改为使用 ss-local 来启动客户端:

# 启动后在后台运行
nohup /usr/bin/ss-local -c /etc/shadowsocks-libev/config.json >/dev/null 2>&1 &

测试访问一下:

# 访问 IP 信息获取接口,1080 为客户端所在端口
curl -x socks5://127.0.0.1:1080 http://ip-api.com/json/?lang=zh-CN
{"status":"success","country":"日本","countryCode":"JP","region":"xx","regionName":"Tokyo","city":"东京","zip":"xxx-xxxx","lat":xx.xxxx,"lon":xxx.xxx,"timezone":"Asia/Tokyo","isp":"xxxxxx","org":"xxxxxx","as":"xxxxxxx","query":"188.188.18.99"}

IP 对上了,说明配置没错!

结束。