系统代理只影响读取该设置的应用,不等于全部流量都会进入 v2rayN。本文先验证本机代理入口,再分别检查浏览器的系统设置、扩展与 PAC,以及终端的环境变量和工具配置。按顺序完成测试,可以把问题缩小到本地监听、应用接入、路由选择或节点出站,避免一开始就重装客户端。
一、分清系统代理、应用代理与节点出站
v2rayN 是桌面客户端,负责管理配置并启动代理内核。系统代理设置只是告诉遵循该设置的应用:把请求交给哪个本地地址和端口。应用没有读取这项设置,或者自身配置覆盖了它,请求就可能直接连接目标。终端中的 curl、包管理器与开发工具,也不一定沿用浏览器使用的系统代理。
排查时先固定一个测试地址和一个活动节点。暂时关闭 TUN,记录原来的系统代理模式与路由模式,避免两种流量接入方式叠加后难以判断。若所在网络必须依赖 TUN 才能工作,则先记录这一条件,不能把测试结果直接解释为系统代理已经正常。
- 本地入口:应用能否连接到
127.0.0.1上实际监听的代理端口。 - 应用接入:浏览器、终端是否确实使用这个入口,而非旧端口或直连。
- 节点出站:请求进入内核后,是否按规则使用预期节点并成功连接目标。
二、先用显式代理验证本地端口
打开 v2rayN 的「设置」→「参数设置」,查看本地监听端口;部分版本在其中的「Core: 基础设置」页显示相关字段。字段名称与界面布局会随版本变化,以当前页面和启动日志为准。本文假设已确认 10808 是支持 HTTP 的混合入口;如果实际使用独立 HTTP 端口,应替换下面所有示例端口。
在 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 桌面环境的代理设置入口各异,而且终端通常不会因此自动获得代理环境变量。
-
设置系统代理
在 v2rayN 托盘菜单中选择「系统代理」→「自动配置系统代理」。不要把「清除系统代理」当成启用操作;「不改变系统代理」则保留系统当前值,无法保证它指向本次启动的端口。
-
核对系统地址
进入 Windows「设置」→「网络和 Internet」→「代理」,检查手动代理地址和端口是否与 v2rayN 当前监听一致。记录“使用设置脚本”的状态,不要让遗留 PAC 与手动配置交替影响结果。
-
停用代理扩展
暂时停用会管理代理的浏览器扩展,然后完全退出浏览器再打开。Chrome、Edge 通常沿用系统代理,但扩展或启动参数可能覆盖它;受管理设备还应查看浏览器策略。
-
检查独立设置
Firefox 可在「设置」→「常规」→「网络设置」→「设置」中检查连接方式。要验证系统代理,应选择“使用系统代理设置”;若选了手动代理,就必须单独核对地址、端口和例外列表。
-
复查 PAC 规则
若日常使用 PAC,恢复脚本后测试同一地址。确认脚本地址可访问,返回内容是代理自动配置脚本,并检查目标域名是否返回
DIRECT。脚本里的本地端口也必须与当前入口一致。
PAC 决定的是应用是否把连接交给代理,v2rayN 的路由规则决定的是进入内核之后从哪里出去。二者处于不同阶段。“PAC 选择了代理”并不等于“内核一定选择远程节点”。可以先在记录原值后暂时采用明确的手动代理做对照,再恢复日常 PAC。
- 只有某一个浏览器失败:优先查扩展、独立代理、启动参数和浏览器策略。
- 所有浏览器失败,但显式 curl 成功:优先查系统代理地址、端口及绕过列表。
- 只有某个网站失败:检查该域名的 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 报错。
六、完成对照测试,再恢复日常配置
为避免缓存与偶发网络变化干扰,使用同一测试域名,按下面顺序记录结果。每次只改一个变量,至少记录是否成功、报错片段,以及日志中的实际出口。本文的超时值是测试参数,不是节点速度或网络质量的实测结论。
- 显式代理测试:用
--proxy指向已确认的本地端口,并确认绕过列表没有排除目标。 - 浏览器测试:停用代理扩展,启用系统代理,访问同一域名并核对内核日志。
- 终端变量测试:移除显式代理参数,仅保留当前会话的环境变量,再执行请求。
- 直连对照:curl 使用
--noproxy '*'可绕过应用层代理;若 TUN 仍在运行,这不代表网络层直连。 - 恢复配置:恢复原来的 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。如果原先已有这些变量,应恢复记录的原值,而不是直接删除。需要继续查看配置概念时,可阅读本站的故障排查说明或术语表。