一键安装ShadowSocksR

获取脚本

wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh  
chmod +x shadowsocks-all.sh  

关于本脚本

1、一键安装 Shadowsocks-Python, ShadowsocksR, Shadowsocks-Go, Shadowsocks-libev 版(四选一)服务端;
2、各版本的启动脚本及配置文件名不再重合;
3、每次运行可安装一种版本;
4、支持以多次运行来安装多个版本,且各个版本可以共存(注意端口号需设成不同);
5、若已安装多个版本,则卸载时也需多次运行(每次卸载一种);
6、Shadowsocks-Python 和 ShadowsocksR 安装后不可同时启动(因为本质上都属 Python 版)。

本人习惯于使用 Shadowsocks-Python

默认配置

服务器端口:自己设定(如不设定,默认从 9000-19999 之间随机生成)
密码:自己设定(如不设定,默认为 teddysun.com)
加密方式:自己设定(如不设定,Python 和 libev 版默认为 aes-256-gcm,R 和 Go 版默认为 aes-256-cfb)
协议(protocol):自己设定(如不设定,默认为 origin)(仅限 ShadowsocksR 版)
混淆(obfs):自己设定(如不设定,默认为 plain)(仅限 ShadowsocksR 版)
备注:脚本默认创建单用户配置文件,如需配置多用户,请手动修改相应的配置文件后重启即可。

客户端下载

常规版 Windows 客户端
https://github.com/shadowsocks/shadowsocks-windows/releases

ShadowsocksR 版 Windows 客户端
https://github.com/shadowsocksrr/shadowsocksr-csharp/releases

安装 SSR

./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log

卸载 SSR

若已安装多个版本,则卸载时也需多次运行(每次卸载一种)

./shadowsocks-all.sh uninstall

管理SSR

# 启动、关闭、重启、状态
## Shadowsocks-Python
/etc/init.d/shadowsocks-python start|stop|restart|status
## ShadowsocksR
/etc/init.d/shadowsocks-r start|stop|restart|status
## Shadowsocks-Go
/etc/init.d/shadowsocks-go start|stop|restart|status
## Shadowsocks-libev
/etc/init.d/shadowsocks-libev start|stop|restart|status

# 各版本默认配置文件
## Shadowsocks-Python
/etc/shadowsocks-python/config.json
## ShadowsocksR
/etc/shadowsocks-r/config.json
## Shadowsocks-Go
/etc/shadowsocks-go/config.json
## Shadowsocks-libev
/etc/shadowsocks-libev/config.json

SSR 配置详解

{
    "server": "0.0.0.0",
    "server_port": 8989,
    "password": "password",
    "method": "chacha20",
    "protocol": "origin",
    "protocol_param": "",
    "obfs": "plain",
    "obfs_param": "",
    "timeout": 120,
    "udp_timeout": 60,
    "fast_open": false,
    "workers": 2
}

## 参数说明
{
    "server": "0.0.0.0",    # 监听地址
    "server_port": 8989,    # 监听端口
    "password": "password", # 端口密码
    "method": "chacha20",   # 加密方式
    "protocol": "origin",   # 协议插件, origin: 原版协议
    "protocol_param": "",   # 协议插件参数
    "obfs": "plain",        # 混淆插件, plain: 不混淆
    "obfs_param": "",       # 混淆插件参数
    "timeout": 120,         # tcp超时
    "udp_timeout": 60,      # udp超时
    "fast_open": false,     # 需内核支持(3.7+), 在tcp握手的同时交换数据
    "workers": 2            # worker进程数量
}

## 多用户配置
{
    "server": "0.0.0.0",
    "port_password": {
        "8080": "password1",
        "8181": "password2",
        "8282": "password3"
    },
    "method": "chacha20",
    "protocol": "origin",
    "protocol_param": "",
    "obfs": "plain",
    "obfs_param": "",
    "timeout": 120,
    "udp_timeout": 60,
    "fast_open": false,
    "workers": 2
}

## 多用户 + 不同参数
{
    "server": "0.0.0.0",
    "port_password": {
        "8080": {
            "method": "aes-128-cfb",
            "protocol": "auth_sha1_v4",
            "protocol_param": "",
            "obfs": "tls1.2_ticket_auth",
            "obfs_param": "",
            "password": "password1"
        },
        "8181": {
            "method": "aes-256-cfb",
            "protocol": "auth_aes128_md5",
            "protocol_param": "",
            "obfs": "http_simple",
            "obfs_param": "",
            "password": "password2"
        },
        "8282": {
            "password": "password3"
        }
    },
    "method": "chacha20",
    "protocol": "origin",
    "protocol_param": "",
    "obfs": "plain",
    "obfs_param": "",
    "timeout": 120,
    "udp_timeout": 60,
    "fast_open": false,
    "workers": 2
}

SSR 混淆说明

ShadowsocksR 协议/混淆插件文档ShadowsocksR 协议/混淆插件说明

## Client -> Server 方向
客户端请求 -> ss-local -> 协议插件 -> 加密 -> 混淆插件
======================== GFW =======================
混淆插件 -> 解密 -> 协议插件 -> ss-server -> 目标服务器

## 协议插件与混淆插件的作用
"协议插件": 主要用于增加数据完整性校验,增强安全性,包长度混淆等
"混淆插件": 主要用于伪装为其它协议(如 HTTP_GET、HTTP_POST、HTTPS),扰乱 GFW 的检测

## 推荐的协议插件与混淆插件
协议插件: "auth_sha1_v4"、"auth_aes128_md5"、"auth_aes128_sha1"、"auth_chain_a"
混淆插件: "plain"(即:不混淆)、"http_simple"、"http_post"、"tls1.2_ticket_auth"
# 不要奇怪为什么推荐 plain,因为混淆不总是有效果,要看各地区的策略,有时候不混淆让其看起来像随机数据更好

参考Shadowsocks 一键安装脚本(四合一)