ShadowsocksR(SSR)

本脚本适用环境: 系统支持:CentOS,Debian,Ubuntu 内存要求:≥128M 日期:2016 年 05 月 12 日

关于本脚本: 一键安装 ShadowsocksR 服务端。 请下载与之配套的客户端程序来连接。 (以下客户端只有 Windows 客户端和 Python 版客户端可以使用 SSR 新特性,其他原版客户端只能以兼容的方式连接 SSR 服务器)

默认配置: 服务器端口:自己设定(如不设定,默认为 8989) 客户端端口:1080 密码:自己设定(如不设定,默认为teddysun.com)

客户端下载: Windows / OS X Linux Android / iOS OpenWRT

使用方法: 使用root用户登录,运行以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR.sh  
chmod +x shadowsocksR.sh  
./shadowsocksR.sh 2>&1 | tee shadowsocksR.log

安装完成后,脚本提示如下:

Congratulations, ShadowsocksR install completed! Server IP:yourserverip
Server Port:yourserverport
Password:your_password
Local IP:127.0.0.1
Local Port:1080
Protocol:origin
obfs:plain
Encryption Method:aes-256-cfb

Welcome to visit:https://shadowsocks.be/9.html If you want to change protocol & obfs, reference URL:
https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup
Enjoy it!

卸载方法: 使用 root 用户登录,运行以下命令:

./shadowsocksR.sh uninstall

安装完成后即已后台启动 ShadowsocksR ,运行:

/etc/init.d/shadowsocks status

可以查看 ShadowsocksR 进程是否已经启动。 本脚本安装完成后,已将 ShadowsocksR 自动加入开机自启动。

使用命令: 启动:/etc/init.d/shadowsocks start 停止:/etc/init.d/shadowsocks stop 重启:/etc/init.d/shadowsocks restart 状态:/etc/init.d/shadowsocks status

配置文件路径:/etc/shadowsocks.json 日志文件路径:/var/log/shadowsocks.log

如果你想修改配置文件,请参考: https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup

更新日志: 2016 年 05 月 12 日:
1、新增在 CentOS 下的防火墙规则设置。

参考链接:

https://github.com/breakwa11/shadowsocks-rss


ShadowsocksR 服务端安装教程

说明:

此教程为单用户版,适合个人用户。如果你是站长,请查看多用户版教程: 多用户版教程

基本库安装

以下命令均以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 address your local listens ipv6地址
local_address server port 本地地址
server_port server port 监听端口
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:"" 混淆插件参数,默认""
server_port server port 监听端口
redirect default:"" 重定向参数,默认""
dns_ipv6 default:false 是否优先使用IPv6地址,有IPv6时可开启
fast_open use TCP_FASTOPEN, true / false 快速打开(仅限linux客户端)
workers/td> 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) <min@utbhost.com>

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