Ubuntu 22.04 安装 Shadowsocks 指南

在 Ubuntu 22.04 上使用 shadowsocks-libev 搭建与使用 Shadowsocks 代理(ss-server/ss-local),覆盖 apt 在线安装、源码编译、systemd 托管、验证回显、常见问题与卸载,全部命令已在 Ubuntu 22.04 实测通过。

ShadowsocksShadowsocks2026/10/09

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-libev3.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-libevC(libev 事件库)内存占用极小、性能高、官方唯一活跃维护分支服务器/嵌入式/路由器,首选
shadowsocks(Python)Python老牌原版,依赖系统 Python 环境兼容旧脚本
shadowsocks-rustRust内存安全、配置更现代追求新特性的用户
shadowsocks-goGo单二进制分发快速分发

💡 说明:本文选择 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 完全一致。

十一、参考链接