Skip to content

ShadowsocksR 服务端安装教程

南琴浪 edited this page Aug 3, 2017 · 1 revision

说明: 此教程为单用户版,适合个人用户。如果你是站长,请查看多用户版教程:多用户版教程 基本库安装

以下命令均以root用户执行,或sudo方式执行

centos:

yum install m2crypto git libsodium

ubuntu/debian:

apt-get install m2crypto git

如果要使用 salsa20 或 chacha20 或 chacha20-ietf 算法,请安装 libsodium :

centos:

yum -y groupinstall "Development Tools" wget https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz tar xf libsodium-1.0.10.tar.gz && cd libsodium-1.0.10 ./configure && make -j2 && make install echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf ldconfig

ubuntu/debian:

apt-get install build-essential wget https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz tar xf libsodium-1.0.10.tar.gz && cd libsodium-1.0.10 ./configure && make -j2 && make install ldconfig

如果曾经安装过旧版本,亦可重复用以上步骤更新到最新版,仅1.0.4或以上版本支持chacha20-ietf 获取源代码

git clone -b manyuser https://github.com/breakwa11/shadowsocks.git

执行完毕后此目录会新建一个shadowsocks目录,其中根目录的是多用户版(即数据库版,个人用户请忽略这个),子目录中的是单用户版(即shadowsocks/shadowsocks)。

根目录即 ./shadowsocks

子目录即 ./shadowsocks/shadowsocks 服务端配置

进入子目录:

cd shadowsocks/shadowsocks

快速运行

python server.py -p 443 -k password -m aes-256-cfb -o http_simple

#说明:-p 端口 -k 密码 -m 加密方式 -P 协议插件 -o 混淆插件

如果要后台运行:

python server.py -p 443 -k password -m aes-256-cfb -o http_simple -d start

如果要停止/重启:

python server.py -d stop/restart

查看日志:

tail -f /var/log/shadowsocks.log

用 -h 查看所有参数

通过配置文件运行

建立配置文件 vi /etc/shadowsocks.json

写入以下内容:

{ "server": "0.0.0.0", "server_ipv6": "::", "server_port": 8388, "local_address": "127.0.0.1", "local_port": 1080, "password": "mypassword", "timeout": 120, "method": "aes-256-cfb", "protocol": "auth_sha1_compatible", "protocol_param": "", "obfs": "tls1.2_ticket_auth_compatible", "obfs_param": "", "redirect": "", "dns_ipv6": false, "fast_open": false, "workers": 1 }

各选项说明: Name Explanation 中文说明 server the address your server listens 监听地址 server_ipv6 the ipv6 address your server listens ipv6地址 server_port server port 监听端口 local_address the address your local listens 本地地址 local_port local port 本地端口 password password used for encryption 密码 timeout in seconds 超时时间 method default: "aes-256-cfb", see Encryption 加密方式 protocol default:"origin" 协议插件,默认"origin" protocol_param default:"" 协议插件参数,默认"" obfs default:"tls1.2_ticket_auth_compatible" 混淆插件,默认"tls1.2_ticket_auth_compatible" obfs_param default:"" 混淆插件参数,默认"" redirect default:"" 重定向参数,默认"" dns_ipv6 default:false 是否优先使用IPv6地址,有IPv6时可开启 fast_open use TCP_FASTOPEN, true / false 快速打开(仅限linux客户端) workers number of workers, available on Unix/Linux 线程(仅限linux客户端)

其中protocol有如下取值: protocol 说明 "origin" 原版协议 "verify_simple" 带校验的协议 "verify_deflate" 带压缩的协议 "verify_sha1" 带验证抗CCA攻击的协议,可兼容libev的OTA "auth_simple" 抗重放攻击的协议 "auth_sha1" 带验证抗CCA攻击且抗重放攻击的协议

其中obfs有如下取值: obfs 说明 "plain" 不混淆 "http_simple" 伪装为http协议 "tls_simple" 伪装为tls协议(不建议使用) "random_head" 发送一个随机包再通讯的协议 "tls1.0_session_auth" 伪装为tls session握手协议(不建议使用),同时能抗重放攻击 "tls1.2_ticket_auth" 伪装为tls ticket握手协议(强烈推荐),同时能抗重放攻击

各混淆插件的说明请点击这里查看:混淆插件说明

注:客户端的protocol和obfs配置必须与服务端的一致。

redirect参数说明:

值为空字符串或一个列表,若为列表示例如 "redirect":["bing.com", "cloudflare.com:443"], 作用是在连接方的数据不正确的时候,把数据重定向到列表中的其中一个地址和端口(不写端口则视为80),以伪装为目标服务器。

dns_ipv6参数说明:

为true则指定服务器优先使用IPv6地址。仅当服务器能访问IPv6地址时可以用,否则会导致有IPv6地址的网站无法打开。

一般情况下,只需要修改以下五项即可:

"server_port":8388, //端口 "password":"password", //密码 "protocol":"origin", //协议插件 "obfs":"http_simple", //混淆插件 "method":"aes-256-cfb", //加密方式

多端口配置

如果要多个用户一起使用的话,请写入以下配置:

{ "server":"0.0.0.0", "server_ipv6": "[::]", "local_address":"127.0.0.1", "local_port":1080, "port_password":{ "80":"password1", "443":"password2" }, "timeout":300, "method":"aes-256-cfb", "protocol": "auth_sha1_compatible", "protocol_param": "", "obfs": "http_simple_compatible", "obfs_param": "", "redirect": "", "dns_ipv6": false, "fast_open": false, "workers": 1 }

按照格式修改端口和密码:

"port_password":{                  
    "80":"password1",       //端口和密码1
    "443":"password2"       //端口和密码2 
},         

