Shadowsocks协议完全指南:原理、部署与使用教程

Shadowsocks协议完全指南:原理、部署与使用教程

摘要

本文全面介绍Shadowsocks协议,从协议设计理念、技术原理到实际部署进行详细讲解。内容涵盖Shadowsocks协议的发展历程、工作原理与加密机制、AEAD与Stream Cipher加密算法对比、服务端部署(包括shadowsocks-libev和Python版本)、各平台客户端配置使用,以及安全性注意事项和常见问题排查。旨在帮助读者深入理解Shadowsocks协议并掌握其实际应用。

一、Shadowsocks协议介绍

1.1 什么是Shadowsocks协议

Shadowsocks(中文名"影梭")是一种基于SOCKS5代理的加密传输协议,由中国开发者clowwindy(网名)于2012年创建。Shadowsocks的设计初衷是在网络审查环境下提供安全、高效的代理服务。

Shadowsocks的核心思想是:通过预设密码对流量进行加密,将代理流量伪装成普通的数据传输,从而绕过深度包检测(DPI)。

graph LR
A[Shadowsocks] --> B[客户端 ss-local]
A --> C[服务端 ss-server]
A --> D[加密传输]

B --> B1[本地SOCKS5监听]
B --> B2[加密并转发]

C --> C1[解密请求]
C --> C2[代理访问目标]

D --> D1[AEAD加密]
D --> D2[Stream Cipher]

1.2 协议发展历程

时间事件说明
2012项目创建clowwindy发布第一个Python版本
2013开源发布在GitHub开源,获得广泛关注
2015项目被删作者迫于压力删除GitHub仓库
2015社区接手多个分支版本继续维护
2017AEAD加密引入AEAD加密算法,安全性大幅提升
2020+持续演进各客户端持续更新,新功能不断加入

主要分支版本

graph TB
A[Shadowsocks Original] --> B[shadowsocks-libev]
A --> C[ShadowsocksR]
A --> D[go-shadowsocks]
A --> E[Shadowsocks-Qt5]

B --> B1[C语言实现]
B --> B2[轻量高效]

C --> C1[混淆协议]
C --> C2[协议扩展]

D --> D1[Go语言实现]
D --> D2[易于部署]

1.3 设计理念与特点

1.3.1 设计理念

Shadowsocks的设计遵循以下原则:

  1. 轻量级:最小化资源占用,适合嵌入式设备
  2. 高效性:选择高效加密算法,减少性能损耗
  3. 易部署:配置简单,一键部署
  4. 跨平台:支持主流操作系统和移动设备
  5. 加密传输:端到端加密,保护数据安全

1.3.2 协议特点

特点说明
加密传输所有流量经过加密,防止监听
动态端口服务端端口可配置,灵活管理
多加密算法支持多种加密方式,可按需选择
TCP/UDP支持支持TCP和UDP流量转发
无状态设计服务端无需维护连接状态
低延迟设计简洁,延迟极低

1.4 适用场景

Shadowsocks协议适用于以下场景:

  • 个人代理:个人使用,访问网络资源
  • 团队共享:小团队共享代理服务器
  • 开发者工具:开发者调试、测试网络应用
  • IoT设备代理:轻量级特点适合嵌入式设备
  • 游戏加速:UDP支持适合游戏流量转发
  • 数据采集:通过代理池分散请求来源

重要说明:Shadowsocks协议设计简洁高效,但因其流量特征较为明显,在高审查环境下可能被识别封锁。建议结合其他技术(如插件)使用。

1.5 与其他代理协议对比

特性ShadowsocksSOCKS5VMessTrojanVLESS
协议层应用层会话层应用层应用层应用层
支持协议TCP/UDPTCP/UDPTCP/UDPTCPTCP/UDP
加密方式预共享密钥AEADTLSAEAD/无
认证机制密码用户名密码UUID密码UUID
流量伪装弱(需插件)
性能最高中高
抗检测
实现复杂度最低

二、协议工作原理

2.1 整体架构

Shadowsocks采用客户端-服务器架构,主要包含两个组件:

graph TB
subgraph 客户端
A[应用程序] --> B[ss-local<br/>本地SOCKS5代理]
end

subgraph 加密通道
B -->|加密流量| C[网络传输]
end

subgraph 服务端
C -->|加密流量| D[ss-server]
D --> E[解密并代理]
E --> F[目标服务器]
end

F -->|响应| E
E -->|加密响应| D
D -->|加密响应| C
C -->|解密| B
B --> A

