V2Ray 系统代理不生效排查:浏览器走代理而终端不走的原因

分两条线排查:浏览器侧看扩展与代理设置是否覆盖系统值,终端侧补设 http_proxy 环境变量,并用命令逐项验证。

本文速览

适合已经在 v2rayN 中选好服务器,却遇到“浏览器能访问、终端超时”或相反情况的用户。先用显式代理命令检查本机入口,再分别检查浏览器代理来源和终端环境变量,最后结合路由与日志定位问题。示例使用本机混合端口 10808,执行前必须替换成客户端实际显示的端口。

一、系统代理只提供设置,不接管所有连接

v2rayN 的“设置系统代理”会把本机代理地址写入操作系统的相关设置。应用是否读取这份设置,由应用自身决定。浏览器通常会读取系统代理,许多命令行工具则读取环境变量或自己的配置文件。因此,浏览器成功访问同一网址,不能证明终端已经经过代理。

应用读取设置 连接本机端口 内核匹配路由 选择出站 访问目标

这条链路中有三个独立环节:应用有没有使用代理、本机端口能不能接收请求、内核最终选择哪条出站。V2Ray 或 Xray 负责内核处理,v2rayN 负责桌面上的配置与管理。VMess、VLESS 等是服务器连接协议,不是填在浏览器代理类型里的选项。

入口主要使用方排查重点
系统代理读取系统设置的应用手动代理、自动配置脚本、绕过列表
环境变量curl 等命令行工具变量名称、协议前缀、当前进程是否继承
应用专用设置浏览器扩展、开发工具是否覆盖系统值或环境变量
TUN 模式被虚拟网卡与路由接管的流量系统路由、DNS 与排除规则

本文先隔离应用代理设置问题,不以开启 TUN 作为第一步。若 TUN 已经启用,直连测试也可能被它接管;需要区分两种入口时,可先记录原设置,再暂时关闭 TUN 做对照。

二、先确认 v2rayN 监听端口,再测试显式代理

先查看 v2rayN 主界面的本地端口信息,并在「设置」→「参数设置」中核对本地监听配置。不同版本的字段名称和默认值可能不同,不要只凭旧教程认定 HTTP 端口一定是 10809。以下假设 127.0.0.1:10808 是支持 HTTP 的混合入口;如果实际入口仅支持 SOCKS,需改用后文的 SOCKS 命令。

127.0.0.1
同一台电脑的回环地址
10808
本文示例混合端口
10 秒
示例连接超时上限
  1. 确认内核运行

    在主界面选中要使用的服务器,检查日志是否出现启动失败或端口占用提示。更新订阅只更新服务器资料,并不等于已经成功建立连接。

  2. 核对本地端口

    打开「设置」→「参数设置」,记录实际监听端口及支持的入口类型。保存改动后,确认内核已经重新加载配置。

  3. 检查端口监听

    在 Windows PowerShell 中运行下方命令。若没有监听结果,先解决内核启动问题,不必继续修改浏览器。

  4. 显式指定代理

    用 curl 的 --proxy 参数直接指定入口。这样可以绕开“工具到底读了哪份代理设置”的不确定性。

# Windows PowerShell
Get-NetTCPConnection -State Listen -LocalPort 10808

curl.exe -v --connect-timeout 10 --max-time 25 --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o NUL

Windows 使用 curl.exe,避免旧版 Windows PowerShell 将 curl 解释成其他命令。Linux 与 macOS 使用 curl,把输出目标 NUL 改为 /dev/null。示例中的绕过列表只包含本机地址,确保目标网址不会因已有的 NO_PROXY 设置而绕过代理。

结论:显式代理成功后,再调整应用设置

如果日志显示 curl 已连接本机 10808 端口,并取得目标站点响应,优先检查终端变量或浏览器覆盖项;如果本机端口连接就失败,先修复监听地址、端口或内核启动。单凭网页状态码不能判断最终是否使用了远端代理出站,还要查看内核路由记录。

三、浏览器分支:检查扩展、手动代理与自动配置

浏览器正常而终端失败,可能只是浏览器独立配置了代理。反过来,显式 curl 成功而浏览器失败,也可能是扩展仍指向旧端口。先选一个固定目标网址,记录浏览器当前的代理来源,再逐项改变设置,避免同时改动后失去对照。

自动配置脚本可以按网址返回代理或直连,系统绕过列表也可能排除某些域名。出现“只有一个网站不走代理”时,先检查目标是否命中这些规则,而不是立即更换服务器。浏览器的安全 DNS 设置会改变部分域名解析行为,但它不等同于代理开关。

四、终端分支:设置 http_proxy 与 https_proxy

命令行工具通常不会因为系统代理已开启就自动使用本机入口。先在当前终端临时设置变量,验证成功后再考虑写入用户配置。下面的地址用于 HTTP 代理或支持 HTTP 的混合入口,即使目标是 HTTPS,代理地址的前缀仍可为 http://。

