v2rayN 系统代理不生效:浏览器与命令行终端分开排查

浏览器走不了代理和终端命令不走代理是两类问题:分别检查系统代理状态、浏览器扩展冲突以及终端环境变量的设置方法。

本文速览

先确认 v2rayN 的本地端口能接收请求,再分别检查浏览器的系统代理入口和终端的代理参数。本文适合“已开启系统代理,但部分应用仍直连”的 Windows 用户;按顺序操作,可以区分端口未监听、浏览器覆盖设置、命令行未读取代理,以及请求进入客户端后被路由直连这几类问题。

先区分系统代理、应用入口与路由

先保留当前节点和路由设置,不要同时更换订阅、DNS 和内核。在 v2rayN 主窗口底部打开“系统代理”,选择“自动配置系统代理”。部分版本也能从托盘右键菜单找到同名入口。这里的“自动配置”是由客户端代为写入系统代理设置,不等于所有程序都会经过代理,也不应直接理解为 PAC 脚本模式。

应用读取代理本地端口接收路由规则匹配出站建立连接响应返回应用

系统代理负责告诉支持它的应用“把请求交给哪个本地地址”。路由分流则在请求进入内核后,决定使用代理出站还是直连出站。浏览器通常会读取 Windows 当前用户的代理设置;命令行程序是否读取,取决于具体工具,不能拿浏览器结果直接代替终端结果。

核对本地端口,再做一次显式代理测试

打开 「设置」→「参数设置」,查找本地监听端口相关选项。不同版本可能显示“本地混合监听端口”,或分别列出 HTTP、SOCKS 端口。下面统一以支持 HTTP 代理的本地端口 10808 为例;必须按实际值修改命令,不能把示例端口当作固定默认值。

10808
示例本地代理端口
127.0.0.1
本机回环地址
443
HTTPS 目标常用端口

在 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 只是连通性示例,随后应使用同一条命令测试实际失败、且有权访问的目标。

  1. 若 TcpTestSucceeded 为 False,先检查端口填写是否一致、内核是否启动,以及启动日志是否报错。
  2. 若端口有监听,按 OwningProcess 核对进程,必要时执行 Get-Process -Id 并在后面填写查到的编号。端口能连接,不代表监听者一定是当前 v2rayN 的内核。
  3. 若 curl 显示已连到 127.0.0.1,说明应用已到本地代理这一层。HTTPS 经 HTTP 代理通常还会出现 CONNECT 隧道协商信息。
  4. 若收到目标站点的 HTTP 响应,至少证明本次请求链路已返回结果;是否使用远端代理出站,还要核对路由日志。

结论:显式代理成功后,再查系统设置

如果同一目标通过 --proxy 能访问,浏览器却失败,先保留节点与内核配置。下一步只调整浏览器如何读取代理,比重新导入订阅更容易定位原因。

浏览器不生效:核对 Windows 设置与扩展覆盖

打开 Windows 11 的 「设置」→「网络和 Internet」→「代理」→「手动设置代理」。Windows 10 对应入口通常为 「设置」→「网络和 Internet」→「代理」。核对代理服务器地址与端口是否和 v2rayN 一致,并查看例外列表是否包含正在测试的域名。

  1. 重新写入一次设置。在 v2rayN 选择“清除系统代理”,再选择“自动配置系统代理”。返回 Windows 设置确认地址、端口确实更新,而不只是看到客户端菜单状态变化。
  2. 暂时停用代理管理扩展。在浏览器“扩展”页面关闭会接管代理的扩展,然后完全退出并重新打开浏览器。隐私窗口不一定能排除问题,因为部分扩展被允许在其中运行。
  3. 检查浏览器自身的代理来源。Edge、Chrome 通常沿用系统设置,但启动参数和组织策略可能覆盖它。Firefox 可在 「设置」→「常规」→「网络设置」→「设置」 中选择“使用系统代理设置”。
  4. 排除旧进程与旧连接。保存页面后关闭所有窗口,确认后台进程退出,再重新请求目标页面。仅刷新已有标签页,可能继续复用先前建立的连接。
  5. 记录设置是否自行变化。若端口刚写入就被改回,检查其他网络工具、开机启动项和组织策略。受管理设备应由管理员确认策略,不要反复覆盖。

如果浏览器能加载普通网页,只有某一站点异常,再检查该站点的路由、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

如果需要验证 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
  1. 记录环境:Windows 版本、v2rayN 版本、当前内核及版本、本地监听端口。
  2. 记录三项结果:浏览器访问、curl 显式代理访问、curl 读取环境变量访问是否成功。
  3. 记录失败阶段:本地端口连接、CONNECT 隧道、TLS 验证、HTTP 响应,或内核连接远端节点。
  4. 整理日志再求助:保留时间与错误上下文,遮盖订阅地址、身份凭据、分享链接和不宜公开的目标信息。

正常退出客户端时,让 v2rayN 完成系统代理清理。若客户端异常退出,浏览器又提示代理连接失败,回到 Windows 代理设置检查是否仍指向已停止的本地端口。安装与基础设置可对照 连接验证步骤;系统代理和路由的概念可查阅 代理模式说明。

下载v2rayN查看平台与安装包