组件说明

组件功能
ss-local客户端程序,监听本地SOCKS5端口,加密并转发流量
ss-server服务端程序,解密请求,代理访问目标并加密响应
加密通道使用预共享密钥加密的传输通道

2.2 握手流程

Shadowsocks的连接建立过程相比SOCKS5更为简洁:

sequenceDiagram
participant A as 应用程序
participant L as ss-local
participant S as ss-server
participant T as 目标服务器

Note over A,L: 本地SOCKS5连接
A->>L: SOCKS5请求<br/>VER:CMD:ATYP:DST.ADDR:DST.PORT
L->>A: SOCKS5响应<br/>VER:REP:RSV:ATYP:BND.ADDR:BND.PORT

Note over L,S: 加密传输
L->>S: [ATYP:DST.ADDR:DST.PORT] + DATA<br/>使用预设密码加密
S->>L: [加密响应数据]

Note over S,T: 代理连接
S->>T: 建立TCP连接
S->>T: 转发解密后的数据
T->>S: 响应数据

Note over L,S: 数据传输
S->>L: 加密响应数据
L->>A: 解密后转发给应用程序

2.3 加密机制详解

Shadowsocks支持两种加密机制:

2.3.1 Stream Cipher(流加密)

早期Shadowsocks使用流加密算法,数据格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
请求数据格式(Stream Cipher):
┌────────────────────────────────────────────────────────────────┐
│ ATYP(1B) │ DST.ADDR(1-256B) │ DST.PORT(2B) │ DATA(variable) │
└────────────────────────────────────────────────────────────────┘

加密后格式:
┌────────────────────────────────────────────────────────────────┐
│ IV(8-16B) │ Encrypted(ATYP + DST.ADDR + DST.PORT + DATA) │
└────────────────────────────────────────────────────────────────┘

字段说明:
- IV: 初始化向量,每个连接随机生成
- ATYP: 地址类型(0x01=IPv4, 0x03=域名, 0x04=IPv6)
- DST.ADDR: 目标地址
- DST.PORT: 目标端口(大端序)
- DATA: 实际传输的数据

2.3.2 AEAD加密(推荐)

现代Shadowsocks推荐使用AEAD(Authenticated Encryption with Associated Data)加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
请求数据格式(AEAD):
┌──────────────────────────────────────────────────────────────────────────┐
Salt(16-32B) │ Encrypted(ATYP + DST.ADDR + DST.PORT) │ TAG(16B) │ DATA...│
└──────────────────────────────────────────────────────────────────────────┘

每个数据块格式:
┌────────────────────────────────────────────────────────────────┐
Length(2B encrypted + 16B TAG) │ Data Block(encrypted + TAG) │
└────────────────────────────────────────────────────────────────┘

字段说明:
- Salt: 每个连接随机生成的盐值
- Length: 数据块长度(加密)
- TAG: 认证标签,用于验证数据完整性
- Data Block: 加密的数据块

2.4 数据包格式详解

2.4.1 地址类型编码

1
2
3
4
5
6
7
8
ATYP字段取值:
┌────────┬─────────────────┬──────────────────────────────┐
│ 值 │ 类型 │ 地址格式 │
├────────┼─────────────────┼──────────────────────────────┤
0x01 │ IPv4 │ 4字节IP地址 │
0x03 │ 域名 │ 1字节长度 + 域名(最多255字节) │
0x04 │ IPv6 │ 16字节IP地址 │
└────────┴─────────────────┴──────────────────────────────┘

2.4.2 完整请求示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
示例:连接 example.com:443(使用AEAD加密)

原始数据(未加密):
┌────────────────────────────────────────────────────────┐
│ ATYP │ LEN │ DOMAIN │ PORT │
0x030x0B│ example.com │ 0x01BB
1B │ 1B │ 11B │ 2B │
└────────────────────────────────────────────────────────┘

说明:
- ATYP = 0x03: 域名类型
- LEN = 0x0B = 11: 域名长度
- DOMAIN = "example.com": 目标域名
- PORT = 0x01BB = 443: 目标端口

加密后(AEAD):
┌─────────────────────────────────────────────────────────────────────┐
│ Salt(32B) │ Encrypted(0x03 0x0B example.com 0x01BB) │ TAG(16B) │
└─────────────────────────────────────────────────────────────────────┘

2.5 与SOCKS协议的关系

Shadowsocks建立在SOCKS5协议之上,但做了重要改进:

