同一条 SOCKS5 线路,写进系统环境变量、写进某个程序的启动参数、写进容器内部,能生效的范围完全不同——服务器上「代理配了却没生效」,多数不是线路不通,而是挂错了层。23 家平台全部支持 SOCKS5 / HTTP 这一层,起步 2.24 元/月起;容器和命令行也只认这一层,L2TP 那类整机隧道得回到宿主机或路由器上做。
🔗 快速入口:一站式注册入口 | 价格中心(23 家横向对照) | 代理工具中心
| 支持的协议层(23 家平台) | SOCKS5 / HTTP 全部支持 |
| L2TP / PPTP 整机隧道 | 19 家支持 · 均为国内节点 |
| 容器 / 命令行能用的层 | 只有 SOCKS5 / HTTP |
| 国内平台起步价区间 | 2.24 元/月 ~ 20 元/月 |
挂代理有三个层,写在哪一层,管的就是哪一层
服务器上的程序会不会走代理,取决于它的网络请求在发出前有没有被「接走」。这件事在系统里分三层发生,而且三层之间不自动传递——这也是同一份账号密码,在一台机器上能用、换个地方就失效的根源。
系统层靠环境变量生效,常见的三个是 ALL_PROXY、http_proxy、https_proxy。它们的作用范围是「当前 shell 及其子进程」,只对会主动读这些变量的程序有效。进程层靠启动参数或工具自己的配置文件,例如 curl 的 --proxy、git 的 http.proxy、pip 的 --proxy;范围最窄,但最精确,出问题也最容易定位。容器层是一个独立的进程空间,容器里的程序读到的是容器自己的环境变量,宿主机 export 的那些不会跟进去。
| 层级 | 怎么设 | 谁会被代理 | 最常见的失效原因 |
|---|---|---|---|
| 系统层 | shell 里 export 环境变量 | 会读取这些变量的程序 | 程序不读环境变量(自带网络栈 / GUI 工具) |
| 进程层 | 启动参数、工具配置文件 | 只有这一个程序、这一次调用 | 参数写在另一个程序上,或配置文件不是它读的那份 |
| 容器层 | docker run -e / compose environment | 容器内部的进程 | 只在宿主机设了变量,没传进容器 |
排查顺序建议从下往上反着来:先在目标程序里直接测一次出口,确认它到底走没走代理,再回头找是哪一层没生效。反过来先怀疑线路,通常要绕很久。
HTTP 代理和 SOCKS5 是两回事,工具认的变量也不一样
代理协议实际分成两大类:应用代理(SOCKS5、HTTP/HTTPS)和隧道协议(L2TP、PPTP)。命令行走的是应用代理这一类,而这一类里又有两种封装:HTTP 代理基于 HTTP CONNECT(RFC 7231),SOCKS5 是会话层协议(RFC 1928),支持 TCP 与 UDP。
问题就出在这里——变量名和协议类型不是一一对应的。http_proxy / https_proxy 这两个名字暗示的是 HTTP 代理,很多工具(以及不少老版本)只把这两个变量当 HTTP 代理用:你往里填一个 socks5:// 开头的地址,一部分工具直接报错,另一部分静默忽略、回退成直连。后者最坑,因为程序照样跑通,只是出口是你的服务器。
SOCKS5 的正确写法是走 ALL_PROXY,或者在命令行里显式指定协议。以回显 IP 的服务做验证,两行就能看出效果:
export ALL_PROXY=socks5h://user:pass@ip:port
curl https://api.ipify.org
如果 ALL_PROXY 在你的工具链里不管用,最稳的兜底是 proxychains4:它用预加载的方式接管进程的所有 TCP 连接,无论这个程序原本认不认代理变量。代价是它作用于整个进程,不能只挑某个域名分流。
| 你要走的东西 | 该用哪个变量 / 参数 | 说明 |
|---|---|---|
| HTTP / HTTPS 代理 | http_proxy、https_proxy |
值是 http://user:pass@ip:port,兼容性最好 |
| SOCKS5 代理 | ALL_PROXY=socks5h://... |
或命令行显式 --proxy socks5h://... |
| 不吃代理变量的程序 | proxychains4 <命令> |
按进程接管,可覆盖 UDP 之外的全部 TCP 连接 |
站内代理协议导航页把这件事总结成一句话:选协议只看一个问题——你的客户端能不能装软件,能装就用应用代理,不方便装才用隧道。命令行和容器都属于「能装软件」的那一侧。
socks5 后面多一个 h,DNS 就从本机挪到了代理端
同样是 SOCKS5,socks5:// 和 socks5h:// 差的不是字母,是域名在哪一步被解析。
socks5:// 下,程序在本地把域名解析成 IP,再把 IP 交给代理连接——DNS 请求是从你这台服务器发出去的;socks5h:// 下,程序把域名原样交给代理端,由代理侧完成解析。对做采集、多账号运营这类看重出口一致性的场景,后者更干净:不会出现「流量走了代理、DNS 却暴露了真实归属」这种半吊子状态。
| 写法 | 域名在哪解析 | 适合 | 要注意 |
|---|---|---|---|
socks5:// |
本机(local DNS) | 域名少、本地 DNS 稳定 | DNS 查询不经代理,可能暴露真实归属 |
socks5h:// |
代理端(remote DNS) | 采集、多账号、跨地区访问 | 代理端 DNS 慢时会拉高首次连接耗时 |
另外还有一个容易忽略的点:站内收录平台的 L2TP / PPTP 隧道线路均为国内节点,暂无海外隧道。所以需要海外出口时,同样只能走 SOCKS5 / HTTP(S) 这一层,这也再次把命令行场景收敛到了同一类协议上。
Docker 要分两次配:拉镜像的守护进程一次,容器里的程序一次
Docker 里「设了代理却没生效」,最多的情况是只设了一半。Docker 的代理分两个互不相干的位置:守护进程(daemon)负责拉镜像、构建,它不读你 shell 里的环境变量,要单独配置;容器负责跑你的程序,它读的是容器自己的环境变量。
守护进程这一层,常见做法有两种:写进 ~/.docker/config.json 的 proxies 段落,或者给 systemd 加一个 drop-in(放在 /etc/systemd/system/docker.service.d/ 下),然后 reload。容器这一层,用 docker run -e 或 compose 的 environment 把代理变量传进去:
docker run -e ALL_PROXY=socks5h://user:pass@ip:port -e HTTPS_PROXY=socks5h://user:pass@ip:port your-image
验证有没有传进去,最直接的办法是进容器看一眼:env | grep -i proxy。空的就是没传进去,报错都不用看。想少写两次,可以把它固化成镜像里的默认变量,或者写进 compose 文件统一管理。
| 要配的 | 谁在读 | 配在哪 | 影响什么 |
|---|---|---|---|
| 拉镜像 / 构建 | Docker 守护进程 | ~/.docker/config.json 的 proxies 或 systemd drop-in |
docker pull / build 能不能通 |
| 容器里跑的程序 | 容器内的进程 | docker run -e / compose environment / 镜像默认变量 |
你的脚本走不走代理 |
WSL2 里的 localhost,和你以为的不是同一个
在 WSL2 里跑脚本、想把请求交给 Windows 上那个客户端处理,是本档提问里出现频率很高的一种场景。这里踩的坑不在协议,而在网络模式:默认的 NAT 模式下,WSL 的 127.0.0.1 指向的是 WSL 自己,不是 Windows。
所以 NAT 模式下要么用 Windows 主机的地址、并且让客户端监听所有网卡(允许来自局域网的连接),要么把 WSL 切成 mirrored 模式(在 .wslconfig 里设 networkingMode=mirrored),此时两边 localhost 才是互通的。前者的好处是不用重启、改了就生效,代价是要处理 Windows 防火墙;后者更省心,但只在较新的 Windows 版本上可用。
| 网络模式 | WSL 里的 127.0.0.1 指向 | 代理地址怎么写 |
|---|---|---|
| NAT(默认) | WSL 自己 | Windows 宿主 IP + 客户端开启局域网监听 |
| mirrored | 与 Windows 互通 | 可以直接写 127.0.0.1 |
命令行工具各认各的开关,一张表对齐
下面这些工具在「SOCKS5 支持」上并不整齐,与其一个个试,不如先记住一条分界:基于 curl 的工具通常能识别 socks5h://,只支持 HTTP 代理的软件包管理器和下载器则不行,只能用 proxychains 兜底。具体以各工具当前版本的官方说明为准。
| 工具 | 代理怎么设 | 能否直接吃 SOCKS5 |
|---|---|---|
| curl | --proxy socks5h://user:pass@ip:port 或 ALL_PROXY |
可以,支持 remote DNS |
| git | git config --global http.proxy http://ip:port |
按 HTTP 代理设最稳;只有 SOCKS5 时用 proxychains 包一层 |
| pip | --proxy,或先装 PySocks |
装 PySocks 后可写 socks5h:// |
| npm / yarn | npm config set proxy、set https-proxy |
以 HTTP 代理为主 |
| wget | -e use_proxy=yes -e https_proxy=... |
只认 HTTP 代理 |
| ssh | -o ProxyCommand 配合 nc -X 5 |
需手工指定 SOCKS5 |
如果不想逐个工具配,proxychains4 是最省事的统一入口:在它的配置文件里写好一行 SOCKS5 地址,之后所有命令前加个前缀就行。它的定位是「统一兜底」,代价是全局生效、不能按域名分流,做精细控制还是得回到工具自己的开关。
容器里用不了整机隧道,能用的只有 SOCKS5 / HTTP 这层
L2TP 和 PPTP 属于数据链路层隧道,需要操作系统的网络栈参与、要改路由表,而容器共享宿主内核、并没有独立的网络栈可以承载隧道。结果就是:容器里能挂的只有应用代理,也就是 SOCKS5 / HTTP。要用整机隧道,得把 L2TP 配在宿主机或者上游路由器上,让容器「顺着」宿主网络走。
好消息是这一层几乎人人都有。站内代理协议导航页的清单显示,收录的 23 家平台全部支持 SOCKS5 与 HTTP;其中 19 家另外支持 L2TP / PPTP(隧道线路均为国内节点)。剩下只给 SK5 + HTTP 的 4 家,恰好是下面这几家——如果你的方案里同时还要用 L2TP,选型时把它们排除掉即可。
| 协议层 | 支持情况 | 容器 / 命令行能不能用 |
|---|---|---|
| SOCKS5 | 23 家全部支持 | 可以 |
| HTTP(S) | 23 家全部支持 | 可以 |
| L2TP / PPTP | 19 家支持 | 不可以,需宿主机或路由器层 |
| 只提供 SK5 + HTTP(不含 L2TP/PPTP)的 4 家 | 起步价 |
|---|---|
| 无忧IP | ¥4.5/月起 |
| 百兆王IP | ¥5/月起 |
| 优享云IP | ¥6/月起 |
| 皇冠IP | ¥12/月起 |
反过来说,只做容器内的采集、自动化,这 4 家完全够用,而且它们的免费测试额度都不低——无忧IP 给 5 小时、百兆王IP 支持试用、优享云IP 支持免费调换。容器场景选平台,重点不在协议全不全,而在并发条数、提取方式和试用额度能不能撑起一次真实的压测。
挂完先验出口:三步确认走的是这条线
代理是否生效,不能看程序有没有报错——很多工具在代理不可用时会静默回退直连。可靠的验收只有一步:对比走代理和不走代理两次的出口 IP,两者必须不同。第二次用 --noproxy '*' 或临时清掉代理变量再跑一次即可。
| 步骤 | 怎么做 | 合格标准 |
|---|---|---|
| ① 带代理测 | 容器 / 进程内 curl 回显 IP 的服务 | 返回的不是本机出口 IP |
| ② 不带代理测 | 同一环境清掉代理变量再测一次 | 两次结果不同(相同 = 一直没走代理) |
| ③ 核对属性 | 拿①的 IP 去 IP 综合检测中心查归属与线路类型 | 归属、住宅/机房与平台描述一致 |
第三步常被跳过,但它能拦住另一类问题:出口确实换了,换到的却是机房的 IP,与你要的住宅属性不符。这类偏差在配置阶段查不出来,只能靠检测结果说话,站内的 IP 综合检测中心同时提供线路可用性检测(SOCKS5 / HTTP 真实握手),可以一次把出口、归属和握手结果对齐。
免费测试额度:先在容器里跑通再下单
容器和命令行最容易出现「买完才发现不支持 UDP」「买完才发现并发不够」这类返工。用免费测试额度先跑一遍,是最省成本的验证方式。下表取自站内跨平台比价表,各家额度口径差异很大:按条数给的、按小时给的、按次给的都有,先看清是哪种,再决定够不够做一次压测。
| 平台 | 起步价 | 免费测试 | 切换次数 |
|---|---|---|---|
| 光梭IP | ¥2.24/月起 | 5 条/天 | 无限次 |
| 奔富IP | ¥2.6/月起 | 支持 | 不限次数 |
| 沧海IP | ¥4/月起 | 10 条/天 | 1000 次/月 |
| 天行IP | ¥6/月起 | 10 条 | 1000 次/月 |
| 优众IP | ¥7.2/月起 | 10 条 | 2000 次/月 |
做容器场景时,两种额度口径的差别很实际:按条数的你得把每条都「用完」才有意义,适合多窗口分 IP;按小时的更适合一次性把并发、延迟、丢包测满。选之前先想清楚你要验证的是「IP 够不够多」还是「这条线稳不稳」。
官方入口与相关页面
文中的协议支持情况、起步价与试用额度,都取自下列页面,需要核对原始数字可以直接点开对照。
| 页面 | 用途 |
|---|---|
| 代理协议导航 | SOCKS5 / HTTP 与 L2TP / PPTP 差异,23 家支持清单 |
| 跨平台比价表(23 家) | 起步价、协议、免费测试、切换次数横向对齐 |
| 价格中心 | 各平台官方价与折后价入口 |
| 代理工具中心 | 各客户端、软路由与工具教程合集 |
| IP综合检测中心 | IP 质量、线路可用性、测速、业务模拟免费测 |
| 免费测试汇总 | 各平台试用额度一览 |
文中用来举例的三家平台,四件套一并列出,方便按需对照。
| 平台 | 价格表 | 使用教程 | 官方注册(含邀请码) |
|---|---|---|---|
| 光梭IP | 光梭IP 价格表 | 光梭IP 购买使用教程 | 官方注册入口(邀请码 adminA8) |
| 天行IP | 天行IP 价格表 | 天行IP 使用教程 | 官方注册入口(邀请码 tianxingA0) |
| 沧海IP | 沧海IP 价格表 | 沧海IP Socks5/L2TP 教程 | 官方注册入口(邀请码 YAXI) |
常见问题
Q:环境变量明明设了,为什么脚本还是走本机 IP?
A:先确认它认不认变量。一部分程序自带网络栈或走 GUI 配置,压根不读 http_proxy 这一套;另一种情况是变量设在了宿主机,而程序跑在容器里。最快的判断办法是在目标进程里直接测一次出口 IP,再看它有没有跟着变。
Q:SOCKS5 和 socks5h 我该用哪个?
A:看你在不在意 DNS 走哪边。想让域名解析也走代理、出口更一致,用 socks5h://;只想连得快、本地 DNS 又稳定,用 socks5:// 也行。做采集、多账号这类对出口一致性敏感的业务,建议直接用带 h 的写法。
Q:Docker 里 docker pull 能通,容器里的程序却不通,是哪里没设?
A:这是典型的只配了一半。docker pull 走的是守护进程的代理配置(~/.docker/config.json 或 systemd drop-in),容器里的程序走的是容器自己的环境变量,两者互不继承。进容器执行一次 env | grep -i proxy 就能确认。
Q:容器里能不能直接用 L2TP 线路?
A:不能。L2TP / PPTP 是数据链路层隧道,要改宿主机的路由表,容器没有独立网络栈可以承载。容器内只有 SOCKS5 和 HTTP 可用;确实需要整机隧道,就把 L2TP 配在宿主机或上游路由器上。好在收录的 23 家平台全部支持 SOCKS5 / HTTP。
Q:只愿意配一次,挂在哪一层最省事?
A:看你图的是覆盖广还是定位准。图覆盖广,把 ALL_PROXY 写进 shell 启动脚本,或者用 proxychains4 兜底;图定位准、又不想影响别的程序,就只给目标程序加启动参数。容器环境建议直接写进 compose 文件,换机器时不用重配。
Q:怎么确认真的走了代理,而不是「看起来通了」?
A:必须两次对比。带代理跑一次回显 IP 的服务,再清掉代理变量跑一次,两者结果不同才算生效——很多工具在代理不可用时不会报错,会直接回退直连。最后拿第一个 IP 去检测中心核对归属和线路类型,避免换到了机房 IP 却不自知。
📚 相关阅读
📄 电视盒子、游戏主机、NAS 怎么挂代理?先看设备里有没有这两项设置
📄 代理IP并发数是什么意思?连接数、线程与提取频率一次讲清
更多帮助
如需获取更多帮助,请访问官网:socks5ip.com.cn
🛠️ IP综合检测中心:IP质量/线路/测速/业务模拟免费测
💬 微信:17720135827 — 7×24h在线
全网低价IP|聚合20+代理IP平台,全部免费测试,先测后买零风险







