1 介绍

1.1 Destination

本文章主要介绍shadowsocks命令行的使用以及SS, SSR的配置:

  • shadowsocks server的配置
  • shadowsocksR Server的配置
  • 通过sslocal/ssserver来搭建属于自己的proxy.

当然, 如果有shadowsocks终端, 比如Mac的shadowsocksX-NG, windows下的shadowsocks, 并且就仅仅使用浏览器进行科学上网, 则不建议使用sslocal, 毕竟前者提供的功能更加全面, 更加稳定, 无需进行额外的pac配置, 而且还默认提供http全局代理.

1.2 SS

centos下安装pip以及shadowssocks

1
2
3
4
# 安装pip
yum install python-setuptools && easy_install pip
# 安装shadowsocks
pip install shadowsocks

实际上, 在任何系统上都可以使用pip安装shadowsocks.

Ubuntu按照最新版:

1
2
3
4
# 安装libsodium:
sudo apt install libsodium-dev
# 安装shadowsocks:
pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip -U

1.3 SSR

ShadowsocksR在SS的基础之上增加了一些资料混淆方式, 修复了部分安全问题, 更多信息见百科介绍. 在本人使用过程中可以看到SSR增加了很多加密盐值, 并且新的客户端额外增加了很多功能, 比如SSR订阅, ACL控制等等.

另外, MacOS上的shadowsocksX-NG-R8不知道为何不能兼容SS配置的代理, 而对于iphone手机应用商店下载的代理客户端则同时支持SS, SSR.

下面, 让我们先安装并配置一个SSR服务器吧, 安装脚本会根据你的选项自动生成一个配置文件, 配置文件中每一项的解释见下面的说明.

1
2
3
4
5
6
7
# 下载安装脚本
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
# 卸载
./shadowsocksR.sh uninstall

在安装完成之后, 我们需要启动SSR:

1
2
3
4
5
6
7
# 状态查询
/etc/init.d/shadowsocks status
# 启动
/etc/init.d/shadowsocks start
/etc/init.d/shadowsocks restart
# 停止
/etc/init.d/shadowsocks stop

2 Configure

2.1 Options

不管是ssserver, sslocal,都可以通过配置文件来提供socks5服务, 当然, 后者则通过socks5与前者进行通信,
当然通信流量都是事先通过指定的算法加密(对称加密算法: AES等). 下面就来让我们先看一下配置文件里面中各项的
含义, 实际上非常简单:

  • server 监听地址(IPv4或IPv6)
  • server_port 监听端口
  • password 用以加密的密匙
  • port_password 多端口配置
  • local_address 本地监听地址,缺省为127.0.0.1 可用-b参数设置
  • local_port 本地监听端口,一般为1080
  • timeout 超时时间(秒)
  • method 加密方法,默认的table是一种不安全的加密.建议使用chacha20-ietf.
  • fast_open 是否启用TCP-Fast-Open, 一种在TCP连接建立阶段传输数据, 降低应用层事务延时的机制
  • wokers worker数量, 启动进程的数量

其中server, server_port在客户端和服务器端是不一样的, 在服务器端, server, server_port表示绑定的地址和端口,
就是通常意义上的socket中的<ip, port>, 而且这里需要特别提出, 在大部分情况下ssserver会将server_port, password
替换为port_password, 以便支持多端口服务.

2.2 命令行

最基本的客户端和服务器, 不适用配置文件:

1
2
sslocal -s sg01-22.ssv4.net -p 22222 -b 127.0.0.1 -l 1080 -k password -m aes-256-cfb
ssserver -s 监听地址(通常为0.0.0.0) -p 监听端口 -k 密码 -m 加密方法 -t 超时时间(秒)

各项参数说明:

  • -s 服务器地址(通常说的域名污染问题)
  • -p 服务器端口
  • -b 本地监听地址,一般是127.0.0.1(默认值)
  • -l 本地监听端口,可以自己选,一般是1080,或者1000-9999之间自己选一个
  • -k shadowsocks 连接远程服务器地址密码
  • -m 加密方式, 我们统一都是 aes-256-cfb

3 服务配置

3.1 客户端

客户端连接远程ss服务器, 其中server必须指明远程服务器地址.

1
2
sslocal -c /etc/shadowsocks.json -d start -v
sslocal -c /etc/shadowsocks.json -d stop -v

3.2 服务器

此时server一般为0.0.0.0, 端口随便填写

1
2
ssserver -c /etc/shadowsocks.json -d start -v
ssserver -c /etc/shadowsocks.json -d stop -v

3.3 非root用户配置

1
2
3
sudo useradd ssuser
# 新的运行命令sudo ssserver [other options] --user ssuser
ssserver -c /etc/shadowsocks.json -d start --user ssuser

3.4 日志查看

1
tail -f /var/log/shadowsocks.log

4 Example

4.1 Server

多端口服务, 以便将一个SSR服务提供给多个人使用, 确保每一个人都有单独的端口, 密码,
一般存储在/etc/shadowsocks.json文件中, 具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
{
"server":"0.0.0.0",
"port_password": {
"port1":"password1",
"port2":"password2"
},
"timeout": 600,
"method":"aes-256-cfb",
"fast_open":true,
"workers": 4
}

仔细观察会发现, 配置中少了server_port, password, local_address, local_port, 但是增加了port_password
配置项, 实际上你如果了解shadowsocks的原理, 以及清楚的明白sslocalssserver的通信机制, 就会
了解为何少了这几项配置也可以在服务端运行.

单端口服务配置(不建议):

1
2
3
4
5
6
7
8
9
{
"server":"0.0.0.0",
"server_port": "port1",
"password": "password1",
"timeout": 600,
"method":"aes-256-cfb",
"fast_open":true,
"workers": 4
}

如果不想任何人都可以使用这个SSR服务的话, 则可用设置server白名单, 将server从0.0.0.0设置为一个IP
列表, 例如server: ['1.1.1.1', '2.2.2.2'].

4.2 Client

客户端在整个SSR通信过程中扮演了如下的角色:

  • 给本地应用提供: socks5服务
  • 对本地流量进行加密, 使用约定好的对称加密算法
  • 将加密后的流量通过TCP传递给远方的服务器, 建立加密通道1
  • 负责加密通道1后续的所有工作

所以客户端的配置相比服务端更加的直白, 配置如下:

1
2
3
4
5
6
7
8
9
{
"server":"服务器地址",
"server_port": "服务端的某一个开发端口",
"password": "该端口对应的密码",
"timeout": 600,
"method":"aes-256-cfb",
"fast_open":true,
"workers": 4
}

4.3 SSR

下面让我们展示一下1.3节介绍的SSR安装之后的配置文件, 并介绍一些SS没有的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"server":"白名单地址",
"server_ipv6":"[::]",
"local_address":"127.0.0.1",
"local_port":1080,
"port_password": {
"30087":"密码1."
},
"timeout":120,
"method":"aes-256-cfb",
"protocol":"加密协议",
"protocol_param":"加密协议参数",
"obfs":"混淆加密方式",
"obfs_param":"混淆加密参数",
"redirect":"",
"dns_ipv6":false,
"fast_open":false,
"workers":1
}

参考:

SSR配置和使用

shadowsocks服务端配置