graph LR
A[SOCKS5] --> B[基础框架]
B --> C[地址协商机制]
B --> D[TCP/UDP支持]

E[Shadowsocks] --> F[加密层]
F --> G[预共享密钥]
F --> H[流量加密]

A -.-> E
E --> I[ss-local监听SOCKS5]
E --> J[透明加密转发]

关键区别

特性SOCKS5Shadowsocks
认证方式明文用户名密码预共享密钥加密
数据传输明文加密
握手过程多轮协商单次加密传输
安全性中高
抗检测

三、加密算法详解

3.1 加密算法分类

Shadowsocks支持的加密算法分为两大类:

graph TB
A[Shadowsocks加密算法] --> B[Stream Cipher<br/>流加密]
A --> C[AEAD<br/>认证加密]

B --> B1[rc4-md5]
B --> B2[aes-128-cfb]
B --> B3[aes-256-cfb]
B --> B4[chacha20]
B --> B5[salsa20]

C --> C1[aes-128-gcm]
C --> C2[aes-256-gcm]
C --> C3[chacha20-ietf-poly1305]
C --> C4[xchacha20-ietf-poly1305]

3.2 Stream Cipher算法

安全警告:Stream Cipher算法存在已知安全漏洞,不建议在新部署中使用。仅用于兼容旧客户端。

算法密钥长度IV长度安全性性能推荐度
rc4-md516字节16字节不安全不推荐
aes-128-cfb16字节16字节不推荐
aes-256-cfb32字节16字节不推荐
chacha2032字节8字节不推荐
salsa2032字节8字节不推荐

3.3 AEAD算法(推荐)

AEAD(Authenticated Encryption with Associated Data)算法提供加密和认证双重保障:

算法密钥长度Salt长度Tag长度安全性性能推荐度
aes-128-gcm16字节16字节16字节★★★★☆
aes-256-gcm32字节32字节16字节★★★★★
chacha20-ietf-poly130532字节32字节16字节极高★★★★★
xchacha20-ietf-poly130532字节32字节16字节极高极高★★★★★

3.4 算法安全性对比

1
2
3
4
5
6
7
8
9
安全性对比(从低到高):

不安全 ←───────────────────────────────→ 安全
┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ rc4-md5 │ CFB │chacha20 │ GCM │ xchacha │
│ (弱) │ (弱) │ (中) │ (高) │ (极高) │
└─────────┴─────────┴─────────┴─────────┴─────────┘
↑ ↑ ↑ ↑
已废弃 已知漏洞 可用但旧 推荐使用

3.5 性能对比

不同加密算法在不同平台上的性能表现:

算法x86 CPUARM CPU路由器移动设备
aes-128-gcm快(AES-NI)
aes-256-gcm快(AES-NI)
chacha20-ietf-poly1305极快极快
xchacha20-ietf-poly1305极快极快

算法选择建议

  • 服务器/桌面:aes-256-gcm(有AES-NI指令集)
  • 移动设备/路由器:chacha20-ietf-poly1305
  • 最高安全性:xchacha20-ietf-poly1305

3.6 加密密钥生成

Shadowsocks使用预共享密钥,可以通过以下方式生成:

1
2
3
4
5
6
7
8
9
10
11
# 方法1:使用openssl生成随机密码
openssl rand -base64 16

# 方法2:生成32字节十六进制密钥
openssl rand -hex 16

# 方法3:使用shadowsocks-libev工具
ss-server -p 8388 -k "$(openssl rand -base64 16)" -m aes-256-gcm

# 方法4:Python生成
python3 -c "import secrets; print(secrets.token_urlsafe(16))"

四、服务端部署教程

4.1 环境准备

4.1.1 服务器要求

项目最低要求推荐配置
CPU1核2核+
内存128MB512MB+
存储2GB10GB+
带宽10Mbps50Mbps+
系统CentOS 7+/Debian 9+/Ubuntu 18.04+最新稳定版

4.1.2 端口规划

服务端口说明
Shadowsocks8388默认端口(建议修改)
Shadowsocks自定义推荐使用10000-65535范围

4.2 shadowsocks-libev部署

shadowsocks-libev是C语言实现版本,性能优异,资源占用低。

4.2.1 安装shadowsocks-libev

Debian/Ubuntu安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 更新软件源
sudo apt update

# 安装依赖
sudo apt install --no-install-recommends build-essential autoconf libtool \
libssl-dev libpcre3-dev libev-dev asciidoc xmlto automake -y

