验证代理是否真的生效
确认出口 IP、归属地、DNS 行为和粘性会话都符合预期的几条自查命令。
"请求成功返回了"和"代理按我要求生效了"是两件事。这一篇给出几条能独立验证的检查,建议接入前全部跑一遍。
1. 出口 IP 确实变了
最基本的一条:不走代理和走代理拿到的 IP 应该不同。
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 变了不等于落到了你指定的国家。用一个带归属信息的接口交叉验证:
curl -s -x 'http://USERNAME-country-DE:PASSWORD@GATEWAY_HOST:58971' \
https://ipinfo.io/json
看返回里的 country 是否等于你请求的值。如果不等,先确认参数写法:country 必须两位大写,de 会被直接拒绝而不是当成 DE。
3. 粘性会话真的粘住了
同一个 session 值连发几次,出口 IP 应该保持不变。
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 区分大小写,Job1 和 job1 是两个会话)。
4. 轮换模式确实在换
不带 session 时每个新连接独立选路。注意 curl 每次调用都是新进程新连接,所以下面这段能看到 IP 变化:
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 请求暴露你在访问什么站。
curl -s -x 'socks5h://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' \
https://api.ipify.org
需要说清楚当前生产行为:网关收到域名后会在网关侧解析并把目标锁定到解析出的第一个 IP(用于阻断校验后的 DNS rebinding)。所以:
- 你的本地 DNS 不会看到目标域名 —— 这一点成立
- 解析不是在出口 IP 所在地区做的 —— 依赖"按出口地区就近解析 CDN"的场景不要指望这个
6. 延迟和吞吐在可接受范围
用 curl 的计时字段看清时间花在哪一段:
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大 → 目标站自己慢
一次跑完的自检脚本
#!/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