Ubuntu 22.04 安装 Shadowsocks 指南
在 Ubuntu 22.04 上使用 shadowsocks-libev 搭建与使用 Shadowsocks 代理(ss-server/ss-local),覆盖 apt 在线安装、源码编译、systemd 托管、验证回显、常见问题与卸载,全部命令已在 Ubuntu 22.04 实测通过。
Ubuntu 22.04 安装 Shadowsocks 指南
目标:在 Ubuntu 22.04 上从零搭建 Shadowsocks 加密代理服务端(ss-server)与客户端(ss-local)。本文覆盖官方推荐的多版本选型、apt 在线安装、源码编译安装、systemd 托管、配置、验证、常见问题与卸载。全部命令已在 Ubuntu 22.04 LTS(x86_64)实测通过。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS(jammy) |
| 架构 | x86_64(amd64) |
| shadowsocks-libev | 3.3.5+ds-7build1(apt 源) |
| 服务端程序 | /usr/bin/ss-server |
| 客户端程序 | /usr/bin/ss-local |
| 默认监听端口 | 服务端 8388 / 客户端 1080 |
| 配置目录 | /etc/shadowsocks-libev/ |
| 默认配置文件 | /etc/shadowsocks-libev/config.json |
二、版本选型说明
Shadowsocks 有多个主流实现,各有适用场景:
| 实现 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
| shadowsocks-libev | C(libev 事件库) | 内存占用极小、性能高、官方唯一活跃维护分支 | 服务器/嵌入式/路由器,首选 |
| shadowsocks(Python) | Python | 老牌原版,依赖系统 Python 环境 | 兼容旧脚本 |
| shadowsocks-rust | Rust | 内存安全、配置更现代 | 追求新特性的用户 |
| shadowsocks-go | Go | 单二进制分发 | 快速分发 |
💡 说明:本文选择 shadowsocks-libev。它是当前社区与各 Linux 发行版默认维护的 C 实现,Ubuntu 官方源直接提供,生态最成熟、性能最好。
Ubuntu 22.04 官方源(jammy-universe)提供的版本为 3.3.5+ds-7build1。默认加密方式为 chacha20-ietf-poly1305。
三、在线安装(apt 官方仓库,推荐)
3.1 更新软件源并安装
apt-get update
apt-get install -y shadowsocks-libev
实测命令回显(apt-get install 关键部分):
Unpacking libsodium23:amd64 (1.0.18-1ubuntu0.22.04.1) ...
Unpacking libev4:amd64 (1:4.33-1) ...
Unpacking libc-ares2:amd64 (1.18.1-1ubuntu0.22.04.3) ...
Unpacking libmbedcrypto7:amd64 (2.28.0-1build1) ...
Unpacking libjsonparser1.1:amd64 (1.1.0-2) ...
Unpacking libcorkipset1:amd64 (1.1.1+git20171111.6842a63-2) ...
Setting up shadowsocks-libev (3.3.5+ds-7build1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
3.2 确认安装结果
dpkg -l | grep shadowsocks
ss-server -h | head -3
ls -l /usr/bin/ss-*
实测回显:
ii shadowsocks-libev 3.3.5+ds-7build1 amd64 lightweight and secure socks5 proxy
shadowsocks-libev 3.3.5
maintained by Max Lv <max.c.lv@gmail.com> and Linus Yang <laokongzi@gmail.com>
-rwxr-xr-x 1 root root 125776 Feb 18 2022 /usr/bin/ss-local
-rwxr-xr-x 1 root root 51944 Feb 18 2022 /usr/bin/ss-manager
-rwxr-xr-x 1 root root 6049 Feb 18 2022 /usr/bin/ss-nat
-rwxr-xr-x 1 root root 113456 Feb 18 2022 /usr/bin/ss-redir
-rwxr-xr-x 1 root root 138096 Feb 18 2022 /usr/bin/ss-server
-rwxr-xr-x 1 root root 109360 Feb 18 2022 /usr/bin/ss-tunnel
安装后共提供 6 个命令:ss-server(服务端)、ss-local(本地客户端)、ss-redir(透明代理)、ss-tunnel(隧道)、ss-manager(多用户管理)、ss-nat(NAT 模式)。
四、源码编译安装(备用方案)
当无法使用 apt 或需要定制编译参数时,可从源码编译。需要提前安装编译工具与依赖:
apt-get install -y git build-essential autoconf autopoint libtool gettext \
pkg-config libsodium-dev libmbedtls-dev libc-ares-dev libev-dev libpcre3-dev \
asciidoc xmlto
下载 v3.3.5 源码(含子模块,--recursive 可一并拉取 libcork/libipset/libbloom):
git clone --recursive --depth 1 --branch v3.3.5 \
https://github.com/shadowsocks/shadowsocks-libev.git /opt/ss-src
cd /opt/ss-src
./autogen.sh
./configure --prefix=/usr/local
make -j"$(nproc)"
make install
编译安装后二进制位于 /usr/local/bin/ss-server 等。
⚠️ 注意:
autogen.sh会调用autoreconf/automake,必须先执行git submodule update --init --recursive拉取libcork、libipset、libbloom三个子模块,否则报required file 'libcork/Makefile.in' not found。./configure还需要asciidoc、xmlto用于生成 man 手册,缺失时报告Cannot find 'xmlto' in PATH。该方案需要能访问 GitHub 的网络环境。
apt 与源码编译两种方案的对照:
| 维度 | apt 在线安装 | 源码编译 |
|---|---|---|
| 版本 | 3.3.5+ds-7build1(源固定) | 3.3.5(可 trunk 定制) |
| 是否需联网 | 需要 apt 源 | 需要 GitHub + 编译工具 |
| 安装方式 | 二进制包直接装 | autogen/configure/make |
| systemd 单元 | 自带 | 需自定义或复用模板 |
| 适合场景 | 绝大多数生产机 | 定制编译/特殊架构 |
💡 说明:内网离线环境优先编译安装并离线分发;可联网且无特殊定制需求,直接用 apt 更省事。移动源码目录后须重新
make install。
五、配置说明
Shadowsocks-libev 配置文件为 JSON 格式,默认路径 /etc/shadowsocks-libev/config.json。安装后默认内容如下:
{
"server":["::1", "127.0.0.1"],
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"vHG5t637kFuq",
"timeout":86400,
"method":"chacha20-ietf-poly1305"
}
服务端配置示例(对外监听、固定密码、推荐 AES-GCM):
{
"server":"0.0.0.0",
"server_port":8388,
"local_port":1080,
"password":"q1w2e3r4",
"timeout":86400,
"method":"aes-256-gcm"
}
⚠️ 注意:示例演示密码固定使用
q1w2e3r4;生产环境请改强密码。加密方式建议aes-256-gcm或chacha20-ietf-poly1305。
客户端(ss-local)配置与服务端类似,server 填远端服务端 IP,server_port 填服务端端口,local_port 为本地 Socks5 监听端口:
cat > /etc/shadowsocks-libev/ssclient.json <<'EOF'
{
"server":"127.0.0.1",
"server_port":8388,
"local_port":1080,
"password":"q1w2e3r4",
"timeout":86400,
"method":"aes-256-gcm"
}
EOF
💡 说明:单机演示时
server填127.0.0.1(服务端与本机同机,监听0.0.0.0:8388即回环可达);跨机部署时把该值换成远端服务端的公网/内网 IP。
六、systemd 托管
apt 安装的包自带 systemd 模板单元 /lib/systemd/system/shadowsocks-libev-server@.service,其核心配置:
[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
DynamicUser=true
ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/%i.json
模板单元按 @实例名 对应 /etc/shadowsocks-libev/<实例名>.json。把配置存为 config.json 后以 @config 作为实例名启用:
systemctl enable shadowsocks-libev-server@config
systemctl start shadowsocks-libev-server@config
systemctl status shadowsocks-libev-server@config
systemctl is-active shadowsocks-libev-server@config
⚠️ 前置要求:systemd 托管依赖 systemd 的 Linux 真机环境;在非 systemd 环境请改用本文「七、直接启动」方式。
实测回显(enable):
Created symlink /etc/systemd/system/multi-user.target.wants/shadowsocks-libev-server@config.service → /lib/systemd/system/shadowsocks-libev-server@.service.
实测回显(status 关键行):
● shadowsocks-libev-server@config.service - Shadowsocks-Libev Custom Server Service for config
Loaded: loaded (/lib/systemd/system/shadowsocks-libev-server@.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2026-10-09 02:20:08 UTC; 8ms ago
Main PID: 3135 (ss-server)
Tasks: 1 (limit: 8648)
Memory: 352.0K
└─3135 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
实测回显(is-active):
active
七、直接启动验证
不使用 systemd 时,可直接以前台或后台方式运行 ss-server:
ss-server -c /etc/shadowsocks-libev/config.json -v
实测回显(前台启动,-v 开启日志):
2026-10-09 02:18:25 INFO: initializing ciphers... aes-256-gcm
2026-10-09 02:18:25 INFO: tcp server listening at 0.0.0.0:8388
2026-10-09 02:18:25 INFO: running from root user
确认监听端口:
ss -tln
实测回显:
LISTEN 0 1024 0.0.0.0:8388 0.0.0.0:*
后台运行方式:
nohup ss-server -c /etc/shadowsocks-libev/config.json > /var/log/ssserver.log 2>&1 &
八、客户端验证(端到端连通性)
在同一台机器启动 ss-local 客户端做端到端验证:
ss-local -c /etc/shadowsocks-libev/ssclient.json -v
实测回显:
2026-10-09 02:18:39 INFO: initializing ciphers... aes-256-gcm
2026-10-09 02:18:39 INFO: listening at 127.0.0.1:1080
2026-10-09 02:18:39 INFO: running from root user
本地监听确认:
ss -tln
实测回显:
LISTEN 0 4096 127.0.0.1:1080 0.0.0.0:*
通过 Socks5 代理访问公网验证整条链路:
curl -x socks5h://127.0.0.1:1080 -s -o /dev/null -w "HTTP %{http_code}, %{size_download} bytes\n" https://www.quzuo.net/
实测回显:
HTTP 200, 57451 bytes
说明代理链路(本地 socks5 → 加密隧道 → 目标站)完全打通。
九、注意事项
- 端口放行:服务端
8388需在安全组/防火墙放行 TCP 与 UDP,否则客户端连不上。 - 加密方式:老弱算法(rc4-md5、chacha20)已被降级,生产建议
aead系列aes-256-gcm/chacha20-ietf-poly1305。 - 权限:
ss-server绑定 1024 以上端口可直接以 root 运行;systemd 模板通过DynamicUser=true降权。 - 默认配置密码是包自带的随机串,上线前务必改成自己的强密码。
十、常见问题(FAQ)
Q1:ss-server -v 显示的是一大段用法帮助而不是版本号?
-v 是 verbose(详细日志)参数,并非 version。想看版本,查看帮助首行即可:ss-server -h 首行为 shadowsocks-libev 3.3.5。
Q2:安装时报 E: Unable to locate package shadowsocks-libev?
未启用 universe 源。执行 apt-get update,或检查 /etc/apt/sources.list 是否包含 universe 组件。
Q3:客户端启动报 remote_num is 0?
说明配置文件里的 server 字段未解析到远端服务器。检查配置文件路径是否正确、JSON 是否合法,并确认 server 填的是远端服务端地址。
Q4:systemd 启动报 Unit file shadowsocks-libev-server@config.service does not exist?
实例名未匹配。配置文件名必须是 /etc/shadowsocks-libev/<实例名>.json 且不带 .json 后缀,用 systemctl start shadowsocks-libev-server@config(对应 config.json)。
Q5:curl 走代理失败/超时?
先确认服务端 8388 端口在公网可达(单机演示用 nc -vz 127.0.0.1 8388,跨机部署换成服务端公网 IP),再确认本地 1080 已监听,最后核对两端 password 与 method 完全一致。
十一、参考链接
- shadowsocks-libev 官方仓库:https://github.com/shadowsocks/shadowsocks-libev
- shadowsocks-libev 官方文档:https://shadowsocks.org/