先确认 v2rayN 的本地端口能接收请求,再分别检查浏览器的系统代理入口和终端的代理参数。本文适合“已开启系统代理,但部分应用仍直连”的 Windows 用户;按顺序操作,可以区分端口未监听、浏览器覆盖设置、命令行未读取代理,以及请求进入客户端后被路由直连这几类问题。
先区分系统代理、应用入口与路由
先保留当前节点和路由设置,不要同时更换订阅、DNS 和内核。在 v2rayN 主窗口底部打开“系统代理”,选择“自动配置系统代理”。部分版本也能从托盘右键菜单找到同名入口。这里的“自动配置”是由客户端代为写入系统代理设置,不等于所有程序都会经过代理,也不应直接理解为 PAC 脚本模式。
系统代理负责告诉支持它的应用“把请求交给哪个本地地址”。路由分流则在请求进入内核后,决定使用代理出站还是直连出站。浏览器通常会读取 Windows 当前用户的代理设置;命令行程序是否读取,取决于具体工具,不能拿浏览器结果直接代替终端结果。
- 浏览器失败、显式代理命令成功:优先检查浏览器扩展、独立代理设置与系统代理状态。
- 浏览器成功、普通终端命令失败:优先检查工具是否需要代理参数或环境变量。
- 显式代理命令也失败:继续检查本地监听、节点连接与日志,不急着改浏览器。
- 请求进入客户端但出口未变化:检查路由命中了什么出站;“进入客户端”不等于“走远端节点”。
核对本地端口,再做一次显式代理测试
打开 ,查找本地监听端口相关选项。不同版本可能显示“本地混合监听端口”,或分别列出 HTTP、SOCKS 端口。下面统一以支持 HTTP 代理的本地端口 10808 为例;必须按实际值修改命令,不能把示例端口当作固定默认值。
在 PowerShell 中运行以下命令。第一条检查 TCP 连接,第二条列出监听进程编号,第三条让 curl 明确连接本地 HTTP 代理。使用 curl.exe,避免 Windows PowerShell 5.1 中 curl 别名带来的参数差异。
Test-NetConnection -ComputerName 127.0.0.1 -Port 10808
Get-NetTCPConnection -LocalPort 10808 -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess
curl.exe -q -v --connect-timeout 10 --max-time 30 --noproxy "localhost,127.0.0.1" --proxy http://127.0.0.1:10808 https://example.com/ -o NUL
-q 放在首个参数位置,用于跳过 curl 默认配置文件;--noproxy 将本次绕过列表限定为本机地址,避免已有的 NO_PROXY 意外让测试域名直连。example.com 只是连通性示例,随后应使用同一条命令测试实际失败、且有权访问的目标。
- 若
TcpTestSucceeded为False,先检查端口填写是否一致、内核是否启动,以及启动日志是否报错。 - 若端口有监听,按
OwningProcess核对进程,必要时执行Get-Process -Id并在后面填写查到的编号。端口能连接,不代表监听者一定是当前 v2rayN 的内核。 - 若 curl 显示已连到
127.0.0.1,说明应用已到本地代理这一层。HTTPS 经 HTTP 代理通常还会出现 CONNECT 隧道协商信息。 - 若收到目标站点的 HTTP 响应,至少证明本次请求链路已返回结果;是否使用远端代理出站,还要核对路由日志。
结论:显式代理成功后,再查系统设置
如果同一目标通过 --proxy 能访问,浏览器却失败,先保留节点与内核配置。下一步只调整浏览器如何读取代理,比重新导入订阅更容易定位原因。
浏览器不生效:核对 Windows 设置与扩展覆盖
打开 Windows 11 的 。Windows 10 对应入口通常为 。核对代理服务器地址与端口是否和 v2rayN 一致,并查看例外列表是否包含正在测试的域名。
- 重新写入一次设置。在 v2rayN 选择“清除系统代理”,再选择“自动配置系统代理”。返回 Windows 设置确认地址、端口确实更新,而不只是看到客户端菜单状态变化。
- 暂时停用代理管理扩展。在浏览器“扩展”页面关闭会接管代理的扩展,然后完全退出并重新打开浏览器。隐私窗口不一定能排除问题,因为部分扩展被允许在其中运行。
- 检查浏览器自身的代理来源。Edge、Chrome 通常沿用系统设置,但启动参数和组织策略可能覆盖它。Firefox 可在 中选择“使用系统代理设置”。
- 排除旧进程与旧连接。保存页面后关闭所有窗口,确认后台进程退出,再重新请求目标页面。仅刷新已有标签页,可能继续复用先前建立的连接。
- 记录设置是否自行变化。若端口刚写入就被改回,检查其他网络工具、开机启动项和组织策略。受管理设备应由管理员确认策略,不要反复覆盖。
如果浏览器能加载普通网页,只有某一站点异常,再检查该站点的路由、DNS 与证书错误。页面显示 403 或 429 时,站点已经返回 HTTP 响应,可能涉及访问策略或请求频率,不能直接归类为“系统代理没开”。
终端不生效:先指定代理,再设置进程环境变量
先用前面的 curl.exe --proxy 测试。成功后,再决定是否给终端设置环境变量。Windows 系统代理不是终端程序的统一开关:有些工具读取 HTTP_PROXY 和 HTTPS_PROXY,有些使用自身配置,还有些需要显式参数。
PowerShell:只修改当前窗口及其后续子进程
先查看并记录当前变量,再执行临时设置。以下地址中的 http:// 描述的是“应用连接本地代理所用的协议”;即使目标网站使用 HTTPS,本地 HTTP 代理地址通常仍写成这个形式,通过 CONNECT 建立隧道。
Get-ChildItem Env: |
Where-Object Name -Match '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY)$'
$env:HTTP_PROXY = 'http://127.0.0.1:10808'
$env:HTTPS_PROXY = 'http://127.0.0.1:10808'
$env:NO_PROXY = 'localhost,127.0.0.1'
curl.exe -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL
第二次测试故意不写 --proxy,用于观察工具是否读取环境变量。curl 对 HTTP 代理变量有大小写约定,在 Windows 环境变量名称不区分大小写;把这些命令迁移到区分大小写的系统时,需要重新核对工具文档。HTTPS 测试重点检查 HTTPS_PROXY。
命令提示符:使用 set,不使用 PowerShell 语法
set "HTTP_PROXY=http://127.0.0.1:10808"
set "HTTPS_PROXY=http://127.0.0.1:10808"
set "NO_PROXY=localhost,127.0.0.1"
curl.exe -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL
- 已有进程不会自动继承新值。从当前终端启动工具,才能继承这里设置的变量;已经运行的编辑器或后台任务需要重新启动。
- 不要急着使用 setx。它用于持久化变量,不会更新当前终端环境。诊断时先用进程级设置,避免留下指向已关闭客户端的长期代理。
- 检查 NO_PROXY。若目标域名匹配绕过列表,工具可能直接连接;若已有
ALL_PROXY,也应记录并检查是否指向旧端口。 - 按运行环境分别确认。容器或独立 Linux 子系统中的
127.0.0.1未必指向 Windows 宿主机,不能直接照抄本机终端结果。
如果需要验证 PowerShell 的 Web 请求,可使用 Invoke-WebRequest -Uri 'https://example.com/' -Proxy 'http://127.0.0.1:10808' 明确指定代理。不同 PowerShell 与运行时版本读取默认代理和环境变量的行为存在差异;一条工具命令成功,不能替另一条命令作保证。
按真实报错定位:拒绝连接、隧道失败与证书错误
先区分报错来自浏览器、curl 还是内核日志,再判断失败位置。下面是常见报错片段,完整文本会随版本和目标站点变化。不要仅凭“超时”就认定订阅失效,也不要把所有错误都归因于 DNS。
ERR_PROXY_CONNECTION_FAILED
原因:浏览器未能建立到所配置代理的有效连接,常见于代理端口已停止监听或被扩展改写。
解法:核对浏览器实际代理地址,再用 Test-NetConnection 检查同一个端口,并确认监听进程。
curl: (7) Failed to connect
原因:TCP 连接建立失败;若报错指向 127.0.0.1 和本地端口,失败发生在进入代理之前。
解法:检查内核启动日志、监听地址与端口占用,不要先修改远端节点的传输参数。
ERR_TUNNEL_CONNECTION_FAILED
原因:浏览器通过代理建立隧道失败,可能涉及端口协议不匹配或代理无法完成目标连接。
解法:确认填入的是 HTTP 或混合监听端口,随后用 curl 的详细输出和同一时刻的内核日志继续定位。
curl: (60) SSL peer certificate or SSH remote key was not OK
原因:证书或信任链验证未通过,不能据此判断请求完全没有经过代理。
解法:检查系统时间、目标证书和受管理网络的证书策略;不要把关闭证书验证当成长期解决办法。
如果本地端口可连接,但请求停在隧道建立之后,检查目标域名、节点可达性与 TLS 日志。HTTP 代理访问 HTTPS 网站通常把目标主机名交给代理处理;若改用 SOCKS 测试,socks5:// 与 socks5h:// 的域名解析位置不同,后者由代理端解析。比较时应明确使用了哪一种,不能把两次结果当作完全相同的测试。
请求已进入 v2rayN:检查路由,不要叠加入口
打开主窗口日志区域,在能够显示连接信息的日志级别下,只刷新一次目标页面,按时间查找目标域名、目标端口和出站信息。日志通常由所选内核输出,不同内核和版本的字段名称可能不同;没有看到记录,也可能是日志级别不足,而不是应用一定没有进入客户端。
- 日志显示直连出站:检查当前路由预设和自定义规则。直连规则可能是预期行为;临时选择明确让该目标走代理的路由后,再用相同请求复测。
- 日志显示代理出站,但远端连接失败:检查当前活动节点、服务器地址、端口及服务端要求的传输与安全参数。浏览器扩展已不是首要排查项。
- 只有部分域名异常:逐个比较规则命中与解析结果,不要因为一个域名失败就重置全部订阅。
- 流量统计变化但页面仍失败:统计也可能来自其他应用或后台请求。应让测试时间、目标域名与日志记录互相对应。
结论:一次只改变一个入口或一条规则
先关闭 TUN 做系统代理的单变量测试,再分别比较浏览器、显式代理命令和环境变量命令。确认是某个应用不支持代理后,再评估 TUN;不要同时打开多个入口后,仅凭页面能打开就认定问题已定位。
TUN 是另一种流量接入方式,可能涉及虚拟网卡、权限和路由表。它可以帮助接入不读取代理设置的应用,但不能修复错误的节点参数,也不保证覆盖所有网络流量。需要配置时,先阅读 TUN 模式说明,并保留当前可恢复的设置。
完成复测后,清理临时变量并保留定位记录
先恢复测试前的路由、日志级别和浏览器扩展状态。若临时变量原本不存在,可在 PowerShell 中执行以下清理;若之前已经有值,应恢复记录下来的原值,而不是直接删除。关闭当前终端通常也会结束本次进程级变量设置,但已启动的子进程可能继续持有自己的环境副本。
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
- 记录环境:Windows 版本、v2rayN 版本、当前内核及版本、本地监听端口。
- 记录三项结果:浏览器访问、curl 显式代理访问、curl 读取环境变量访问是否成功。
- 记录失败阶段:本地端口连接、CONNECT 隧道、TLS 验证、HTTP 响应,或内核连接远端节点。
- 整理日志再求助:保留时间与错误上下文,遮盖订阅地址、身份凭据、分享链接和不宜公开的目标信息。
正常退出客户端时,让 v2rayN 完成系统代理清理。若客户端异常退出,浏览器又提示代理连接失败,回到 Windows 代理设置检查是否仍指向已停止的本地端口。安装与基础设置可对照 连接验证步骤;系统代理和路由的概念可查阅 代理模式说明。