系统代理不生效排查:浏览器走了代理但终端没走?分场景逐步检查

浏览器与终端走代理的机制不同:前者读系统代理设置,后者要靠环境变量或 TUN 模式。按场景分别给出 v2rayN 系统代理开关、端口核对与环境变量配置的检查步骤。
“网页可以打开,但终端命令仍然直连”通常不是节点本身失效,而是应用读取代理配置的方式不同。v2rayN 启动内核后,会在本机监听 SOCKS、HTTP 或混合代理端口;系统代理开关只是把其中一个入口写入操作系统设置,并不会强制所有进程把流量交给该端口。
浏览器、桌面软件、PowerShell、命令提示符和 Linux shell 对系统代理的处理并不一致。排查时应把问题拆成三层:本地监听端口是否存在、应用是否知道代理地址、代理请求是否被路由到正确出站。只检查节点延迟,无法覆盖这三层。
本文速览
本文适合遇到“浏览器正常、curl 或包管理器不通”“系统代理已开启但部分程序仍直连”的用户。按照端口监听、系统代理、终端环境变量、TUN 接管和路由日志五个层次检查,可以判断故障发生在客户端入口、应用配置还是代理出站。

先分清系统代理、本地端口与 TUN

v2rayN 的运行可以分成“内核监听”和“应用接入”两个阶段。选中节点并启动服务后,Xray 或 v2fly 内核先在本机创建入站端口;浏览器或终端只有把请求发送到该端口,后续的 VMess、VLESS 等协议连接才会发生。节点协议与本地代理协议不是同一概念:远端使用 VLESS,不代表终端也要理解 VLESS,终端通常只连接本机的 HTTP 或 SOCKS 入口。
应用发起请求 读取代理配置 连接本地端口 规则匹配分流 代理出站
系统代理主要影响主动读取操作系统代理设置的应用。常见浏览器通常会读取这项设置,所以开启 v2rayN 系统代理后网页立即恢复;很多命令行工具则只读取自己的配置文件或 HTTP_PROXYHTTPS_PROXYALL_PROXY 环境变量,因此终端仍可能直接连接目标地址。
10808
常见本地 SOCKS 端口
10809
旧配置常见 HTTP 端口
127.0.0.1
默认本机监听地址
5 秒
端口测试建议超时

结论:先验证本地入口,再调整远端节点

如果终端连不上 127.0.0.1 的代理端口,问题发生在本机监听或端口填写阶段;此时反复切换 VMess、VLESS 节点不会解决应用接入失败。

检查 v2rayN 系统代理与监听端口

先确认 v2rayN 主界面中的当前服务器已设为活动节点,底部运行状态没有持续报错。随后打开日志,观察内核是否完成启动。仅导入订阅或选中列表行并不等于已经启用代理;订阅负责提供节点配置,系统代理负责把支持该设置的应用引到本地入口。
  1. 确认活动节点

    在服务器列表选中一个节点,通过右键菜单设为活动服务器。确认主界面底部显示内核正在运行,而不是停留在启动失败或配置解析错误状态。
  2. 读取本地端口

    打开「设置」→「参数设置」→「基础设置」,记录本地监听地址、SOCKS 端口、HTTP 端口或混合端口。后续命令必须使用这里显示的实际数值。
  3. 设置代理模式

    打开「系统代理」,选择“自动配置系统代理”或当前版本中对应的启用项。若之前残留了手工代理,先选择“清除系统代理”,再重新启用。
  4. 检查路由模式

    在「设置」→「路由设置」中确认当前规则集。测试阶段可先排除目标域名被错误送往直连出站的情况,确认后再恢复所需分流。
  5. 重启目标应用

    完全退出浏览器或桌面应用后重新打开。部分程序只在启动时读取系统代理,运行期间切换 v2rayN 开关不会立即更新已有连接。
Windows 可以使用 PowerShell 检查端口是否监听。把示例中的端口改成 v2rayN 界面显示的数值:
Test-NetConnection 127.0.0.1 -Port 10808
Test-NetConnection 127.0.0.1 -Port 10809
结果中的 TcpTestSucceededTrue,说明至少有进程接受该端口连接;它并不能证明远端节点一定可用。若结果为 False,应返回 v2rayN 检查内核启动、端口冲突和安全软件规则,而不是继续配置终端环境变量。
  • 端口被其他程序占用时,日志通常会出现监听失败或地址已被使用的信息。
  • 监听地址为 127.0.0.1 时,只允许本机应用连接,局域网其他设备不能直接使用。
  • 修改端口后需要重启内核,旧终端窗口中的环境变量也要同步更新。
  • 系统代理中记录的端口必须与当前 HTTP 或混合入口一致,不能把只支持 SOCKS 的入口当作 HTTP 代理填写。