Windows PowerShell:只修改当前会话

$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"

Get-ChildItem Env: | Where-Object Name -Match 'proxy'
curl.exe -v --connect-timeout 10 --max-time 25 https://example.com/ -o NUL

$env: 设置会影响当前 PowerShell 及其之后启动的子进程,不会修改已经打开的另一个终端。若要让开发工具继承变量,需要从这个会话启动工具,或在修改持久环境设置后重新启动工具。

Linux 与 macOS:当前 shell 导出变量

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'

env | grep -i proxy
curl -v --connect-timeout 10 --max-time 25 https://example.com/ -o /dev/null

这里的 127.0.0.1 必须与 v2rayN 位于同一网络环境。容器、远程 SSH 会话以及某些虚拟化环境中的回环地址,指向它们自己,而不是桌面电脑。此时不能直接照搬地址,也不应为了排错就把代理端口开放到公共网络。

五、区分 HTTP、SOCKS 与 DNS 解析故障

若入口只支持 SOCKS5,把它当成 HTTP 代理可能导致连接被重置或协议错误。先核对本地入口类型,再用对应命令。下面的 socks5h 会把目标域名交给代理侧解析;普通 socks5 通常由 curl 在本地解析目标域名。

# Windows:通过 SOCKS5 入口,把目标域名交给代理侧解析
curl.exe -v --connect-timeout 10 --max-time 25 --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o NUL

# Linux / macOS
curl -v --connect-timeout 10 --max-time 25 --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o /dev/null

报错:curl: (7) Failed to connect

原因:常见于本机端口未监听、地址写错,或请求运行在另一网络环境。解法:先检查监听结果,再确认命令中的回环地址确实指向运行 v2rayN 的电脑。

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

原因:代理服务器地址无法解析,或环境变量中的地址格式错误。解法:检查变量是否混入多余字符;本机测试直接使用完整的 http://127.0.0.1:10808。

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

原因:目标域名在当前解析路径中失败,可能是请求实际直连,或 SOCKS 使用了本地解析。解法:查看详细输出是否使用代理,再用 socks5h 对照测试并检查内核 DNS 日志。

报错:curl: (60) SSL certificate problem

原因:TLS 证书验证失败,可能涉及系统时间、信任证书或网络中的证书替换。解法:校准时间并检查证书链,不要把永久关闭证书验证当成代理修复步骤。

错误行末尾通常还带有目标地址和更具体的原因,应保留完整上下文。若 HTTP 代理已返回 200 Connection established,只说明 CONNECT 隧道已建立,不代表后续 TLS 握手和目标内容请求一定成功。

六、请求进入内核后,检查路由与服务器出站

应用连接到本机入口,不代表该请求一定从远端服务器出去。v2rayN 的路由规则可以让部分域名或 IP 直连。浏览器和终端若访问了不同域名、不同地址族或不同重定向目标,结果可能不同,因此对照时应固定完整网址。

观察结果优先检查下一步动作
显式代理成功,普通 curl 失败环境变量与绕过列表打印当前会话变量,核对 no_proxy 与应用配置
curl 成功,浏览器失败浏览器独立代理设置停用代理扩展,检查系统模式和手动端口
入口有记录,出站连接超时服务器可达性与连接参数检查节点地址、端口、传输配置及远端服务状态
请求命中直连出站路由匹配结果核对域名或 IP 规则,以及规则先后顺序
本机端口没有监听内核启动与端口占用查看启动日志,修复配置或监听冲突

测试期间可以临时提高日志级别,但应限制持续时间。分享日志前删去订阅地址、用户标识、访问域名等敏感信息。日志若明确显示远端握手或认证失败,再检查 VMess、VLESS 等节点参数;这类错误与终端是否读取系统代理是两层问题。

结论:用入口证据与出站证据闭环

保留同一次请求的 curl 详细输出和内核日志,分别确认“连接了哪个本机端口”与“命中了哪条出站”。两项同时明确后,再判断是应用设置、DNS、路由还是服务器故障,避免仅凭出口地址变化反复修改配置。

七、验证完成后,恢复临时设置

临时环境变量留在终端里,可能导致退出 v2rayN 后命令行仍尝试连接已经关闭的端口。若这些变量是本次新建的,可以按下面的方法删除;如果原来已有企业代理或开发环境配置,应恢复之前记录的值,而不是直接清空。

# Windows PowerShell:删除当前会话中的临时变量
Remove-Item Env:http_proxy, Env:https_proxy, Env:no_proxy -ErrorAction SilentlyContinue

# Linux / macOS:删除当前 shell 中的临时变量
unset http_proxy https_proxy no_proxy

客户端与平台选择

根据设备系统选择客户端,桌面端使用 v2rayN。安装后先确认实际监听端口,再按本文分别验证浏览器与终端。首次配置可从使用教程开始。

下载v2rayN按系统选择客户端