# 从源码编译(推荐)
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init
./autogen.sh
./configure --disable-documentation
make
sudo make install

# 或者使用包管理器安装(较旧版本)
sudo apt install shadowsocks-libev -y

# 验证安装
ss-server -v

CentOS/RHEL安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装EPEL源
sudo yum install epel-release -y

# 安装依赖
sudo yum install gcc gettext autoconf libtool automake make pcre-devel \
asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y

# 从源码编译
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init
./autogen.sh
./configure --disable-documentation
make
sudo make install

4.2.2 创建配置文件

创建配置文件 /etc/shadowsocks-libev/config.json

1
2
3
4
5
6
7
8
9
10
11
12
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "your_strong_password_here",
"timeout": 300,
"method": "aes-256-gcm",
"fast_open": true,
"nameserver": "8.8.8.8",
"mode": "tcp_and_udp",
"plugin": "",
"plugin_opts": ""
}

配置项说明

参数说明示例值
server监听地址“0.0.0.0”
server_port监听端口8388
password连接密码16位以上随机字符串
timeout超时时间(秒)300
method加密算法“aes-256-gcm”
fast_openTCP Fast Opentrue
mode运行模式“tcp_and_udp”
nameserverDNS服务器“8.8.8.8”

4.2.3 多用户配置

创建多用户配置文件 /etc/shadowsocks-libev/config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"servers": [
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "password_for_user1",
"method": "aes-256-gcm",
"fast_open": true,
"mode": "tcp_and_udp"
},
{
"server": "0.0.0.0",
"server_port": 8389,
"password": "password_for_user2",
"method": "chacha20-ietf-poly1305",
"fast_open": true,
"mode": "tcp_and_udp"
}
]
}

4.2.4 创建systemd服务

创建服务文件 /etc/systemd/system/shadowsocks-libev.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Shadowsocks-libev Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

4.2.5 启动和管理服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 重载systemd配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start shadowsocks-libev

# 停止服务
sudo systemctl stop shadowsocks-libev

# 重启服务
sudo systemctl restart shadowsocks-libev

# 查看状态
sudo systemctl status shadowsocks-libev

# 开机自启
sudo systemctl enable shadowsocks-libev

# 查看日志
sudo journalctl -u shadowsocks-libev -f

4.2.6 验证服务

1
2
3
4
5
6
7
8
# 检查端口监听
sudo netstat -tlnp | grep ss-server

# 或使用ss命令
sudo ss -tlnp | grep ss-server

# 测试连接(从客户端)
curl --socks5 127.0.0.1:1080 http://ifconfig.me

4.3 Python版Shadowsocks部署

Python版本适合快速部署和开发测试。

4.3.1 安装Python版Shadowsocks

1
2
3
4
5
6
7
8
9
10
11
# 安装pip(如果未安装)
sudo apt install python3-pip -y

# 安装shadowsocks
sudo pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip

# 或安装特定版本
sudo pip3 install shadowsocks==3.0.0

# 验证安装
ssserver --version

4.3.2 Python版配置文件

创建配置文件 /etc/shadowsocks-python/config.json

1
2
3
4
5
6
7
8
9
10
{
"server": "0.0.0.0",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your_strong_password",
"timeout": 300,
"method": "aes-256-gcm",
"fast_open": true
}

4.3.3 启动Python版服务

1
2
3
4
5
6
7
8
9
10
11
# 前台运行(测试)
sudo ssserver -c /etc/shadowsocks-python/config.json

# 后台运行
sudo ssserver -c /etc/shadowsocks-python/config.json -d start

# 停止服务
sudo ssserver -c /etc/shadowsocks-python/config.json -d stop

# 重启服务
sudo ssserver -c /etc/shadowsocks-python/config.json -d restart

4.3.4 创建systemd服务

创建 /etc/systemd/system/shadowsocks-python.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Shadowsocks Python Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-python/config.json
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

4.4 防火墙配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Ubuntu/Debian (ufw)
sudo ufw allow 8388/tcp comment 'Shadowsocks TCP'
sudo ufw allow 8388/udp comment 'Shadowsocks UDP'
sudo ufw reload

# CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=8388/tcp
sudo firewall-cmd --permanent --add-port=8388/udp
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p tcp --dport 8388 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 8388 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

4.5 安全加固建议

4.5.1 修改默认端口

1
2
3
{
"server_port": 54321
}

建议使用1024-65535范围内的端口,避免使用8388等常见Shadowsocks默认端口。

