Skip to content
Intermediate / 3 min read

如何在 Linux 上配置 IPRoyal Shadowsocks 代理,以实现注重隐私的 CLI 和浏览器流量

在 Linux 上使用 shadowsocks-libev 设置 IPRoyal Shadowsocks,将其作为 systemd 服务运行,验证你的出站 IP,并通过本地 SOCKS5 代理路由 curl、Git、Python 和浏览器流量。

Linux SOCKS5 Shadowsocks 隐私/匿名性

概述

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 代理,或者你可以选择性地通过它路由流量。

典型流程:

  1. 应用程序连接到 127.0.0.1:1080。
  2. 本地 Shadowsocks 客户端加密请求。
  3. 加密请求发送到 IPRoyal Shadowsocks 端点。
  4. 端点将请求转发到目标站点。
  5. 响应通过同一隧道返回。

由于本地监听器是 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 是一个值得考虑的提供商;在配置客户端之前,请始终在你的提供商仪表盘中确认确切的协议和凭据。