如果要为每个端口配置不同的混淆协议,请写入以下配置:

{ "server":"0.0.0.0", "server_ipv6":"::", "local_address":"127.0.0.1", "local_port":1080, "port_password":{ "8388":{"protocol":"auth_simple", "password":"abcde", "obfs":"http_simple", "obfs_param":""}, "8389":{"protocol":"origin", "password":"abcde"} }, "timeout":300, "method":"aes-256-cfb", "protocol": "auth_sha1_compatible", "protocol_param": "", "obfs": "http_simple_compatible", "obfs_param": "", "redirect": "", "dns_ipv6": false, "fast_open": false, "workers": 1 }

按格式修改端口、密码以及混淆协议。也可以和以前的格式混合使用,如果某个端口不配置混淆协议,则会使用下面的默认"obfs"配置。 运行子目录内的server.py:

python server.py -c /etc/shadowsocks.json

如果要在后台运行:

python server.py -c /etc/shadowsocks.json -d start

如果要停止/重启:

python server.py -c /etc/shadowsocks.json -d stop/restart

查看日志:

tail -f /var/log/shadowsocks.log

更新源代码

如果代码有更新可用本命令更新代码

进入shadowsocks目录 cd shadowsocks 执行 git pull 成功后重启ss服务 服务器搭建

建议选择 Ubuntu 14.04 LTS 作为服务器以便使用 TCP Fast Open。

除非有明确理由,不建议用对新手不友好的 CentOS,如果你是rpm系的死忠,建议使用Fedora。

为了更好的性能,VPS 尽量选择 XEN 或 KVM,不建议使用 OpenVZ。推荐使用以下 VPS:

Digital Ocean 自带的内核无需自己编译模块即可使用 hybla 算法
Linode 功能强大,机房较多
Vultr 价格实惠,机房较多,经常有赠送
Dediserve 主机稳定,机房众多,美中不足的是国内线路不是特别好

启动脚本

以下启动脚本均假定shadowsocks-rss安装于/usr/local目录,配置文件为/etc/shadowsocks.json,请按照实际情况自行修改

SysVinit启动脚本,适合CentOS/RHEL6系以及Ubuntu 14.x,Debian7.x

#!/bin/sh

chkconfig: 2345 90 10

description: Start or stop the Shadowsocks R server

BEGIN INIT INFO

Provides: Shadowsocks-R

Required-Start: $network $syslog

Required-Stop: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Description: Start or stop the Shadowsocks R server

END INIT INFO

Author: Yvonne Lu(Min) [email protected]

name=shadowsocks PY=/usr/bin/python SS=/usr/local/shadowsocks/server.py SSPY=server.py conf=/etc/shadowsocks.json

start(){ $PY $SS -c $conf -d start RETVAL=$? if [ "$RETVAL" = "0" ]; then echo "$name start success" else echo "$name start failed" fi }

stop(){ pid=ps -ef | grep -v grep | grep -v ps | grep -i "${SSPY}" | awk '{print $2}' if [ ! -z $pid ]; then $PY $SS -c $conf -d stop RETVAL=$? if [ "$RETVAL" = "0" ]; then echo "$name stop success" else echo "$name stop failed" fi else echo "$name is not running" RETVAL=1 fi }

status(){ pid=ps -ef | grep -v grep | grep -v ps | grep -i "${SSPY}" | awk '{print $2}' if [ -z $pid ]; then echo "$name is not running" RETVAL=1 else echo "$name is running with PID $pid" RETVAL=0 fi }

case "$1" in 'start') start ;; 'stop') stop ;; 'status') status ;; 'restart') stop start RETVAL=$? ;; *) echo "Usage: $0 { start | stop | restart | status }" RETVAL=1 ;; esac exit $RETVAL

请将上述脚本保存为/etc/init.d/shadowsocks 并执行chmod 755 /etc/init.d/shadowsocks && chkconfig --add shadowsocks && service shadowsocks start

systemd脚本,适用于CentOS/RHEL7以上,Ubuntu 15以上,Debian8以上

[Unit] Description=Start or stop the Shadowsocks R server After=network.target Wants=network.target [Service] Type=forking PIDFile=/var/run/shadowsocks.pid ExecStart=/usr/bin/python /usr/local/shadowsocks/server.py --pid-file /var/run/shadowsocks.pid -c /etc/shadowsocks.json -d start ExecStop=/usr/bin/python /usr/local/shadowsocks/server.py --pid-file /var/run/shadowsocks.pid -c /etc/shadowsocks.json -d stop [Install] WantedBy=multi-user.target

请将上述脚本保存为/etc/systemd/system/shadowsocks.service 并执行systemctl enable shadowsocks.service && systemctl start shadowsocks.service

客户端

注:以下客户端只有windows客户端和python版客户端可以使用ssr新特性,其他原版客户端只能以兼容的方式连接ssr服务器(目前ssr仍兼容大部分旧版客户端)。

Windows / OS X
Linux
Android / iOS
OpenWRT

在你本地的 PC 或手机上使用图形客户端。具体使用参见它们的使用说明。

也可以直接使用 Python 版客户端(命令行)。 其它异常

如果你的服务端python版本在2.6以下,那么必须更新python到2.6.x或2.7.x版本

如果运行一段时间后,你发现服务器无法连接,同时ssh连上去后,执行 netstat -ltnap | grep -c CLOSE_WAIT 显示的数值很大(超过50是严重不正常),那么请修改服务器的最大连接数,如果是ubuntu/centos均可修改 /etc/security/limits.conf 添加两行:

  • soft nofile 32768
  • hard nofile 131072 然后重启机器生效

如果还是出现大量的too many open files错误,可以通过执行以下命令确定占用大量文件数的进程:

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more