4.5.2 使用强密码

1
2
3
4
5
6
7
# 生成32字节随机密码
openssl rand -base64 32

# 密码要求:
# - 长度至少16字符
# - 包含大小写字母、数字、特殊字符
# - 避免使用字典词汇

4.5.3 限制连接数

1
2
3
4
5
6
7
# 使用iptables限制单IP连接数
sudo iptables -A INPUT -p tcp --dport 8388 -m connlimit \
--connlimit-above 10 -j DROP

# 限制并发连接速率
sudo iptables -A INPUT -p tcp --dport 8388 -m conntrack \
--ctstate NEW -m limit --limit 10/minute -j ACCEPT

4.5.4 系统优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/sysctl.conf 添加以下配置

# TCP优化
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

# 启用TCP Fast Open
net.ipv4.tcp_fastopen = 3

# 应用配置
sudo sysctl -p

五、客户端使用指南

5.1 各平台客户端推荐

平台客户端特点推荐度
WindowsShadowsocks-Windows经典客户端,功能完善★★★★★
Windowsv2rayN多协议支持,SS作为子集★★★★★
WindowsClash Verge Rev规则丰富,界面美观★★★★★
macOSShadowsocksX-NG原生macOS客户端★★★★★
macOSClash Verge Rev规则丰富,支持SS★★★★★
macOSSurge专业网络工具,功能强大★★★★☆
Linuxshadowsocks-libev命令行,轻量高效★★★★★
LinuxShadowsocks-Qt5图形界面,跨平台★★★★☆
AndroidShadowsocks-Android官方Android客户端★★★★★
Androidv2rayNG多协议支持★★★★★
iOSShadowrocket功能全面,支持SS★★★★★
iOSQuantumult X专业代理工具★★★★★
iOSSurge iOS专业网络工具★★★★☆

5.2 Windows客户端配置

5.2.1 Shadowsocks-Windows配置

下载安装

  1. 从GitHub下载最新版本:https://github.com/shadowsocks/shadowsocks-windows/releases
  2. 解压到任意目录
  3. 运行 Shadowsocks.exe

基本配置

项目填写内容
服务器地址服务器IP或域名
服务器端口8388(或自定义端口)
加密方式aes-256-gcm
密码服务端设置的密码
代理端口1080(本地SOCKS5端口)

配置示例

1
2
3
4
5
6
服务器地址: 203.0.113.100
服务器端口: 8388
加密方式: aes-256-gcm
密码: your_strong_password_here
备注: SS节点1
本地代理端口: 1080

系统代理模式

模式说明
全局模式所有流量通过代理
PAC模式根据PAC规则选择代理
直连模式不使用代理

5.2.2 v2rayN配置Shadowsocks

  1. 打开v2rayN
  2. 点击"服务器" → “添加Shadowsocks服务器”
  3. 填写配置:
项目内容
地址服务器IP
端口8388
加密方式aes-256-gcm
密码服务端密码
别名SS节点

5.2.3 使用命令行客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用shadowsocks-libev命令行客户端
ss-local -s 203.0.113.100 -p 8388 -l 1080 -k "your_password" -m aes-256-gcm

# 使用配置文件
ss-local -c config.json

# 配置文件示例 (config.json)
{
"server": "203.0.113.100",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your_password",
"method": "aes-256-gcm"
}

5.3 macOS客户端配置

5.3.1 ShadowsocksX-NG配置

安装方式

1
2
3
4
5
# 使用Homebrew安装
brew install shadowsocksx-ng

# 或下载DMG安装
# https://github.com/shadowsocks/ShadowsocksX-NG/releases

配置步骤

  1. 打开ShadowsocksX-NG
  2. 点击菜单栏图标 → “Server Preferences”
  3. 点击"+"添加服务器
  4. 填写服务器信息:
1
2
3
4
5
Address: 203.0.113.100
Port: 8388
Encryption: aes-256-gcm
Password: your_password
Remarks: SS节点
  1. 点击"OK"保存
  2. 选择服务器并开启代理

5.3.2 终端使用Shadowsocks

1
2
3
4
5
6
7
8
9
# 使用shadowsocks-libev客户端
ss-local -s 203.0.113.100 -p 8388 -l 1080 -k "your_password" -m aes-256-gcm

# 后台运行
nohup ss-local -c /path/to/config.json &

# 配置环境变量使用
export ALL_PROXY=socks5://127.0.0.1:1080
curl http://ifconfig.me

