v2rayN 系统代理不生效排查:浏览器与终端分开定位

浏览器打不开时,依次检查系统代理模式、浏览器扩展与 PAC;终端不走代理时,检查 http_proxy 环境变量与命令行工具各自的代理配置。

本文速览

系统代理只影响读取该设置的应用,不等于全部流量都会进入 v2rayN。本文先验证本机代理入口,再分别检查浏览器的系统设置、扩展与 PAC,以及终端的环境变量和工具配置。按顺序完成测试,可以把问题缩小到本地监听、应用接入、路由选择或节点出站,避免一开始就重装客户端。

一、分清系统代理、应用代理与节点出站

v2rayN 是桌面客户端,负责管理配置并启动代理内核。系统代理设置只是告诉遵循该设置的应用:把请求交给哪个本地地址和端口。应用没有读取这项设置,或者自身配置覆盖了它,请求就可能直接连接目标。终端中的 curl、包管理器与开发工具,也不一定沿用浏览器使用的系统代理。

应用代理设置 本地监听入口 路由规则匹配 节点或直连出口 目标站点响应

排查时先固定一个测试地址和一个活动节点。暂时关闭 TUN,记录原来的系统代理模式与路由模式,避免两种流量接入方式叠加后难以判断。若所在网络必须依赖 TUN 才能工作,则先记录这一条件,不能把测试结果直接解释为系统代理已经正常。

二、先用显式代理验证本地端口

打开 v2rayN 的「设置」→「参数设置」,查看本地监听端口;部分版本在其中的「Core: 基础设置」页显示相关字段。字段名称与界面布局会随版本变化,以当前页面和启动日志为准。本文假设已确认 10808 是支持 HTTP 的混合入口;如果实际使用独立 HTTP 端口,应替换下面所有示例端口。

10808
本文示例本地代理端口
10 秒
命令设置的连接超时
20 秒
命令设置的总超时

在 Windows PowerShell 中使用 curl.exe,可避开部分 PowerShell 版本把 curl 解释为其他命令的问题。下面先查看监听,再显式指定代理;这些命令不依赖浏览器是否读取系统代理。

Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com

macOS、Linux 可用下面的 curl 命令完成同样的显式代理测试。测试前检查当前会话中的 NO_PROXY 与 no_proxy,确保没有包含测试域名或通配符 *,否则代理可能被绕过。

curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com

判断:显式代理失败,先不改浏览器

先解决监听端口或内核出站问题。若日志显示目标命中了直连规则,显式指定本地代理也不能证明流量经过了远程节点;需要同时核对路由结果。

三、浏览器打不开:按系统设置、扩展、PAC 排查

以下步骤以 Windows 桌面为主。macOS 的系统代理在「系统设置」→「网络」→ 当前网络服务 →「详细信息」→「代理」中查看;Linux 桌面环境的代理设置入口各异,而且终端通常不会因此自动获得代理环境变量。

  1. 设置系统代理

    在 v2rayN 托盘菜单中选择「系统代理」→「自动配置系统代理」。不要把「清除系统代理」当成启用操作;「不改变系统代理」则保留系统当前值,无法保证它指向本次启动的端口。

  2. 核对系统地址

    进入 Windows「设置」→「网络和 Internet」→「代理」,检查手动代理地址和端口是否与 v2rayN 当前监听一致。记录“使用设置脚本”的状态,不要让遗留 PAC 与手动配置交替影响结果。

  3. 停用代理扩展

    暂时停用会管理代理的浏览器扩展,然后完全退出浏览器再打开。Chrome、Edge 通常沿用系统代理,但扩展或启动参数可能覆盖它;受管理设备还应查看浏览器策略。

  4. 检查独立设置

    Firefox 可在「设置」→「常规」→「网络设置」→「设置」中检查连接方式。要验证系统代理,应选择“使用系统代理设置”;若选了手动代理,就必须单独核对地址、端口和例外列表。

  5. 复查 PAC 规则

    若日常使用 PAC,恢复脚本后测试同一地址。确认脚本地址可访问,返回内容是代理自动配置脚本,并检查目标域名是否返回 DIRECT。脚本里的本地端口也必须与当前入口一致。

PAC 决定的是应用是否把连接交给代理,v2rayN 的路由规则决定的是进入内核之后从哪里出去。二者处于不同阶段。“PAC 选择了代理”并不等于“内核一定选择远程节点”。可以先在记录原值后暂时采用明确的手动代理做对照,再恢复日常 PAC。

四、终端不走代理:环境变量与工具配置分开看

环境变量名称相近,作用却不能混用。https_proxy 表示 HTTPS 目标请求使用哪个代理,不表示代理入口必须采用 HTTPS 协议。本机入口如果是 HTTP 代理,值仍可以写成 http://127.0.0.1:10808,工具通过 CONNECT 建立 HTTPS 隧道。

