在 Arch Linux 下安装 Shadowsocks 的服务端非常容易,在 Arch Linux 的官方包索引中就有 Shadowsocks 的 Python 版(包名为 shadowsocks)和 libev 版(包名为 shadowsocks-libev)。本文以 libev 版本(C 实现)为例,介绍安装、配置 Shadowsocks 的方法。

安装 Shadowsocks

执行安装 Shadowsocks 的命令之前,我们需要先切换到 root 用户(直接以 root 身份登入;或是以普通用户登入,通过命令 sudo su - 切换为 root 用户),或者使用普通用户,但在每条命令前加上 sudo

另外,后续的配置也需要以 root 用户的身份进行。

具体安装 shadowsocks-libev 的命令如下:

pacman -Sy --noconfirm shadowsocks-libev

安装完成后,会有 ss-local, ss-manager, ss-nat, ss-redir, ss-server, ss-tunnel 命令可用。

其中,作为服务器,我们需要的是 ss-server,不过后文中我们将通过服务文件启动 Shadowsocks,而不会直接与 ss-server 命令打交道。

添加配置文件

shadowsocks-libevshadowsocks 的服务文件默认都会读取位于 /etc/shadowsocks/ 目录下 .json 格式的配置文件。

(注:如果 /etc/shadowsocks/ 目录不存在,则需要先创建该目录,命令为 mkdir /etc/shadowsocks

shadowsocks-libev 不提供默认配置文件,因此我们需要手动创建一个,如 /etc/shadowsocks/zzz.buzz.json

{
	"server": "0.0.0.0",
	"server_port": 10443,
	"password": "zzz.buzz",
	"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 权限。

  • "password": 必填。需要在客户端配置时填入相同的值。

    连接服务端所需的密码,建议替换为复杂密码,避免被攻击者暴力破解。

  • "method": 选填,默认 "rc4-md5"。需要在客户端配置时填入相同的值。

    服务端所用的加密方法,推荐以下几种算法:

    1. "chacha20-ietf-poly1305" 具有优秀的安全性,更佳的性能,属于 AEAD 加密算法,少部分客户端(如 iOS Wingy)不支持此算法;
    2. "aes-256-cfb" 具有足够安全性,且被各服务端及客户端广泛支持;
    3. "rc4-md5" 算法快速,且具有一定的安全性,适合运算能力受限的设备如路由器等。
  • "mode": 选填,默认 "tcp_only"

    服务器所要监听的协议,可填 "tcp_only", "udp_only""tcp_and_udp"
    填入 "tcp_and_udp" 相当于命令行上提供 -u 参数;填入 "udp_only" 相当于命令行上提供 -U 参数。

对于配置服务端,完成以上几项配置就足够了。

启动 Shadowsocks 服务

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

systemctl start [email protected]

注意,此处的 @zzz.buzz 与上文中我们创建的配置文件 zzz.buzz.json 是相对应的。

如之前创建的配置文件名为 example.json,那么此处的命令就应该为 @example

不过,无论配置文件取名如何,都应该放在 /etc/shadowsocks/ 目录下,否则服务将无法定位到相应的配置文件。

检查 Shadowsocks 服务状态

要确认 Shadowsocks 的服务运行状态及最新日志,我们可以执行命令:

systemctl status [email protected]

要查看 Shadowsocks 服务的全部日志,我们可以执行命令:

journalctl -u [email protected]

配置服务开机自启

上文中,我们通过 systemctl start 启动了服务,但是如果我们想要服务能在开机时自动启动,还需要执行以下命令:

systemctl enable [email protected]

至此,服务端所需要的所有配置就都已经完成了。

配置客户端

由于本文着重介绍服务端的安装配置,将不再详述客户端相关的内容。

关于客户端的配置文件,可以复制使用服务端的配置文件,并将 "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"
}

如果需要在路由器上配置 Shadowsocks 的客户端,则可以参考 在路由器上部署 shadowsocks