5.3.3 Clash Verge Rev配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 配置文件示例
proxies:
- name: "SS节点"
type: ss
server: 203.0.113.100
port: 8388
cipher: aes-256-gcm
password: "your_password"
udp: true

proxy-groups:
- name: "代理选择"
type: select
proxies:
- "SS节点"
- DIRECT

rules:
- GEOIP,CN,DIRECT
- MATCH,代理选择

5.4 Linux客户端配置

5.4.1 安装shadowsocks-libev客户端

1
2
3
4
5
6
7
8
# Debian/Ubuntu
sudo apt install shadowsocks-libev -y

# CentOS
sudo yum install shadowsocks-libev -y

# Arch Linux
sudo pacman -S shadowsocks-libev

5.4.2 客户端配置文件

创建 /etc/shadowsocks-libev/client.json

1
2
3
4
5
6
7
8
9
10
11
{
"server": "203.0.113.100",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your_password",
"timeout": 300,
"method": "aes-256-gcm",
"fast_open": true,
"mode": "tcp_and_udp"
}

5.4.3 启动客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 前台运行(测试)
ss-local -c /etc/shadowsocks-libev/client.json

# 后台运行
ss-local -c /etc/shadowsocks-libev/client.json -f /tmp/ss-local.pid

# 创建systemd服务
sudo cat > /etc/systemd/system/ss-local.service << 'EOF'
[Unit]
Description=Shadowsocks Client
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/client.json
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl start ss-local
sudo systemctl enable ss-local

5.4.4 使用proxychains

1
2
3
4
5
6
7
8
9
10
# 安装proxychains
sudo apt install proxychains4 -y

# 配置 /etc/proxychains4.conf
[ProxyList]
socks5 127.0.0.1 1080

# 使用代理执行命令
proxychains4 curl http://ifconfig.me
proxychains4 wget http://example.com/file.zip

5.5 Android客户端配置

5.5.1 Shadowsocks-Android配置

安装应用

  1. 从GitHub下载:https://github.com/shadowsocks/shadowsocks-android/releases
  2. 或从Google Play安装

配置步骤

  1. 打开Shadowsocks应用
  2. 点击右上角"+"添加服务器
  3. 配置服务器信息:
项目内容
服务器名称203.0.113.100
远程端口8388
本地端口1080
加密方法aes-256-gcm
密码your_password
  1. 点击"✓"保存
  2. 点击连接开关启动

功能设置

功能说明
路由设置可配置分应用代理
UDP转发游戏等UDP应用需要开启
自动重连网络切换自动重连
DNS设置可配置远程DNS

5.5.2 v2rayNG配置

  1. 打开v2rayNG
  2. 点击右上角"+" → “手动输入配置”
  3. 选择类型"Shadowsocks"
  4. 填写配置:
1
2
3
4
5
别名: SS节点
服务器地址: 203.0.113.100
端口: 8388
加密方式: aes-256-gcm
密码: your_password

5.6 iOS客户端配置

5.6.1 Shadowrocket配置

应用介绍

Shadowrocket是iOS平台最流行的代理客户端之一,支持多种协议。

配置步骤

  1. 打开Shadowrocket
  2. 点击左上角"+"
  3. 类型选择"Shadowsocks"
  4. 填写配置:
1
2
3
4
5
6
类型: Shadowsocks
地址: 203.0.113.100
端口: 8388
加密算法: aes-256-gcm
密码: your_password
备注: SS节点
  1. 点击右上角"保存"
  2. 选择节点并开启连接

5.6.2 Quantumult X配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 配置文件示例

[server_local]
ss=203.0.113.100:8388, method=aes-256-gcm, password=your_password, fast-open=true

[server_remote]
;或使用订阅链接
;server_remote=订阅URL, tag=SS节点, update-interval=86400

[policy]
static=代理选择, direct, img-url=

[rule]
GEOIP,CN,DIRECT
FINAL,代理选择

5.6.3 订阅链接格式

Shadowsocks订阅链接通常使用Base64编码:

1
2
3
4
ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@203.0.113.100:8388#节点名称

解码后格式:
method:password@server:port#remarks

SIP002格式:

1
ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@203.0.113.100:8388/?plugin=plugin_url_encoded#节点名称

六、安全性注意事项

6.1 协议安全分析

安全提示:Shadowsocks协议设计时主要考虑绕过审查,并非为高安全场景设计。对于高安全需求,建议使用VPN或其他更安全的方案。

6.1.1 协议安全特点

