跳到主要内容
NextProxyNextProxy文档

验证代理是否真的生效

确认出口 IP、归属地、DNS 行为和粘性会话都符合预期的几条自查命令。

"请求成功返回了"和"代理按我要求生效了"是两件事。这一篇给出几条能独立验证的检查,建议接入前全部跑一遍。

1. 出口 IP 确实变了

最基本的一条:不走代理和走代理拿到的 IP 应该不同。

shell
echo "直连: $(curl -s https://api.ipify.org)"
echo "代理: $(curl -s -x 'http://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' https://api.ipify.org)"

两个值相同说明代理根本没生效——通常是 -x 参数写错、或者客户端配置了 NO_PROXY 把目标域名排除掉了。

2. 归属地符合你要的国家

IP 变了不等于落到了你指定的国家。用一个带归属信息的接口交叉验证:

shell
curl -s -x 'http://USERNAME-country-DE:PASSWORD@GATEWAY_HOST:58971' \
  https://ipinfo.io/json

看返回里的 country 是否等于你请求的值。如果不等,先确认参数写法:country 必须两位大写,de 会被直接拒绝而不是当成 DE

3. 粘性会话真的粘住了

同一个 session 值连发几次,出口 IP 应该保持不变。

shell
for i in $(seq 1 5); do
  curl -s -x 'http://USERNAME-country-US-session-stick01-time-10:PASSWORD@GATEWAY_HOST:58971' \
    https://api.ipify.org
  echo
done

五次应该打印同一个 IP。换一个 session 值再跑,应该拿到另一个 IP。

如果同一个 session 中途变了 IP,可能的原因:time 到期了、线路自己换了出口、或者你的 session 值里有大小写差异(session 区分大小写,Job1job1 是两个会话)。

4. 轮换模式确实在换

不带 session 时每个新连接独立选路。注意 curl 每次调用都是新进程新连接,所以下面这段能看到 IP 变化:

shell
for i in $(seq 1 5); do
  curl -s -x 'http://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' \
    https://api.ipify.org
  echo
done

5. 没有 DNS 泄露到本地

socks5h://(而不是 socks5://)能让 curl 把域名交给代理解析,避免本地 DNS 请求暴露你在访问什么站。

shell
curl -s -x 'socks5h://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' \
  https://api.ipify.org

需要说清楚当前生产行为:网关收到域名后会在网关侧解析并把目标锁定到解析出的第一个 IP(用于阻断校验后的 DNS rebinding)。所以:

  • 你的本地 DNS 不会看到目标域名 —— 这一点成立
  • 解析不是在出口 IP 所在地区做的 —— 依赖"按出口地区就近解析 CDN"的场景不要指望这个

6. 延迟和吞吐在可接受范围

用 curl 的计时字段看清时间花在哪一段:

shell
curl -s -o /dev/null -x 'http://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' \
  -w 'connect=%{time_connect}s appconnect=%{time_appconnect}s total=%{time_total}s\n' \
  https://example.com
  • time_connect 大 → 你到网关这一段的网络问题,换一个更近的网关节点
  • time_appconnect 大 → TLS 握手慢,通常是出口到目标站这一段
  • 两者都正常但 total 大 → 目标站自己慢

一次跑完的自检脚本

shell
#!/usr/bin/env bash
set -euo pipefail

PROXY_USER="USERNAME"
PROXY_PASS="PASSWORD"
GATEWAY="GATEWAY_HOST:58971"
COUNTRY="US"

px() { echo "http://${PROXY_USER}${1}:${PROXY_PASS}@${GATEWAY}"; }

echo "== 直连出口 =="
curl -s https://api.ipify.org; echo

echo "== 指定国家 =="
curl -s -x "$(px "-country-${COUNTRY}")" https://ipinfo.io/json | head -c 200; echo

echo "== 粘性会话(应打印 3 个相同 IP)=="
for _ in 1 2 3; do
  curl -s -x "$(px "-country-${COUNTRY}-session-selftest-time-10")" https://api.ipify.org; echo
done

echo "== 轮换(应出现不同 IP)=="
for _ in 1 2 3; do
  curl -s -x "$(px "-country-${COUNTRY}")" https://api.ipify.org; echo
done

任何一步失败,对着 错误码对照 找返回码的含义,或走 排错流程

这篇解决你的问题了吗?