Ubuntu 上使用 Shadowsocks
在 Ubuntu 上使用 Shadowsocks 主要有两种方式:高性能的命令行客户端(推荐),以及操作更直观的图形界面客户端。
方法一:使用命令行客户端 shadowsocks-libev
shadowsocks-libev 是 C 语言编写的客户端,性能好、资源占用低,适合进阶用户。
- 安装客户端
在终端中依次执行以下命令:bashsudo apt update
sudo apt install shadowsocks-libev -y - 启动并设置开机自启
依次执行以下命令启动客户端并设置开机自动运行:bashsudo systemctl start shadowsocks-libev-local@config
sudo systemctl enable shadowsocks-libev-local@config可用sudo systemctl status shadowsocks-libev-local@config来检查运行状态。
配置服务器信息
创建并编辑配置文件 config.json:bashsudo nano /etc/shadowsocks-libev/config.json将以下内容粘贴进去,并替换为你的服务器信息。json{
"server":"你的服务器IP或域名",
"server_port":你的服务器端口,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"你的密码",
"timeout":300,
"method":"chacha20-ietf-poly1305"
}
注意:请将method(加密方式)替换为你的服务器实际使用的算法,推荐使用chacha20-ietf-poly1305或aes-256-gcm这类更安全的算法。
方法二:使用图形界面客户端 Shadowsocks-Qt5
如果你更喜欢图形界面,可以安装 Shadowsocks-Qt5。相比命令行客户端,它的操作更直观,可以方便地切换服务器和代理模式。
- 安装客户端
通过添加官方 PPA 源来安装:bashsudo add-apt-repository ppa:shadowsocks/ppa
sudo apt update
sudo apt install shadowsocks-qt5 -y - 配置与连接
- 在应用菜单中找到并打开 Shadowsocks-Qt5。
- 点击 “连接” -> “添加” -> “手动设置”。
- 在弹出的窗口中填写你的服务器地址、端口、密码和加密方式,保存即可。
- 在主界面选中你刚添加的服务器,点击 “连接”。
配置浏览器代理
客户端启动后,你需要在浏览器中进行设置才能开始使用。
- SwitchyOmega 插件(推荐):安装此浏览器插件,新建一个情景模式,代理协议选择
SOCKS5,地址填127.0.0.1,端口填1080(即上面配置中的local_port)。 - 系统设置(不推荐):部分应用也可在系统网络设置中手动填入上述 SOCKS5 代理信息。
常见问题与排查
- 连接失败怎么办?
- 首先,确认服务器地址、端口、密码、加密方式无误。
- 然后,检查本地防火墙或安全软件是否阻止了代理端口。
- 最后,确认服务器端 Shadowsocks 服务是否正常运行,端口是否开放。
- 如何找到客户端
ss-local?
安装后,命令行客户端通常是ss-local,可通过whereis sslocal查找其路径。 - 哪些加密方式比较安全?
务必使用 AEAD 加密算法,如aes-256-gcm或chacha20-ietf-poly1305,避免使用已不安全的aes-256-cfb。
在 Ubuntu 中设置 SOCKS5 代理有多种方式,你可以根据需要选择临时生效、永久生效或仅对特定应用生效的方法。下面介绍几种常用方案。
假设你的 SOCKS5 代理服务运行在 127.0.0.1:1080(例如 Shadowsocks 的本地监听端口),请根据你的实际地址和端口修改。Ubuntu代理设置
方法一:通过环境变量设置(命令行/Terminal 生效)
适用于在终端中运行的命令行程序(如 curl、wget、apt 等)。
- 临时设置(仅当前终端窗口有效)bashexport all_proxy="socks5://127.0.0.1:1080"
export http_proxy="socks5://127.0.0.1:1080"
export https_proxy="socks5://127.0.0.1:1080"如果需要用户名密码认证:bashexport all_proxy="socks5://用户名:密码@127.0.0.1:1080" - 永久设置(对所有新终端生效)
将上述 export 命令添加到你的 shell 配置文件中(如~/.bashrc、~/.zshrc):bashecho 'export all_proxy="socks5://127.0.0.1:1080"' >> ~/.bashrc
echo 'export http_proxy="socks5://127.0.0.1:1080"' >> ~/.bashrc
echo 'export https_proxy="socks5://127.0.0.1:1080"' >> ~/.bashrc
source ~/.bashrc - 取消代理bashunset all_proxy http_proxy https_proxy
注意:环境变量方式对sudo命令通常无效,因为sudo会重置环境。如需让sudo也使用代理,可使用sudo -E保留环境变量,或修改/etc/sudoers中的env_keep。
方法二:系统级代理设置(GUI 桌面环境)
Ubuntu 默认的 GNOME 桌面支持图形化配置系统代理,但仅支持 HTTP/HTTPS 代理,不直接支持 SOCKS5。不过你可以安装 switch 工具或使用 gsettings 来设置 SOCKS。
使用 gsettings 命令(适用于 GNOME):
bash
设置 SOCKS5 代理
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.socks host '127.0.0.1'
gsettings set org.gnome.system.proxy.socks port 1080
如果只想让某些应用使用,可保持 mode 为 'none'
通过设置面板:
- 打开“设置” → “网络” → “网络代理”。
- 将“方式”选为“手动”。
- 虽然界面只显示 HTTP/HTTPS/FTP 输入框,但部分应用(如 Firefox)会读取这个 SOCKS 设置。不过大多数应用仍不识别。
方法三:使用代理工具统一管理(推荐)
为了避免环境变量和系统设置的混乱,可以使用 proxychains 或 tsocks 强制任何程序通过 SOCKS5 代理。
安装 proxychains
bash
sudo apt install proxychains4 -y
配置 proxychains
编辑 /etc/proxychains4.conf:
bash
sudo nano /etc/proxychains4.conf
找到 [ProxyList] 部分,添加你的 SOCKS5 代理(删除或注释其他类型):
text
socks5 127.0.0.1 1080
如果代理需要用户名密码,格式为:
text
socks5 127.0.0.1 1080 用户名 密码
另外,确保 strict_chain 或 dynamic_chain 未被注释,并注释掉 random_chain。
使用方式
在要代理的命令前加上 proxychains4:
bash
proxychains4 curl ip.sb
proxychains4 firefox # 启动火狐浏览器并通过代理
proxychains4 apt update
优点:无需修改程序本身,无需环境变量,对任意程序(包括ping、ssh等)有效。
方法四:让特定应用单独使用 SOCKS5 代理
- 浏览器(Firefox/Chrome):安装 SwitchyOmega 等插件,配置 SOCKS5 代理(地址
127.0.0.1,端口1080)。 - 终端工具:如
curl --socks5 127.0.0.1:1080 https://example.com;git config --global http.proxy 'socks5://127.0.0.1:1080'。 - 系统包管理器(apt):apt 本身不支持 SOCKS5,但可以通过
proxychains apt ...实现。
验证代理是否生效
bash
查看当前出口 IP
curl ip.sb
如果设置了环境变量,可以用 curl -v 查看是否使用代理
curl -v https://www.google.com 2>&1 | grep "SOCKS5"
常见问题
- 为什么设置了环境变量,
sudo命令不走代理?
因为sudo默认重置环境变量。解决:使用sudo -E保留环境,或修改/etc/sudoers添加Defaults env_keep += "all_proxy http_proxy https_proxy"。 - 代理速度慢或连接失败?
- 检查 SOCKS5 服务端是否正常运行(如
systemctl status shadowsocks-libev)。 - 确认端口 1080 监听在
127.0.0.1而非::1或外部接口。 - 尝试关闭系统防火墙或允许本地回环。
- 检查 SOCKS5 服务端是否正常运行(如
- 如何让 Docker 容器使用 SOCKS5 代理?
可在容器启动时传递环境变量,或使用docker run -e all_proxy=socks5://...。
选择最适合你使用场景的方法即可。通常,命令行推荐 proxychains,开发环境推荐 环境变量,浏览器推荐 插件。
评论