方面评估说明
数据加密中高AEAD加密提供数据保密和完整性
身份认证预共享密钥认证
前向保密无完美前向保密(PFS)
流量伪装协议特征明显(需插件增强)
抗重放AEAD算法内置重放保护

6.1.2 潜在安全风险

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
风险1:预共享密钥问题
┌─────────────────────────────────────────┐
│ 所有用户共享同一密钥 │
│ → 密钥泄露影响所有用户 │
│ → 无法实现用户隔离 │
└─────────────────────────────────────────┘

风险2:无前向保密
┌─────────────────────────────────────────┐
│ 密钥泄露后可解密历史流量 │
│ → 录制的流量可被事后解密 │
└─────────────────────────────────────────┘

风险3:流量特征
┌─────────────────────────────────────────┐
│ 协议握手有固定模式 │
│ → 可能被深度包检测识别 │
└─────────────────────────────────────────┘

6.2 流量特征问题

6.2.1 可识别特征

Shadowsocks流量存在以下可识别特征:

特征说明
固定长度SaltAEAD加密开头有固定长度随机数
单向数据流上行和下行流量模式差异明显
连接特征长连接、低延迟特征
统计特征包大小分布、时间间隔分布

6.2.2 使用插件增强

Shadowsocks可通过插件增强流量伪装:

插件功能推荐度
obfsHTTP/TLS混淆已过时
simple-obfs简单混淆★★★☆☆
v2ray-pluginV2Ray协议伪装★★★★★
kcptunKCP加速+混淆★★★★☆

v2ray-plugin配置示例

1
2
3
4
5
6
7
8
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "your_password",
"method": "aes-256-gcm",
"plugin": "v2ray-plugin",
"plugin_opts": "server;tls;host=www.example.com"
}

6.3 安全加固措施

6.3.1 使用AEAD加密

1
2
3
4
5
6
7
{
"method": "aes-256-gcm"
}
// 或
{
"method": "chacha20-ietf-poly1305"
}

废弃不安全算法:不要使用 rc4-md5aes-*-cfb 等不安全算法。

6.3.2 定期更换密码

1
2
3
4
5
6
7
8
9
10
11
12
# 建议每月更换一次密码
# 生成新密码
NEW_PASSWORD=$(openssl rand -base64 32)

# 更新配置文件
sudo sed -i "s/\"password\": \".*\"/\"password\": \"$NEW_PASSWORD\"/" \
/etc/shadowsocks-libev/config.json

# 重启服务
sudo systemctl restart shadowsocks-libev

# 通知用户新密码

6.3.3 使用插件伪装

1
2
3
4
5
6
7
8
{
"server": "0.0.0.0",
"server_port": 443,
"password": "your_password",
"method": "aes-256-gcm",
"plugin": "v2ray-plugin",
"plugin_opts": "server;tls;cert=/path/to/cert.pem;key=/path/to/key.pem;host=www.example.com"
}

6.3.4 多端口负载均衡

1
2
3
4
5
6
7
{
"servers": [
{ "server_port": 10001, "password": "password1" },
{ "server_port": 10002, "password": "password2" },
{ "server_port": 10003, "password": "password3" }
]
}

6.4 日志与监控建议

6.4.1 配置详细日志

1
2
3
4
5
# 使用journalctl记录日志
sudo journalctl -u shadowsocks-libev -f

# 或配置文件日志(需要重新编译)
# ./configure --enable-documentation

6.4.2 监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# /usr/local/bin/ss-monitor.sh

# 检查服务状态
if ! systemctl is-active --quiet shadowsocks-libev; then
echo "Shadowsocks service is down!" | mail -s "SS Alert" admin@example.com
systemctl restart shadowsocks-libev
fi

# 检查连接数
CONN_COUNT=$(ss -tn state established | grep :8388 | wc -l)
if [ $CONN_COUNT -gt 100 ]; then
echo "High connection count: $CONN_COUNT" | mail -s "SS Alert" admin@example.com
fi
1
2
# 添加到cron定时任务
*/5 * * * * /usr/local/bin/ss-monitor.sh

6.4.3 流量统计

1
2
3
4
5
6
# 使用iptables统计流量
sudo iptables -A OUTPUT -p tcp --sport 8388 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8388 -j ACCEPT

# 查看流量统计
sudo iptables -L -n -v | grep 8388

七、常见问题排查

7.1 连接失败排查

症状:无法连接到Shadowsocks服务器

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. 检查网络连通性
ping 203.0.113.100