浏览器正常但终端直连的处理方法

终端本身只是命令运行环境,真正决定是否读取代理的是具体程序。curl、包管理器、脚本运行时和远程下载工具可能采用不同变量。最稳妥的验证方式是先对单条命令显式指定代理;确认有效后,再决定是否写入当前会话、用户环境或工具自己的配置文件。

先用 curl 显式指定代理

若本地入口是 HTTP 或混合代理,可执行以下命令。--connect-timeout 5 把连接阶段的等待限制为 5 秒,便于区分端口拒绝和远端响应缓慢:
curl --proxy http://127.0.0.1:10809 --connect-timeout 5 https://example.com/
若界面确认 10808 是 SOCKS5 入口,则使用 socks5h。末尾的 h 表示域名解析也交给代理端处理,可避免本地 DNS 结果与代理链路不一致:
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 https://example.com/

为当前终端会话设置变量

在 PowerShell 中,环境变量仅对当前窗口以及从该窗口启动的子进程生效。关闭窗口后设置消失,适合排查和临时任务:
$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:ALL_PROXY="socks5h://127.0.0.1:10808"

curl --connect-timeout 5 https://example.com/
在 macOS 或 Linux 的 shell 中,可使用同名变量。部分工具只识别小写形式,因此排查时可以同时设置大小写版本:
export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export ALL_PROXY="socks5h://127.0.0.1:10808"

export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"

结论:显式代理成功,说明节点链路基本可用

同一条命令在不带 --proxy 时失败、带代理参数后成功,故障点通常是终端没有读取代理配置。此时应处理环境变量或工具配置,而不是重新导入订阅。

环境变量仍不生效时逐项核对

变量名称正确不代表每个工具都会采用它。某些程序优先读取自身配置,某些程序只支持 HTTP 代理,还有些程序启动后会缓存变量。排查时应在同一个终端窗口查看变量值并立即发起请求,避免把“新窗口没有继承”和“代理服务器不可用”混为一谈。

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

原因与解法:指定端口没有进程监听,或 v2rayN 已更换本地端口。返回「设置」→「参数设置」→「基础设置」读取实际端口,重启内核后再次测试。

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

原因与解法:代理变量格式可能包含多余引号、空格或错误协议前缀。将值完整写成 http://127.0.0.1:10809,不要只写主机与端口。

报错:connection reset by peer

原因与解法:本地端口已接受连接,但远端链路、传输层或路由出站中断。切换一个已确认可用的节点,并在 v2rayN 日志中核对目标域名对应的出站与错误时间。

报错:proxy CONNECT aborted

原因与解法:工具按 HTTP 代理连接到了不兼容的 SOCKS 入口。改用客户端显示的 HTTP 或混合端口,或者把命令代理协议改成 socks5h://

检查当前会话读取到的值

# PowerShell
Get-ChildItem Env:HTTP_PROXY
Get-ChildItem Env:HTTPS_PROXY
Get-ChildItem Env:ALL_PROXY

# macOS 或 Linux shell
env | grep -i proxy
  • 变量值中不应包含全角引号、尾部注释或换行。
  • NO_PROXYno_proxy 中若包含目标域名,该请求会绕过代理。
  • 从桌面快捷方式启动的终端,未必继承另一个终端刚设置的变量。
  • 已经运行的开发工具通常不会自动读取后来修改的系统环境,需要完全退出后重启。
  • HTTP 代理地址可以承载 HTTPS 目标的 CONNECT 请求,变量值不必因为目标是 HTTPS 就改成一个不存在的 TLS 监听端口。
如果只有某一个命令不生效,而 curl --proxy 已经成功,应查看该工具的代理配置优先级。不要同时在系统代理、环境变量和工具配置中填写三个不同端口,否则日志很难判断请求实际进入了哪个入口。

需要接管更多程序时再考虑 TUN 模式

TUN 模式通过虚拟网络接口捕获更多 IP 流量,不依赖每个应用主动读取系统代理。因此,当目标程序明确忽略系统代理、无法设置环境变量,或需要统一接管多个命令行进程时,TUN 比逐个配置更直接。但它改变的是流量入口,不会自动修复节点参数、证书域名、DNS 或路由规则。
程序建立连接 TUN 接收流量 DNS 解析 路由规则匹配 选择出站
  1. 先确认普通 HTTP 或 SOCKS 入口能够通过显式代理完成请求。
  2. 在 v2rayN 的 TUN 相关设置中启用虚拟网卡模式,并按系统提示授予创建网络接口所需权限。
  3. 检查路由规则是否把局域网、回环地址和必要的本地服务保留为直连。
  4. 重新测试终端请求,同时查看日志中的入站类型、目标地址和出站标签。
  5. 出现全局断网时先关闭 TUN,确认系统默认路由恢复,再检查 DNS 与虚拟接口状态。
