适用于 v2rayN 已启动、系统代理已开启,但浏览器或终端表现不一致的情况。先用显式代理请求验证本地监听与节点,再检查浏览器代理来源和命令行环境变量;按 Windows、macOS、Linux 分别读取配置,避免把应用绕过代理、路由直连和节点连接失败混为一谈。
一、系统代理只提供入口,不等于全部流量接管
v2rayN 的「设置系统代理」会向操作系统写入代理配置,但应用是否读取这份配置,取决于应用自身。浏览器可能遵循系统设置,也可能被扩展、启动参数或企业策略改写;命令行工具通常有独立的代理参数与环境变量。浏览器能访问某个站点,不能直接证明终端也已使用代理。
还要区分两次选择:应用先决定是否连接本地代理,内核再决定该连接走代理出站还是直连出站。应用已经接入 v2rayN,仍可能因为路由分流规则而直连。VMess、VLESS 属于远端连接的协议配置,不负责让浏览器或终端自动读取系统代理。
- 应用绕过:应用没有连接本地监听,应检查系统配置、扩展、环境变量与绕过名单。
- 路由直连:本地代理已收到请求,但规则选择直连,应查看当前路由模式与规则顺序。
- 出站失败:请求已进入内核,连接远端节点或目标服务失败,应转向节点、DNS、认证与传输配置排查。
二、先用显式代理验证本地入口
先记录 v2rayN 当前显示的本地监听地址、端口及协议。可在「设置」→「参数设置」中核对本地监听相关配置,并以当前内核运行配置为准;不同界面布局的字段位置可能变化。下文统一使用 127.0.0.1:10808 作为支持 HTTP 的本地入口示例,不把它当作所有安装环境的默认值。若实际只有 SOCKS 监听,请使用对应的 SOCKS 测试命令。
在 Windows PowerShell 中使用 curl.exe,避免旧版 Windows PowerShell 的 curl 别名被解释为另一个命令。macOS 与 Linux 使用 curl。测试地址仅用于演示,可换成需要诊断的真实 HTTPS 站点;不要用本地地址判断公网代理是否正常。
# Windows PowerShell:HTTP 或混合监听
curl.exe -v --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 15 https://example.com/ -o NUL
# macOS / Linux:HTTP 或混合监听
curl -v --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 15 https://example.com/ -o /dev/null
# 仅当该端口支持 SOCKS5 时使用;目标域名交给代理侧解析
curl -v --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 15 https://example.com/ -o /dev/null
--noproxy "" 用于在这次测试中清空绕过名单。详细输出应先显示连接 127.0.0.1;HTTP 代理访问 HTTPS 时还会出现 CONNECT 隧道协商。出现目标站点的 HTTP 响应,说明至少已走到服务响应环节,即使状态码不是 200,也不能简单归类为“系统代理没生效”。
结论:显式请求成功,先查应用入口
如果显式代理能访问同一目标,而浏览器或普通终端请求失败,暂时保留当前节点与订阅配置,把排查重点放到应用代理来源、绕过名单和环境变量。
三、浏览器绕过代理:逐项排除设置覆盖
排查时保持同一个目标地址与同一个节点,不要同时切换节点、DNS 和路由。只用“网页能否打开”作为判断条件过于粗糙:页面缓存、已有连接和站点自身可直连,都可能掩盖实际路径。可结合请求发生时的内核连接记录判断流量是否进入本地代理;未启用访问日志时,没有日志不能直接证明没有请求。
-
重设系统代理
在 v2rayN 托盘菜单「系统代理」中先选「清除系统代理」,再选「自动配置系统代理」。若当前版本把菜单放在主窗口底部,使用对应的同名选项;随后核对系统里保存的地址与端口。
-
暂停代理扩展
Chrome 或 Edge 打开「扩展程序」→「管理扩展程序」,临时停用能够修改代理的扩展。普通无痕窗口不一定隔离所有代理设置,建议关闭浏览器全部进程后重开再测。
-
核对浏览器源
Chrome 打开「设置」→「系统」→「打开您计算机的代理设置」。Firefox 打开「设置」→「常规」→「网络设置」→「设置」,确认使用系统代理,而不是「不使用代理」或过期的手动代理。
-
检查绕过名单
检查系统代理例外、自动配置脚本及浏览器规则。若名单包含目标域名、过宽的域后缀或通配符,请先记录原值再缩小范围。内网与回环地址本来就常被排除,不能拿它们作为唯一测试目标。
-
检查策略覆盖
Chrome 查看
chrome://policy,Edge 查看edge://policy,确认是否存在代理策略。受管理设备上的强制配置应交由管理员处理,不要反复修改被策略覆盖的系统项。
如果只有某个浏览器异常,还应检查其启动快捷方式是否附带代理相关参数。浏览器的安全 DNS 设置也不是“启用代理”的开关:它影响部分解析行为,不能代替 HTTP 或 SOCKS 入口配置。先确认代理来源,再单独分析 DNS 失败,避免把两个问题一起改动。
四、各平台如何读取当前系统代理
系统设置界面与命令输出需要交叉核对。以下命令以读取为主,不会替你修改系统代理。重点看服务器地址、端口、启用状态、自动配置脚本和例外列表是否与 v2rayN 当前入口一致。
| 平台 | 设置入口 | 核对重点 |
|---|---|---|
| Windows 11 | 「设置」→「网络和 Internet」→「代理」 | 手动代理地址、端口及设置脚本;不要只看自动检测开关 |
| macOS | 「系统设置」→「网络」→当前连接→「详细信息」→「代理」 | 当前活动网络服务的 HTTP、HTTPS、SOCKS 及例外设置 |
| Linux GNOME | 「设置」→「网络」→「网络代理」 | 桌面代理模式及协议端口;其他桌面环境需查对应设置 |
Windows:当前用户设置与 WinHTTP 分开看
# PowerShell:读取当前用户代理项
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' |
Select-Object ProxyEnable, ProxyServer, ProxyOverride, AutoConfigURL
# 查看另一套 WinHTTP 代理配置
netsh winhttp show proxy
ProxyEnable 为 1 表示启用静态代理,仍需核对 ProxyServer 的实际内容。自动配置脚本属于另一条配置路径。netsh winhttp show proxy 显示直连,并不等于浏览器没有使用代理;WinHTTP 与当前用户的 Internet 设置不是同一份配置,不要为了让两个输出一致而盲目导入设置。
macOS:读取当前有效代理字典
scutil --proxy
检查 HTTPEnable、HTTPSEnable 及其服务器、端口字段,也要关注 ProxyAutoConfigEnable 和例外列表。切换 Wi-Fi、有线网络或其他网络服务后,应重新读取;旧网络服务上的代理配置不代表当前连接正在使用它。
Linux GNOME:读取桌面代理设置
gsettings get org.gnome.system.proxy mode
gsettings get org.gnome.system.proxy.http host
gsettings get org.gnome.system.proxy.http port
gsettings get org.gnome.system.proxy.https host
gsettings get org.gnome.system.proxy.https port
gsettings get org.gnome.system.proxy ignore-hosts
这些命令适用于具备相应设置架构的 GNOME 会话,不是所有 Linux 环境的通用接口。SSH 会话、容器和后台服务通常不会直接继承桌面代理;读到桌面设置正确,也仍要继续检查命令行自身的环境。
五、终端 http_proxy 与 https_proxy 单独配置
终端窗口不负责统一代理,真正读取配置的是窗口里运行的程序。curl、包管理器和开发工具的支持规则可能不同。先用 curl 做可控验证,再查看具体工具的代理选项,不能把某一个工具成功当作整个终端已经接管。
macOS / Linux:查看与临时设置
# 查看大小写两套变量及绕过名单
env | grep -iE '^(http_proxy|https_proxy|all_proxy|no_proxy)='
# 仅设置当前 shell 及其后续子进程
export http_proxy=http://127.0.0.1:10808
export https_proxy=http://127.0.0.1:10808
# 清空本次测试的绕过名单,测试结束后恢复原设置
curl -v --noproxy "" --connect-timeout 5 --max-time 15 https://example.com/ -o /dev/null
https_proxy 中的 https 表示目标 URL 的协议,不要求变量值也以 https:// 开头。常见本地 HTTP 代理使用 http://127.0.0.1:10808,通过 CONNECT 访问 HTTPS 目标;只有代理入口本身支持 TLS 时,才使用 HTTPS 代理地址。
http_proxy:为 HTTP 目标提供代理。curl 对这个变量只接受小写形式,不应仅设置大写HTTP_PROXY。https_proxy:为 HTTPS 目标提供代理。其他程序对大小写的处理可能不同,应查对应工具文档。all_proxy:部分工具的通用后备代理,可用 SOCKS 地址;协议专用变量通常优先,不要同时保留互相冲突的值。no_proxy:绕过代理的目标列表。对 curl 而言,值为*会让所有目标绕过代理,是“变量已设但仍直连”的重点检查项。
Windows PowerShell:设置当前进程环境
# 查看当前进程中的代理环境变量
Get-ChildItem Env: | Where-Object Name -Match '^(http_proxy|https_proxy|all_proxy|no_proxy)$'
# 为当前 PowerShell 及后续启动的子进程设置
$env:http_proxy = 'http://127.0.0.1:10808'
$env:https_proxy = 'http://127.0.0.1:10808'
curl.exe -v --noproxy "" --connect-timeout 5 --max-time 15 https://example.com/ -o NUL
上述设置不会反向修改已经启动的程序,也不会自动写入新开的其他终端。长期使用前,再考虑用户环境变量或 shell 配置文件;使用 setx 写入的值主要供后续进程读取,不会立刻改变当前 PowerShell。不要在还没完成验证时把错误端口永久保存。
127.0.0.1 指向当前网络环境本身。WSL、容器或 SSH 远程主机中的回环地址,不应直接等同于桌面宿主机;是否能直接访问宿主监听取决于网络模式与转发机制。确需跨环境连接时,应先确认可达地址、监听范围和防火墙,避免直接把代理端口暴露到所有网络接口。
六、常见报错如何对应到排查层级
以下是 curl 常见错误原文示例;具体地址与输出措辞会随系统和版本变化。优先处理最早失败的环节:本地端口未连接时,调整远端协议没有意义;收到目标 TLS 错误时,也不能再把问题归因于“没有设置系统代理”。
curl: (7) Failed to connect to 127.0.0.1 port 10808
原因:当前环境无法连接指定的本地入口,常见于端口错误、内核未运行或网络环境不同。
解法:核对监听协议与端口;Windows 用 Get-NetTCPConnection -State Listen -LocalPort 10808 检查监听,Linux 用 ss -lntp 查看。
curl: (5) Could not resolve proxy
原因:代理地址中的主机名无法解析,尚未到达目标站点解析阶段。
解法:检查代理变量是否混入空格、错误主机名或格式不正确的地址,本地入口优先用明确的回环 IP 测试。
curl: (6) Could not resolve host
原因:目标主机解析失败;可能来自直连、本地解析型 SOCKS 请求或绕过规则。
解法:检查详细输出中的连接地址和 no_proxy;需要代理侧解析时,在支持 SOCKS5 的端口上对比 socks5h://。
curl: (28) Operation timed out
原因:请求在限定时间内没有完成,单凭这行无法确定是本地连接、远端节点还是目标响应超时。
解法:查看 -v 输出停在本地连接、CONNECT、TLS 还是响应阶段,并用相同时间点的内核日志缩小范围。
如果出现证书验证错误,不要用长期关闭验证来代替排查。检查系统时间、证书信任链与网络中的 HTTPS 检查设备;能建立代理隧道但 TLS 失败,已经与“终端完全没读代理变量”属于不同层级。
七、用对照结果决定下一步,而不是直接开启 TUN
| 对照结果 | 优先检查 | 下一步动作 |
|---|---|---|
| 显式代理成功,浏览器失败 | 浏览器代理来源 | 暂停代理扩展,核对系统代理、启动参数和策略 |
| 显式代理成功,普通 curl 失败 | 变量与绕过名单 | 查看当前进程环境,清查大小写变量与 no_proxy |
| 本地入口连接失败 | 监听状态与网络环境 | 确认端口、内核进程,以及是否运行在容器或远程会话 |
| 入口可连接,目标请求失败 | 协议匹配与远端连接 | 核对入口协议,再结合日志检查节点、DNS 和 TLS |
| 请求进入内核但走直连 | 路由分流规则 | 检查首条命中规则和出站标签,不重复修改系统代理 |
TUN 通过虚拟网络接口接管流量,适合处理不遵循系统代理的应用,但会引入权限、路由和 DNS 等新的检查项。它不是验证系统代理的必要条件。显式代理尚未打通时直接开启 TUN,往往只会增加变量;应先完成本地入口与远端出站的基本验证。
结论:一次只改一个层级
记录同一目标的显式代理、浏览器与普通终端三组结果,再决定修改入口配置还是出站配置。问题恢复后,撤销临时变量与测试性改动,并重新启动应用复测,确认修复不依赖某个尚未关闭的终端窗口。