# 2. 检查端口是否开放
telnet 203.0.113.100 8388
# 或
nc -zv 203.0.113.100 8388

# 3. 检查服务端服务状态
sudo systemctl status shadowsocks-libev

# 4. 检查防火墙
sudo ufw status
sudo iptables -L -n | grep 8388

# 5. 查看服务端日志
sudo journalctl -u shadowsocks-libev -n 50

# 6. 检查配置文件语法
cat /etc/shadowsocks-libev/config.json | python3 -m json.tool

常见原因及解决方案

原因解决方案
端口未开放配置防火墙放行端口
服务未启动启动shadowsocks服务
密码错误核对密码配置
加密算法不匹配确保客户端服务端算法一致
IP被封禁更换服务器IP

7.2 速度慢问题

症状:连接成功但速度很慢

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 检查服务器网络
ping -c 10 203.0.113.100
mtr -r 203.0.113.100

# 2. 检查服务器负载
top
htop

# 3. 检查带宽
iperf3 -c 203.0.113.100

# 4. 检查DNS
dig www.google.com @8.8.8.8

# 5. 检查MTU设置
ip link show eth0

优化方案

问题解决方案
服务器负载高升级服务器配置
网络延迟高更换服务器位置
DNS解析慢配置快速DNS服务器
TCP参数未优化启用BBR,优化TCP参数

启用BBR加速

1
2
3
4
5
6
7
8
9
10
11
# 检查是否支持BBR
uname -r # 内核版本需 >= 4.9

# 启用BBR
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 验证BBR已启用
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr

7.3 频繁断线问题

症状:连接经常中断

可能原因及解决方案

原因解决方案
超时时间过短增加timeout参数
客户端休眠客户端设置保持连接
网络不稳定启用自动重连
服务器重启配置开机自启

配置优化

1
2
3
4
{
"timeout": 600,
"keep_alive": true
}
1
2
# 客户端自动重连(Android/iOS)
# 在客户端设置中启用"自动重连"选项

7.4 UDP问题排查

症状:TCP正常,UDP无法使用(游戏、语音通话等)

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 确认服务端支持UDP
cat /etc/shadowsocks-libev/config.json | grep -i udp

# 2. 检查防火墙UDP端口
sudo ufw allow 8388/udp
sudo iptables -A INPUT -p udp --dport 8388 -j ACCEPT

# 3. 测试UDP连通性
nc -uzv 203.0.113.100 8388

# 4. 检查客户端UDP设置
# 确认客户端启用了UDP转发

配置示例

1
2
3
{
"mode": "tcp_and_udp"
}

7.5 插件问题排查

症状:使用插件后无法连接

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 确认插件已安装
which v2ray-plugin
# 或
which obfs-server

# 2. 检查插件配置
cat /etc/shadowsocks-libev/config.json | grep plugin

# 3. 手动测试插件
v2ray-plugin -help

# 4. 检查端口冲突
netstat -tlnp | grep -E "(443|80)"

八、总结

8.1 协议优势

  1. 轻量高效:C语言实现,资源占用极低
  2. 部署简单:配置简单,一键部署
  3. 跨平台:支持所有主流操作系统
  4. 加密传输:AEAD加密提供数据安全
  5. 性能优秀:延迟低,吞吐量高
  6. 生态丰富:客户端选择多样

8.2 协议局限

  1. 无前向保密:密钥泄露可解密历史流量
  2. 单密钥认证:所有用户共享密钥
  3. 流量特征明显:易被深度包检测识别
  4. 协议设计简单:缺乏高级安全特性
  5. 依赖插件:需要插件才能实现流量伪装

8.3 适用场景建议

场景推荐方案说明
个人使用SS + 插件满足日常使用需求
低审查环境SS AEAD性能优先
高审查环境SS + v2ray-plugin流量伪装
高安全需求不推荐使用VMess/Trojan
多用户管理SS + 端口多开每用户独立端口
移动设备SS + chacha20性能更佳

8.4 推荐配置

最佳实践配置

1
2
3
4
5
6
7
8
9
10
11
{
"server": "0.0.0.0",
"server_port": 443,
"password": "strong_random_password_32chars",
"timeout": 600,
"method": "chacha20-ietf-poly1305",
"fast_open": true,
"mode": "tcp_and_udp",
"plugin": "v2ray-plugin",
"plugin_opts": "server;tls;cert=/path/to/cert.pem;key=/path/to/key.pem;host=www.example.com"
}

参考资料