在 PowerShell 中,先查看现有变量,再为当前会话设置代理。此处示例只影响当前终端及之后由它启动的子进程,不会修改整台设备的长期设置。curl 对 HTTP 目标通常读取小写 http_proxy,不要只依赖大写 HTTP_PROXY。

Get-ChildItem Env: | Where-Object Name -Match '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,::1'
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com

在 Bash、Zsh 等 shell 中,可按下面的方式设置当前会话。若此前存在大写的绕过变量,先核对内容,避免不同工具对大小写的取值顺序不同。修改 shell 配置文件后,已经打开的其他终端不会自动更新。

env | grep -i proxy
export http_proxy='http://127.0.0.1:10808'
export https_proxy='http://127.0.0.1:10808'
export no_proxy='localhost,127.0.0.1,::1'
curl --connect-timeout 10 --max-time 20 -I https://example.com
配置位置检查内容常见误判
命令参数curl 的 --proxy、--noproxy显式参数或绕过条件改变了环境变量的效果。
环境变量http_proxy、https_proxy、ALL_PROXY只设置一个变量,就认为所有工具都会使用。
绕过列表no_proxy、NO_PROXY* 或目标域名让请求绕过代理。
工具配置例如 npm config get proxy 与 npm config get https-proxy工具仍保留旧端口,覆盖了预期配置。
独立运行环境容器、远程终端、子系统的网络与变量其中的 127.0.0.1 并非宿主机代理入口。

五、按真实报错定位失败阶段

下面是常见的原始错误片段。相同报错可能有多个原因,应结合请求时间和 v2rayN 日志判断。日志分享前删除订阅地址、节点凭据和个人访问记录,只保留必要的错误行与端口信息。

报错:curl: (7) Failed to connect to 127.0.0.1 port 10808

原因与解法:本地连接没有建立,常见于内核未启动、端口填错或入口不可达。先查看监听状态与内核启动日志,再按实际端口重试,不要先更换远程 DNS。

报错:ERR_PROXY_CONNECTION_FAILED

原因与解法:浏览器未能正常连接配置中的代理入口。核对系统地址、扩展配置和 PAC 返回端口,并用同一地址执行显式 curl 测试。

报错:curl: (5) Could not resolve proxy

原因与解法:代理地址本身无法解析,可能把端口、协议或空格写进了错误位置。检查变量是否完整写成 http://127.0.0.1:10808,再检查工具独立配置。

报错:curl: (6) Could not resolve host

原因与解法:目标域名解析失败,需先确认请求是否直连或使用本地解析的 SOCKS 模式。检查绕过列表与实际代理方式;需要代理侧解析时,可用已确认可用的 SOCKS5 入口配合 socks5h 对照。

报错:curl: (28) Operation timed out

原因与解法:请求未在限定时间内完成,单凭超时无法判断故障位置。查看内核是否收到该请求、命中了哪个出口,再分别检查节点连通性和目标站点。

HTTP 代理测试中出现 200 Connection established,只说明 CONNECT 隧道已被接受,还要继续看目标 TLS 握手和最终 HTTP 响应。目标返回 403 或 405 也不等于代理失效;部分站点会限制访问来源或 HEAD 请求。不要通过关闭证书验证来掩盖 TLS 报错。

六、完成对照测试,再恢复日常配置

为避免缓存与偶发网络变化干扰,使用同一测试域名,按下面顺序记录结果。每次只改一个变量,至少记录是否成功、报错片段,以及日志中的实际出口。本文的超时值是测试参数,不是节点速度或网络质量的实测结论。

  1. 显式代理测试:用 --proxy 指向已确认的本地端口,并确认绕过列表没有排除目标。
  2. 浏览器测试:停用代理扩展,启用系统代理,访问同一域名并核对内核日志。
  3. 终端变量测试:移除显式代理参数,仅保留当前会话的环境变量,再执行请求。
  4. 直连对照:curl 使用 --noproxy '*' 可绕过应用层代理;若 TUN 仍在运行,这不代表网络层直连。
  5. 恢复配置:恢复原来的 PAC、路由与 TUN 状态,删除临时变量,再验证常用应用。

结论:本地入口可用后,再修应用接入

显式代理成功而浏览器失败,就集中检查系统设置、扩展和 PAC;浏览器成功而终端失败,就检查环境变量、绕过列表与工具配置。只有请求进入内核后仍失败,才继续查路由、DNS 和节点出站。

清理 PowerShell 当前会话中的临时变量,可执行 Remove-Item Env:http_proxy, Env:https_proxy, Env:no_proxy -ErrorAction SilentlyContinue;Bash、Zsh 中可执行 unset http_proxy https_proxy no_proxy。如果原先已有这些变量,应恢复记录的原值,而不是直接删除。需要继续查看配置概念时,可阅读本站的故障排查说明或术语表。

下载v2rayN