烹小鲜也
← 回到 Notes

在 AWS Ubuntu 上搭一个 Shadowsocks 服务

从开端口到 BBR 提速,记录一份从零起步的完整流程,给以后的自己当备忘。

写下来主要是以后自己再开机器时不用重新翻资料。整个流程分两部分:先在 AWS 把端口和软件配好,然后做点性能调优。

第一步:准备 EC2 实例 + 开放端口

在 AWS EC2 控制台启动一台新实例,OS 选 Ubuntu 24.04 LTS(或 22.04 LTS),包管理最简单友好。

实例起来后到 安全组(Security Group) 编辑入站规则,这是最容易踩坑的一步:

  • 类型:自定义 TCP
  • 端口:你打算用的端口(不建议用默认 8388,太容易被主动探测)
  • 来源:0.0.0.0/0

如果想要 UDP 中继更好的性能(QUIC、游戏、视频通话等),同一端口再加一条 自定义 UDP 规则。

第二步:装 shadowsocks-libev

SSH 进 EC2 实例:

sudo apt update
sudo apt install shadowsocks-libev -y

-libev 是轻量级 C 实现,跑在 1 vCPU 的 EC2 上轻松。

第三步:写配置

sudo nano /etc/shadowsocks-libev/config.json

清空内容粘进去:

{
  "server": "0.0.0.0",
  "mode": "tcp_and_udp",
  "server_port": 你的端口,
  "local_port": 1080,
  "password": "在这里填一个长随机串",
  "timeout": 86400,
  "method": "chacha20-ietf-poly1305"
}

几个要点:

  • server_port 必须跟安全组里开的端口完全一致
  • method 优先 chacha20-ietf-poly1305(手机端性能优于 AES)或 aes-256-gcm
  • 密码自己生成,别照抄网上的示例密码
openssl rand -base64 24
# 或
head -c 24 /dev/urandom | base64

Ctrl+O 保存、Enter 确认、Ctrl+X 退出。

第四步:启动 + 开机自启

sudo systemctl restart shadowsocks-libev
sudo systemctl enable shadowsocks-libev
sudo systemctl status shadowsocks-libev

最后一条看到绿色 active (running) = 成功。

第五步:Shadowrocket 客户端配置

字段
类型Shadowsocks
服务器EC2 公网 IP
端口你设的端口
密码config.json 里的密码
算法chacha20-ietf-poly1305

完成后回首页打开顶部连接开关即可。

加分项:开启 TCP BBR(强烈建议)

Ubuntu 默认拥塞控制算法在跨国高延迟链路下表现差,开 Google 的 BBR 通常能把吞吐量提一个量级。

sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
sudo sysctl -p

最后一条执行完即生效,不用重启。验证:

sysctl net.ipv4.tcp_congestion_control
# 期望输出: net.ipv4.tcp_congestion_control = bbr

一些值得做的安全收尾

跑通是一回事,长期挂在公网是另一回事。建议再做:

  • 换非默认端口:不要 8388
  • 装 fail2ban 屏蔽暴力扫描sudo apt install fail2ban -y
  • 关闭 SSH 密码登录,只允许 key 登录(避免主机被爆破)
  • 定期看 journalctl -u shadowsocks-libev,留意异常连接

个人笔记里写真实密码可以,但永远不要把密码 commit 到任何公开仓库。这一篇里的密码字段都是占位符。