TUN 适合处理不读取系统代理的程序,但浏览器与终端表现不一致时,不必一开始就启用。显式代理命令能更快给出边界:本地端口通不通、协议前缀对不对、节点是否能建立出站。只有这些基础项正常,TUN 排查才有清晰起点。

按现象定位路由、DNS 与订阅问题

当浏览器和终端都已经进入 v2rayN,但访问结果仍不同,应继续看域名解析和路由匹配。浏览器可能使用自身缓存,终端可能调用系统 DNS;两者获得的目标地址不同后,也可能命中不同的 geoip、域名或私有地址规则。

现象:域名失败,但直接访问目标 IP 有响应

原因与解法:优先检查 DNS。使用 socks5h 让代理端处理域名解析,并在 v2rayN 日志中确认域名是否被解析为预期地址。

现象:部分域名正常,部分域名始终直连

原因与解法:当前路由规则可能按域名、IP 区域或私有网段选择直连出站。打开「设置」→「路由设置」,核对规则顺序与目标出站。

现象:更新订阅后端口突然变化

原因与解法:订阅通常更新服务器条目,不应直接决定本地监听端口。检查是否同时导入了客户端配置、恢复了旧设置,随后统一修改环境变量中的端口。
订阅链接提供的是节点集合,更新订阅后仍需选定活动服务器。若节点列表刷新成功但内核日志显示配置无法启动,系统代理即使保持开启,也只会把浏览器请求送到一个没有正常工作的本地入口。此时应先解决启动日志中的第一条配置错误。
测试结果 优先检查位置 下一步
本地端口测试失败 内核状态、端口冲突 重启内核并读取日志
显式代理成功,普通命令失败 环境变量、工具配置 统一代理地址与协议
HTTP 成功,SOCKS 失败 入口类型、端口填写 按界面确认 SOCKS 端口
域名失败,IP 有响应 DNS 与域名路由 使用 socks5h 并查看日志
所有入口连接成功但请求中断 节点、传输层、远端出站 切换已验证节点进行对照

完成排查后的验证与恢复

修复后不要只用一个网页判断结果。至少完成本地端口、显式代理、普通终端请求和浏览器四项验证,并确认退出 v2rayN 后系统代理能够被清理。这样可以避免当前窗口看似恢复,但系统中仍残留旧端口。
  1. 复测监听端口

    Test-NetConnection 或等价工具确认当前端口可连接,并核对测试端口与参数设置中的数值完全一致。
  2. 执行显式请求

    分别使用 HTTP 或 socks5h 入口运行一次 curl --proxy,确认本地入口和代理链路均能完成请求。
  3. 执行普通请求

    移除命令中的显式代理参数,通过当前会话环境变量再次请求。成功后才能说明终端代理配置已经生效。
  4. 核对分流日志

    查看同一时间段的访问日志,确认目标域名命中预期规则,并被发送到代理或直连出站。
  5. 测试退出恢复

    在 v2rayN 中先清除系统代理,再退出客户端。确认浏览器和系统网络没有继续指向已经关闭的 127.0.0.1 端口。
整个排查顺序可以压缩为一句话:先看本地端口是否监听,再用显式代理验证链路,然后配置终端环境变量,最后才考虑 TUN、DNS 和复杂路由。浏览器能走代理只能证明浏览器成功读取了一个入口,不能代表所有进程已经被接管。

常见问题

开启系统代理后,为什么 PowerShell 仍然直连?
PowerShell 中运行的具体命令不一定读取 Windows 系统代理。先用 curl --proxy 验证,再在当前会话设置 HTTP_PROXYHTTPS_PROXYALL_PROXY
10808 和 10809 应该选哪一个?
不要只按常见端口猜测。打开 v2rayN「设置」→「参数设置」→「基础设置」,根据实际入口类型选择。HTTP 工具连接 HTTP 或混合入口,SOCKS 工具连接 SOCKS 入口。
环境变量应该永久保存吗?
建议先只对当前会话设置。确认端口长期固定、工具确实需要后再保存到用户环境或 shell 配置中,并在修改 v2rayN 端口时同步更新。
TUN 模式开启后还需要系统代理吗?
取决于实际接管范围。TUN 可以捕获更多不读取系统代理的流量,但测试时应避免同时保留指向错误端口的环境变量。先单独验证一种入口,再根据应用需求组合。
下载 v2rayN