配置代理之后,确认代理是否生效有简单办法。最直接的方式打开浏览器访问ifconfig.me或者ipinfo.io,查看页面返回IP是不是代理服务器地址。如果匹配,至少浏览器流量成功走代理。但不能就此判定全部流量都经过代理。部分游戏、下载工具、命令行程序不会读取系统代理设置,拥有独立网络处理逻辑。
Windows系统有个容易忽略的WinHTTP代理。在系统设置页面配置的代理,作用于WinINet类应用,例如Edge、IE以及部分桌面程序。但很多系统服务、更新程序、PowerShell脚本使用WinHTTP,是一套独立配置。命令行输入netsh winhttp show proxy,返回“直接访问”,代表WinHTTP没有启用代理,哪怕浏览器已经正常走代理。设置命令为netsh winhttp set proxy 代理地址:端口。macOS执行scutil --proxy查看系统代理配置,Linux执行env | grep -i proxy读取环境变量,但环境变量只对读取它的程序生效,不属于全局代理。

命令行测试代理连通性,curl工具很合适。curl -x http://代理IP:端口 https://ifconfig.me,成功返回代理IP就代表代理服务本身正常。如果提示连接超时,先用telnet测试端口连通:telnet 代理IP 端口,或者nc -zv 代理IP 端口。端口不通,后续所有操作都没有意义。SOCKS5代理使用curl --proxy socks5://代理IP:端口,需要账号密码认证追加-U 用户名:密码。
浏览器插件SwitchyOmega,安装后可以直观查看当前启用的代理模式。还能编写自动切换规则,访问网站时,观察插件图标判断流量走代理还是直连。在线检测工具里,dnsleaktest.com可以检测DNS是否经由代理转发。如果DNS服务器显示本地运营商地址,说明发生DNS泄漏,代理只转发HTTP流量,DNS查询依旧从本地网络发出。WebRTC泄漏更加隐蔽,浏览器插件或者在线检测工具可以识别,真实IP有可能通过WebRTC协议暴露,就算开启代理也会出现。
还有一种场景,代理软件创建虚拟网卡,启用全局路由模式。系统代理设置页面可能是空的,但全部流量已经交由虚拟网卡接管。检测方式查看路由表。Windows执行route print,Linux、macOS执行netstat -rn,查看默认网关是否指向虚拟网卡。如果匹配,全局代理生效,无需调整系统代理。默认网关依旧是原有路由器,流量大概率没有走代理。
有时候代理配置无误,但访问特定网站失败。有可能代理服务器被目标网站封禁,或是代理IP进入黑名单。更换其他网站测试,其他站点正常,唯独这一个无法访问,属于目标网站限制,不是代理配置问题。反过来,全部网站都无法访问,但curl测试代理本身正常,大概率客户端代理规则编写错误,比如遗漏HTTPS流量,仅代理HTTP。
代理检测不用搞得过于复杂。浏览器核验出口IP、curl测试端口连通、查看路由表默认网关,三步可以覆盖大部分场景。代理不是永久稳定,服务器可能下线,IP到期失效,端口被防火墙拦截。隔一段时间重新检测,避免故障发生之后才排查。