如何在 Linux 上配置 IPRoyal Shadowsocks 代理,以实现注重隐私的 CLI 和浏览器流量
在 Linux 上使用 shadowsocks-libev 设置 IPRoyal Shadowsocks,将其作为 systemd 服务运行,验证你的出站 IP,并通过本地 SOCKS5 代理路由 curl、Git、Python 和浏览器流量。
概述
Shadowsocks 是一种基于 SOCKS5 的加密代理协议。在 Linux 上,本地 Shadowsocks 客户端监听 127.0.0.1:1080,加密流量并将其转发到远程 Shadowsocks 端点。这样,你就可以通过 IPRoyal Shadowsocks 端点路由选定的 CLI 工具、浏览器或系统流量,而无需更改整个网络栈。
本教程展示如何使用 shadowsocks-libev 在 Linux 上配置 IPRoyal Shadowsocks 代理,将客户端作为 systemd 服务运行,验证你的出站 IP,并通过本地 SOCKS5 监听器路由 curl、git、Python 和 Firefox 等常用工具。使用 IPRoyal 作为示例提供商,因为它列出了支持 HTTP、SOCKS5 和 Shadowsocks 的住宅、ISP 和数据中心代理。如果你使用其他提供商,请将凭据和服务器详细信息替换为你自己的。
先决条件
- 带有 systemd 的 Linux 发行版,例如 Ubuntu、Debian、Fedora、Arch Linux,或兼容的服务器或桌面环境。
- 用于安装和服务管理的
sudo或 root 权限。 - 拥有 Shadowsocks 凭据的 IPRoyal 账户:服务器地址、服务器端口、密码和加密方法。
- 基本熟悉终端和
nano或vim等文本编辑器。 - 可选:用于测试的
curl。
IPRoyal Shadowsocks 如何融入 Linux 设置
Shadowsocks 不是 HTTP 代理。它会创建到远程端点的加密隧道,并公开本地 SOCKS5 代理。你的应用程序必须配置为使用该本地 SOCKS5 代理,或者你可以选择性地通过它路由流量。
典型流程:
- 应用程序连接到
127.0.0.1:1080。 - 本地 Shadowsocks 客户端加密请求。
- 加密请求发送到 IPRoyal Shadowsocks 端点。
- 端点将请求转发到目标站点。
- 响应通过同一隧道返回。
由于本地监听器是 SOCKS5,你可以将其与支持 SOCKS5 或 socks5h(带远程 DNS 解析的 SOCKS5)的工具一起使用。当你希望 DNS 查询通过代理而不是在本地机器上解析时,请使用 socks5h。
步骤
步骤 1:在 Linux 上安装 Shadowsocks 客户端
安装 shadowsocks-libev,它提供 ss-local 客户端,并且与 systemd 配合良好。
对于 Debian 或 Ubuntu:
sudo apt update
sudo apt install shadowsocks-libev
对于 Fedora 或 RHEL 系列发行版:
sudo dnf install shadowsocks-libev
对于 Arch Linux:
sudo pacman -S shadowsocks-libev
如果你的发行版没有打包 shadowsocks-libev,你可以从包管理器安装 shadowsocks-rust,或从源代码构建它。下面的配置概念相同,尽管二进制文件名称可能不同。
步骤 2:创建 IPRoyal Shadowsocks 环境文件
创建一个包含 IPRoyal Shadowsocks 端点详细信息的环境文件。将占位符值替换为 IPRoyal 仪表盘中的确切服务器、端口、密码和方法。
sudo mkdir -p /etc/iproyal
sudo nano /etc/iproyal/shadowsocks.env
添加以下值:
SS_SERVER=YOUR_IPROYAL_SERVER
SS_PORT=8388
SS_PASSWORD=YOUR_IPROYAL_PASSWORD
SS_METHOD=aes-256-gcm
SS_LOCAL_ADDRESS=127.0.0.1
SS_LOCAL_PORT=1080
注意:
- 使用 IPRoyal 提供的确切加密方法。常见方法包括
aes-256-gcm、chacha20-ietf-poly1305和aes-128-gcm,但端点必须支持你选择的方法。 - 如果 IPRoyal 提供的是 SOCKS5 端点而不是 Shadowsocks 端点,请使用 SOCKS5 客户端配置或 ProxyChains 之类的工具,而不是 Shadowsocks。
- 如果文件包含凭据,请保持仅 root 可读:
sudo chmod 600 /etc/iproyal/shadowsocks.env
步骤 3:在前台测试配置
在创建服务之前,在前台运行客户端,以确认凭据和网络路径正常工作。
sudo ss-local -s YOUR_IPROYAL_SERVER -p 8388 -b 127.0.0.1 -l 1080 -k YOUR_IPROYAL_PASSWORD -m aes-256-gcm -u -v
保持该终端打开。在第二个终端中,测试本地 SOCKS5 监听器:
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
如果该命令返回的 IP 地址与你正常的公共 IP 不同,则隧道正常工作。在第一个终端中按 Ctrl+C 停止前台客户端。
步骤 4:将 Shadowsocks 客户端作为 systemd 服务运行
创建一个 systemd 单元,使客户端在启动时启动,并在失败后重启。
sudo nano /etc/systemd/system/iproyal-shadowsocks.service
添加:
[Unit]
Description=IPRoyal Shadowsocks local client
After=network-online.target
Wants=network-online.target
[Service]
EnvironmentFile=/etc/iproyal/shadowsocks.env
ExecStart=/usr/bin/ss-local -s ${SS_SERVER} -p ${SS_PORT} -b ${SS_LOCAL_ADDRESS} -l ${SS_LOCAL_PORT} -k ${SS_PASSWORD} -m ${SS_METHOD} -u
Restart=on-failure
RestartSec=5
LimitNOFILE=32768
[Install]
WantedBy=multi-user.target
如果你的 ss-local 二进制文件在其他位置,请调整 ExecStart 路径。你可以使用以下命令找到它:
command -v ss-local
如果你的提供商不支持 UDP 中继,请从 ExecStart 行中删除 -u。
重新加载 systemd 并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now iproyal-shadowsocks
sudo systemctl status iproyal-shadowsocks
步骤 5:验证本地 SOCKS5 监听器和出站 IP
检查客户端是否在本地监听:
ss -ltnp | grep 1080
然后通过代理验证出站 IP:
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
curl --socks5-hostname 127.0.0.1:1080 https://ipinfo.io/ip
将结果与直接连接进行比较:
curl https://ifconfig.me
如果地址不同,说明本地客户端正在通过 IPRoyal Shadowsocks 端点转发流量。如果相同,请参阅下面的故障排除部分。
步骤 6:通过本地 SOCKS5 代理路由 CLI 工具
将本地 SOCKS5 监听器用于支持 SOCKS5 的工具。优先使用 socks5h,以便 DNS 解析通过代理进行。
对于 curl:
curl --socks5-hostname 127.0.0.1:1080 https://httpbin.org/ip
对于 git:
git config --global http.proxy socks5h://127.0.0.1:1080
git config --global https.proxy socks5h://127.0.0.1:1080
稍后要删除这些 Git 代理设置:
git config --global --unset http.proxy
git config --global --unset https.proxy
对于 Python requests,安装 SOCKS 支持并使用代理:
python3 -m pip install 'requests[socks]'
import requests
proxies = {
'http': 'socks5h://127.0.0.1:1080',
'https': 'socks5h://127.0.0.1:1080',
}
response = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=30)
print(response.json())
对于 wget,请使用兼容 SOCKS5 的包装器或受支持的环境变量。在进行 SOCKS5 测试时,curl 和 Python 通常提供最明确的行为。
步骤 7:配置浏览器或桌面代理
对于 Firefox,打开“设置”,搜索“网络设置”,选择“手动代理配置”,并设置:
- SOCKS 主机:
127.0.0.1 - 端口:
1080 - SOCKS v5:选中
- 使用 SOCKS v5 时代理 DNS:启用
对于 GNOME 桌面环境,你可以手动设置系统代理:
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
要恢复为直接连接:
gsettings set org.gnome.system.proxy mode 'none'
并非每个应用程序都遵循系统代理设置。如有疑问,请直接在应用程序中配置代理,或使用支持 SOCKS5 的包装器。
步骤 8:确认 DNS 和泄漏行为
运行一个报告解析器和 IP 的请求:
curl --socks5-hostname 127.0.0.1:1080 https://ipinfo.io/json
检查报告的 IP 是否属于代理端点。因为 socks5h 将主机名发送到代理进行解析,所以该请求避免了本地 DNS 查询。如果你改用 socks5://,主机名可能会先在本地解析,这可能会泄漏 DNS 信息。
故障排除
服务启动但 IP 没有变化
- 确认你的测试命令使用
--socks5-hostname或socks5h://,而不是直接连接。 - 检查服务日志:
journalctl -u iproyal-shadowsocks -e
- 验证服务器地址、端口、密码和加密方法是否与 IPRoyal 仪表盘完全匹配。
- 使用不同的目标(如
https://httpbin.org/ip)进行测试,以排除特定站点的行为。
ss-local 因身份验证或方法错误而失败
- 加密方法必须与远程端点匹配。如果 IPRoyal 提供
chacha20-ietf-poly1305,请不要使用aes-256-gcm。 - 检查密码字段中是否有尾随空格或隐藏字符。
- 如果你的密码包含特殊字符,请在环境文件中正确引用它,或使用你的客户端支持的配置文件。
- 以详细模式运行客户端以查看确切错误:
sudo ss-local -s YOUR_IPROYAL_SERVER -p 8388 -b 127.0.0.1 -l 1080 -k YOUR_IPROYAL_PASSWORD -m aes-256-gcm -u -v
127.0.0.1:1080 连接被拒绝
- 另一个服务可能已经使用端口 1080。使用以下命令检查:
sudo ss -ltnp | grep 1080
- 将环境文件中的
SS_LOCAL_PORT更改为另一个值,例如1081,重启服务,并更新你的客户端命令。 - 确认 systemd 服务确实正在运行:
systemctl is-active iproyal-shadowsocks
超时或吞吐量缓慢
- 如果你的仪表盘提供多个位置,请尝试不同的 IPRoyal 端点或区域。
- 如果端点不支持 UDP,请从
ExecStart行中删除-u,以仅 TCP 模式进行测试。 - 检查你的本地防火墙和网络策略。某些企业或校园网络会阻止非标准出站端口。
- 仅在测试时减少超时值;非常低的超时值可能会在慢速链路上导致误报失败。
浏览器流量未使用代理
- 在 Firefox 中,确保选中 SOCKS v5,并启用“使用 SOCKS v5 时代理 DNS”。
- 如果使用 GNOME 设置,请记住只有部分应用程序遵循系统代理。
- 使用
curl --socks5-hostname测试同一目标,以确认本地 SOCKS5 监听器独立于浏览器正常工作。
总结
你通过在 Linux 上安装 shadowsocks-libev、创建本地客户端配置、将其作为 systemd 服务运行,并通过本地 SOCKS5 监听器验证出站 IP,配置了 IPRoyal Shadowsocks 端点。你还学习了如何通过 127.0.0.1:1080 路由 curl、Git、Python requests 和浏览器流量,以及如何排除常见的身份验证、端口、DNS 和超时问题。当你需要支持 SOCKS5 和 Shadowsocks 风格支持的住宅、ISP 或数据中心代理时,IPRoyal 是一个值得考虑的提供商;在配置客户端之前,请始终在你的提供商仪表盘中确认确切的协议和凭据。