适合 v2rayN 内核已经启动,但浏览器无法访问、终端请求超时,或只有部分应用能联网的情况。先用显式代理请求验证本地入口,再检查浏览器是否读取系统代理,最后处理终端环境变量、PAC 与例外列表。本文以 Windows 为主要操作环境;示例端口必须换成客户端实际监听值,不能把命令执行成功等同于所有流量都已代理。
先区分系统代理、内核启动与节点可用
v2rayN 显示内核已启动,只说明相关进程已经运行;选中某个服务器,也不代表浏览器正在使用该服务器。系统代理的作用是向遵循该设置的应用提供本地代理地址,并不会自动接管所有程序的网络连接。终端工具、浏览器扩展和应用自己的代理设置,都可能采用另一条连接路径。
排查要沿这条链逐段验证。显式指定本地代理后仍然失败,就先查监听端口、内核日志与服务器连接;显式代理成功而普通浏览失败,再查系统设置和浏览器。这个顺序能避免在入口尚未连通时反复调整 PAC 规则。
- 记录当前服务器、系统代理模式、本地监听地址与端口,便于恢复。
- 排查期间先关闭 TUN,避免流量被另一条接管路径捕获;也不要同时运行另一套会接管系统代理的程序。
- 在 v2rayN 的「设置」→「参数设置」中核对本地监听相关项目;不同界面的字段位置可能不同,以实际显示为准。
- 打开客户端日志,确认没有启动失败、端口绑定失败或持续连接错误,再进行后面的对照请求。
用显式代理请求确认本地入口
先在 PowerShell 中调用 curl.exe,避免部分环境里 curl 实际指向其他命令。下列两次请求使用同一目标地址,第一次绕过代理,第二次明确指定本地 HTTP 代理。设置连接与总时限,可以避免等待过久。示例站点只用于测试连通性,不代表任何实际测速结果。
# 直连对照:绕过所有代理
curl.exe --noproxy "*" --connect-timeout 10 --max-time 20 -I https://example.com/
# HTTP 代理入口:排除列表中不包含本次测试域名
curl.exe --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 20 -I https://example.com/
# 如果该端口只支持 SOCKS,改用这一条
curl.exe --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 20 -I https://example.com/
socks5h 会把目标域名交给 SOCKS 代理一侧处理,但最终解析策略仍取决于内核配置。HTTP 代理访问 HTTPS 地址通常使用 CONNECT 隧道,代理地址写成 http://127.0.0.1:10808 并不意味着目标网页变成了明文 HTTP。
| 对照结果 | 优先检查 | 不能直接得出的结论 |
|---|---|---|
| 显式代理成功,浏览器失败 | 浏览器扩展、系统代理地址、PAC 与例外列表 | 不能认定浏览器已经走代理 |
| 本地代理连接被拒绝 | 监听端口、入口协议、内核是否运行 | 不能直接认定远端服务器故障 |
| 直连与代理都成功 | 结合日志判断实际出站 | 同一网页能打开不代表两次路径一致 |
| 代理请求超时 | 按日志时间核对 DNS、路由与出站连接 | 超时本身不能定位到某一个环节 |
判断:显式代理成功后,再改系统设置
先保留一条可以重复成功的显式代理命令作为基线。此后每次只改浏览器、PAC 或环境变量中的一项;基线仍成功而应用失败时,就能把排查范围留在应用入口这一侧。
浏览器不走代理:核对系统设置与扩展
在 Windows 11 中打开「设置」→「网络和 Internet」→「代理」,核对当前启用的是设置脚本还是手动代理。如果正在使用 v2rayN 的手动系统代理模式,地址与端口应与客户端当前可用的 HTTP 或混合入口一致。若使用 PAC,则应核对脚本地址,而不是要求手动代理开关也必须同时启用。
- 重新写入系统代理。在 v2rayN 托盘菜单的「系统代理」中选择「自动配置系统代理」。若当前界面使用其他措辞,选择写入本地代理地址的对应选项,再回到系统设置确认结果。
- 暂时停用代理扩展。扩展可能固定某个服务器、强制直连或按自己的规则分流。先停用相关扩展,用普通窗口测试;不要把隐私窗口当成绝对隔离环境,因为部分扩展也可能获准在其中运行。
- 检查浏览器自身设置。浏览器若提供独立代理配置,选择使用系统代理;若没有独立配置入口,则检查启动参数是否固定了代理或直连方式。
- 退出后重新启动。关闭全部浏览器窗口并确认后台进程退出,再打开同一测试地址,避免复用旧连接影响判断。
如果系统设置刚改完就自动恢复,优先检查另一套代理程序、浏览器扩展或组织管理策略。对于受管理设备,不要反复覆盖策略设置,应向管理员确认允许使用的代理方式。系统代理正常而某个应用仍失败,也可能是该应用根本不读取这项设置。
PAC 模式与例外列表:先确认请求是否被绕过
PAC 是由应用读取并执行的代理选择脚本,常见返回结果包括 DIRECT 和 PROXY 127.0.0.1:10808。它决定请求先去哪里,与请求进入内核以后再进行的路由分流不是同一层。PAC 返回直连时,该请求可能根本不会进入 v2rayN。
- 脚本地址可达:把系统显示的 PAC 地址复制到浏览器,检查能否读取脚本文本。若地址位于本机,客户端退出或服务停止后,脚本可能无法加载。
- 脚本端口正确:本地代理入口改过端口后,要确认 PAC 内容也指向当前入口,不能继续引用旧端口。
- 检查匹配范围:目标域名若命中直连规则,网页打开也不代表代理生效。测试时应结合 PAC 内容和内核日志判断。
- 检查代理例外:保留有实际用途的本地地址例外,但检查是否误填了过宽的域名规则。不同应用对通配符的解释可能不同,不要直接照搬另一款工具的写法。
Windows 手动代理的“例外”与 PAC 内部的直连逻辑,应按当前生效的模式分别检查;终端中的 NO_PROXY 又是另一套配置。不要认为删掉系统里的例外,就会同步清空命令行工具的绕过列表。
判断:临时固定入口,分离 PAC 与内核问题
先记录 PAC 地址,再临时切换到已验证的手动代理入口。若浏览器随即恢复,而显式代理命令始终成功,应优先检查 PAC 加载与匹配逻辑;定位后恢复原模式,不必同时重写内核路由。
终端不走代理:检查环境变量与工具配置
终端中的程序不一定读取 Windows 系统代理。浏览器访问正常、命令行仍然超时,通常需要单独检查工具的代理参数与环境变量。下面的 PowerShell 设置只影响当前会话及其之后启动的子进程,不会自动修改已经运行的其他终端窗口。
# 查看当前会话内名称包含 proxy 的环境变量
Get-ChildItem Env: | Where-Object { $_.Name -match 'proxy' }
# 示例:为支持这些变量的工具设置 HTTP 代理
$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"
# 不再显式指定 --proxy,验证 curl.exe 是否读取当前环境
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com/
# 排查结束后,删除本次设置的会话变量
Remove-Item Env:http_proxy,Env:https_proxy,Env:no_proxy -ErrorAction SilentlyContinue
https_proxy 表示访问 HTTPS 目标时选用哪个代理,不要求代理地址本身使用 HTTPS。若本地入口只支持普通 HTTP 代理,把它写成 https://127.0.0.1:10808 反而可能导致 TLS 握手失败。环境变量的支持情况与优先级取决于具体工具,不能把 curl 的行为推广到所有程序。
- 检查遗留变量:
ALL_PROXY可能仍指向旧 SOCKS 端口,NO_PROXY可能包含目标域名或*。先记录原值,再按需调整。 - 区分大小写:Windows 环境变量名通常不区分大小写;Linux 等环境则要注意工具对大小写变量的支持差异,curl 的 HTTP 代理变量尤其应使用小写
http_proxy。 - 检查工具专属配置:命令行参数、用户配置文件和环境变量可能相互覆盖。先用显式
--proxy建立基线,再逐项恢复配置。 - 区分运行环境:远程终端、容器和独立网络环境里的
127.0.0.1指向它们自己,不一定是运行 v2rayN 的桌面主机。
端口占用与真实报错:从监听状态查起
如果显式代理命令在连接本地端口时就失败,先查监听状态,而不是更换 VMess、VLESS 等协议参数。以下命令在 PowerShell 中执行,端口仍使用前文示例值。查到监听记录后,还要核对所属进程;“有程序监听”不等于“当前 v2rayN 内核监听”。
# 查看该端口是否处于 TCP 监听状态
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress,LocalPort,OwningProcess
# 查看监听进程的名称
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
ForEach-Object { Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue }
# 检查 Windows 的 WinHTTP 代理配置,作为另一条配置线索
netsh winhttp show proxy
netsh winhttp show proxy 显示的是 WinHTTP 代理配置,不等于浏览器使用的用户系统代理。它显示直连时,不能据此判定 v2rayN 没有正确写入浏览器所用的系统设置;也不要未经确认就把用户代理导入另一套配置。
报错:Connection refused
原因:在连接本地回环地址时出现该信息,通常说明目标端口没有可接受连接的服务,也可能被主动拒绝。解法:核对实际监听地址与端口,检查内核启动日志,再用正确的入口协议重试。
报错:address already in use
原因:这是常见的端口绑定错误,其他进程或重复启动的实例可能已占用相同地址与端口。解法:按监听进程确认归属,正常退出冲突程序,或修改本地端口并同步更新系统代理、PAC 和终端变量。
报错:Could not resolve proxy
原因:curl 无法解析代理主机名,常见于代理地址拼写错误、残留变量或格式不正确。解法:先用明确的 http://127.0.0.1:10808 测试,再检查环境变量与工具配置中的代理地址。
报错:Could not resolve host
原因:当前请求路径中的目标域名解析失败;其具体发生位置与直连、SOCKS 及 HTTP 代理方式有关。解法:记录使用的命令和代理类型,结合内核日志确认请求是否进入代理,再检查对应路径的 DNS 设置。
不同操作系统和内核版本可能使用不同的完整报错句式。保留错误关键词、发生时间与目标端口即可辅助定位;不要只截取一个“超时”就断定节点失效。若本地入口已连通,而日志显示远端连接失败,再核对服务器地址、端口、传输与安全参数。
恢复配置后,用三项检查结束排查
找到原因后,恢复实际需要的代理模式,并清理排查时添加的临时设置。尤其要避免系统代理已经改成新端口,终端还保留旧端口,或者 PAC 仍引用修改前的地址。每次只恢复一项,确认结果稳定后再继续。
- 显式代理可重复:重新执行基线命令,确认本地入口与出站路径仍能完成请求。
- 应用路径明确:浏览器按预期读取系统代理或 PAC,终端按需读取环境变量;结合日志确认请求是否进入内核。
- 退出行为可预期:停止使用代理前先清除或恢复系统代理。若客户端异常退出后网页全部打不开,检查系统是否仍指向已经停止监听的本地端口。
需要进一步求助时,提供操作系统、v2rayN 界面类型、实际监听协议与端口、系统代理模式、对照命令和对应时间的日志。分享前遮盖订阅地址、认证信息与服务器敏感字段。配置概念可继续查阅配置进阶,初次设置则按入门指南重新核对基本步骤。