Skip to content
Beginner / 3 min read

Linux 上的 Socks5 配置器:使用 Proxychains 让应用通过 SOCKS5 代理路由

Linux 没有单一的 SOCKS5 配置器应用,因此本指南将配置 proxychains-ng 和 redsocks,实现按命令和系统级的 SOCKS5 路由,验证你的 IP 是否确实已更改,并说明何时更适合使用 WireGuard 隧道。

Linux SOCKS5 WireGuard 隐私/匿名性

概述

Windows 和 macOS 用户有一个图形化的“SOCKS5 配置器”窗口。Linux 不自带这样的工具,因此同样的工作由两个需要手动配置的小型实用程序完成:

  • proxychains-ng — 包装单个命令,并强制其出站 TCP 连接通过你的 SOCKS5 代理。
  • redsocks — 通过 iptables 透明重定向流量,更接近系统级行为。

本教程涵盖这两种工具,展示如何证明你的 IP 地址确实已更改,并说明在哪些情况下按应用使用 SOCKS5 是错误的选择,而 WireGuard 隧道——例如来自 NordLayer 的专用网关——才是更合适的方案。

先决条件

  • Linux 桌面或服务器。命令针对 Debian/Ubuntu、Fedora 和 Arch 给出。
  • 用于安装软件包和编辑配置的 sudo 权限。
  • 可用的 SOCKS5 端点:主机、端口,以及如果提供商要求身份验证,则还需要用户名/密码。
  • 已安装 curl 用于验证(大多数发行版默认已安装)。

步骤

1. 在改动系统之前验证 SOCKS5 端点

始终先确认代理本身可以正常工作,这样你就不会同时调试两个问题:

curl -x socks5h://YOUR_USERNAME:YOUR_PASSWORD@PROXY_HOST:1080 https://ifconfig.me/ip

这里有两个细节很重要:

  • socks5h:// 要求代理为你解析 DNS 名称。普通的 socks5:// 会在本地解析,可能会泄露你访问的主机名。
  • 如果你的密码包含 @、: 或 /,请对其进行百分号编码,或使用 curl --proxy-user,而不是将其嵌入 URL。

2. 安装 proxychains-ng

选择适合你的发行版的命令:

# Debian / Ubuntu
sudo apt update && sudo apt install -y proxychains4
# Fedora
sudo dnf install -y proxychains-ng
# Arch
sudo pacman -S proxychains-ng

确认该二进制文件以 proxychains4(Debian/Ubuntu)或 proxychains(Fedora/Arch)的形式可用:

proxychains4 -h || proxychains -h

3. 配置代理链

打开配置文件(路径因软件包而异),并编辑 [ProxyList] 块:

sudo nano /etc/proxychains4.conf   # Debian / Ubuntu
sudo nano /etc/proxychains.conf    # Fedora / Arch
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks5 203.0.113.10 1080 YOUR_USERNAME YOUR_PASSWORD

设置说明:

  • proxy_dns 强制 DNS 查询通过代理进行,而不是使用你的本地解析器。
  • strict_chain 按顺序使用每个代理。如果你希望跳过失败的跳点,请使用 dynamic_chain;或者使用 random_chain 配合 chain_len 在多个条目之间轮换。
  • 将 203.0.113.10 1080 替换为你的提供商的主机和端口;如果端点不需要身份验证,则去掉用户名/密码参数。

4. 测试命令现在是否从代理 IP 出去

将直接请求与包装后的请求进行比较:

curl -s https://ifconfig.me/ip          # 你的正常 IP
proxychains4 -q curl -s https://ifconfig.me/ip   # 应显示代理 IP

-q 标志会抑制 proxychains 的横幅输出,因此你只会看到响应。你也可以用同样的方式包装 GUI 应用程序:

proxychains4 -q chromium https://ifconfig.me/ip

如果两条命令返回相同的 IP,请先停在这里,并在继续之前按照故障排除部分进行排查。

5. 为配合的工具设置代理环境变量

许多命令行工具会读取标准代理变量,当你不想为每条命令都加前缀时,这很有用:

