阿里云香港cnentos7.4下面安装shawdowsocks

卸载之前安装错误的:

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

systemctl stop shadowsocks.service

pip uninstall shadowsocks

yum remove python-pip

安装

yum -y install python-pip

pip install --upgrade pip

pip install shadowsocks

或者

在控制台执行以下命令安装 pip:

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py

安装配置 shadowsocks

在控制台执行以下命令安装 shadowsocks:

pip install --upgrade pip
pip install shadowsocks

配置:

vim /etc/shadowsocks.json
{
  "server": "0.0.0.0",
  "server_port": 8080,
  "password": "填写密码",
  "method": "aes-256-cfb"
}

配置自启动

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

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

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

后台一直运行

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

自启动方法一:

打开/etc/rc.d/rc/local文件,在末尾增加内容或者命令:

echo ‘ssserver -c /etc/shadowsocks.json -d start’ >> /etc/rc.local

entos7 echo进去带了引号,原因未知,手动编辑 /etc/rc.d/rc.local就可以了

在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限

chmod +x /etc/rc.d/rc.local

 

以下方法都失败了

编辑shadowsocks 服务的启动脚本文件,内容如下:

[root@server ~]# vim /etc/systemd/system/shadowsocks.service
[Unit]
Description=Shadowsocks

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json

[Install]
WantedBy=multi-user.target

执行以下命令启动 shadowsocks 服务:

[root@server ~]# systemctl enable shadowsocks
[root@server ~]# systemctl start shadowsocks

启动一个服务:systemctl start shadowsocks
关闭一个服务:systemctl stop shadowsocks
重启一个服务:systemctl restart shadowsocks
显示一个服务的状态:systemctl status shadowsocks
在开机时启用一个服务:systemctl enable shadowsocks
在开机时禁用一个服务:systemctl disable shadowsocks
查看服务是否开机启动:systemctl is-enabled shadowsocks
查看已启动的服务列表:systemctl list-unit-files|grep enabled

说明:启用服务就是在当前“runlevel”的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/systemd/system里面对应服务配置文件的软链接;禁用服务就是删除此软链接。

检查 shadowsocks 服务是否已成功启动,可以执行以下命令查看服务的状态:

systemctl status shadowsocks -l

 

确认服务启动成功后,配置防火墙规则,开放你配置的端口,不然客户端是无法连接的:

[root@server ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
[root@server ~]# firewall-cmd --zone=public --add-port=8081/tcp --permanent
success
[root@server ~]# firewall-cmd --reload
success

状态:

systemctl enable shadowsocks.service

systemctl start shadowsocks.service

systemctl status shadowsocks.service

 

Connection reset by peer

打开阿里云防火墙和各种防火墙

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

启动和看状态

systemctl start shadowsocks.service
systemctl stop shadowsocks.service
systemctl restart shadowsocks.service

systemctl enable shadowsocks.service

systemctl status shadowsocks -l

 

安装 shadowsocks-libev

 

安装 Shadowsocks-lebv

参考文献:

启动不起来的话

删除了/usr/lib/systemd/system/shadowsocks-libev.service中service下GROUP那一行之后就可以正常启动了。

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

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

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

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

安装完成后,会有 ss-localss-managerss-natss-redirss-serverss-tunnel 命令可用。

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

注,如果安装报类似如下错误:

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 命令,以确认 shadowsocks 及其依赖已正确安装。

如运行正常,则跳过常见问题,继续添加配置文件

常见问题

添加配置文件

COPR 里的 shadowsocks-libev 默认读取位于 /etc/shadowsocks-libev/config.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 权限,而默认的服务文件则是以 nobody 用户启动 Shadowsocks 的。如需选用低于 1024 的端口,也可执行命令 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ss-server 赋予相应权限,后续就可以使用 nobody 用户或普通用户启动 Shadowsocks。
  • "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 参数。

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

如果想要变更默认的配置文件,或者提供其他命令行参数,我们可以修改 /etc/sysconfig/shadowsocks-libev

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

# Extra command line arguments
DAEMON_ARGS="-u"

其中 CONFFILE 指定了 shadowsocks-libev 所读取的配置文件;DAEMON_ARGS 则指定了额外的命令行参数,此处的 "-u" 表示启用 UDP 协议。

需要注意的是,命令行参数 DAEMON_ARGS 比配置文件 CONFFILE 中指定的选项优先级要更高一些。

配置防火墙

CentOS/RHEL 7 系统自带了防火墙,为了使我们的 Shadowsocks 服务器能够正常工作,我们还需要添加相应的防火墙规则。

假设我们在配置 Shadowsocks 服务器的端口时填入了 "server_port": 10443,那我们可以使用以下命令:

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

如果使用的是其他端口,则按实际情况相应地替换命令中的端口即可。

另外,如果服务器是运行在 VPS 或云服务器上,则往往还需要在云服务商的控制面板中配置相应的防火墙规则。

启动 Shadowsocks 服务

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

systemctl start shadowsocks-libev

检查 Shadowsocks 服务状态

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

systemctl status shadowsocks-libev

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

journalctl -u shadowsocks-libev

配置服务开机自启

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

systemctl enable shadowsocks-libev

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