export ALL_PROXY="socks5h://YOUR_USERNAME:YOUR_PASSWORD@PROXY_HOST:1080"
export HTTPS_PROXY="$ALL_PROXY"
export HTTP_PROXY="$ALL_PROXY"

curl、wget、git、pip 和 Python 的 requests 默认会遵循这些变量,但许多其他应用程序会完全忽略它们。请将其视为便利层,而不是系统级配置。

6. 可选:使用 redsocks 进行透明重定向

如果你需要让完全不了解代理的应用程序自动走代理,redsocks 加上一条 iptables 规则即可完成。创建配置:

base {
    log_debug = off;
    log_info = on;
    daemon = on;
    redirector = iptables;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 12345;
    ip = 203.0.113.10;
    port = 1080;
    type = socks5;
    login = "YOUR_USERNAME";
    password = "YOUR_PASSWORD";
}

启动服务并添加重定向规则。第一条规则至关重要:发往代理本身的流量绝不能再次重定向回代理,否则会造成循环。

sudo systemctl restart redsocks

sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -d 203.0.113.10 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

Redsocks 只重定向 TCP。UDP 流量、ICMP 以及任何绕过 iptables 的内容仍会通过你的正常连接离开,因此这不等同于 VPN。

Linux 上的 SOCKS5 与 WireGuard 网关对比

按应用使用 SOCKS5 和 WireGuard 隧道以不同方式解决重叠的问题:

需求 使用 proxychains/redsocks 的 SOCKS5 WireGuard 隧道(例如专用网关)
范围 一次一个命令或应用 设备上的每个应用和协议
DNS 处理 取决于 socks5h 和 proxy_dns 在隧道内解析
UDP 和 ICMP 不由 proxychains 覆盖 通过隧道传输
出口 IP SOCKS5 提供商分配的任何 IP 稳定、可加入允许列表的专用网关 IP
配置工作量 低,但每个应用都要重复 一次性隧道设置
最适合 快速的按命令路由和测试 整机隐私、团队访问、允许列表自动化

当你只需要一个工具从另一个 IP 出去时,选择 SOCKS5 路线。当整台机器——或整个团队——需要一致、加密的路由时,选择 WireGuard 隧道。像 NordLayer 这样的托管选项提供带专用网关的 WireGuard 隧道、面向团队的入门引导,以及比按使用量计费更易于预测的固定月费。

故障排除

proxychains 对特定二进制文件无效

proxychains 通过预加载共享库来工作,因此无法拦截静态链接的程序、Go 二进制文件或 setuid 可执行文件。使用以下命令检查:

ldd $(which YOUR_APP)

如果输出显示“not a dynamic executable”,请改用 redsocks——或者让整台机器通过 WireGuard 隧道路由,它在应用层之下运行。

你的 IP 看起来仍未改变

  • 确认你使用的是 socks5h://,或者已启用 proxy_dns;普通的 socks5:// URL 会在本地解析名称。
  • 检查提供商是否需要身份验证,以及你的凭据是否正确。
  • 首先用 curl 重新测试。如果 curl 显示代理 IP,但应用没有,则说明该应用绕过了预加载。

连接超时或挂起

  • 增大 /etc/proxychains4.conf 中的 tcp_connect_time_out。
  • 确认从你的网络可以访问该代理主机上的该端口(出站防火墙通常会阻止非标准端口)。
  • 减少链中的跳数——过长的严格链会成倍增加延迟。

redsocks 循环或丢弃所有内容

针对代理自身 IP 的 RETURN 规则必须位于 REDSOCKS 链的最前面。如果你编辑规则的顺序有误,请清空并重建:

sudo iptables -t nat -F REDSOCKS

总结

Linux 用 proxychains4 实现按命令路由,用 redsocks 实现透明 TCP 重定向,替代了图形化 SOCKS5 配置器。使用 curl 验证端点,保持启用 proxy_dns 以避免 DNS 泄露,并记住这两种工具都不覆盖 UDP 或静态链接的二进制文件。当你需要设备上的每个应用和协议都使用一个稳定、专用的出口 IP 时——尤其是对团队而言——WireGuard 隧道,例如来自 NordLayer 的专用网关,是更简单、更可靠的选择。