适合已经在 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 命令。
-
确认内核运行
在主界面选中要使用的服务器,检查日志是否出现启动失败或端口占用提示。更新订阅只更新服务器资料,并不等于已经成功建立连接。
-
核对本地端口
打开「设置」→「参数设置」,记录实际监听端口及支持的入口类型。保存改动后,确认内核已经重新加载配置。
-
检查端口监听
在 Windows PowerShell 中运行下方命令。若没有监听结果,先解决内核启动问题,不必继续修改浏览器。
-
显式指定代理
用 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 成功而浏览器失败,也可能是扩展仍指向旧端口。先选一个固定目标网址,记录浏览器当前的代理来源,再逐项改变设置,避免同时改动后失去对照。
- v2rayN:在托盘菜单「系统代理」中选择「自动配置系统代理」,再核对操作系统里实际写入的地址与端口。若使用的是自动配置脚本,需同时检查脚本规则。
- Windows:进入「设置」→「网络和 Internet」→「代理」,查看「使用设置脚本」和「使用代理服务器」。记录旧配置,避免其他网络工具反复覆盖。
- Chrome:进入「设置」→「系统」→「打开您计算机的代理设置」,核对系统入口;再打开「扩展程序」→「管理扩展程序」,暂时停用代理切换类扩展。
- Firefox:进入「设置」→「常规」→「网络设置」→「设置」,检查选择的是「使用系统代理设置」还是「手动配置代理」。手动模式中的旧端口不会随系统值自动更新。
自动配置脚本可以按网址返回代理或直连,系统绕过列表也可能排除某些域名。出现“只有一个网站不走代理”时,先检查目标是否命中这些规则,而不是立即更换服务器。浏览器的安全 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
https_proxy表示访问 HTTPS 目标时选用的代理,不表示代理入口必须启用 TLS。把普通 HTTP 入口误写成https://127.0.0.1:10808,可能产生握手错误。- curl 对 HTTP 代理变量使用小写
http_proxy;不要只设置大写HTTP_PROXY。在大小写敏感的环境中,也要清理重复且值不同的变量。 no_proxy或NO_PROXY命中目标时会绕过代理。尤其检查是否存在*,它可能使所有目标都直连。- 图形桌面启动的程序、管理员进程和后台服务不一定继承当前 shell。某些工具还有专用代理配置,需按工具的实际优先级核对。
这里的 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
- 用同一个网址复测浏览器和终端,确认结果符合预期。
- 恢复测试前暂停的扩展、TUN 或自动配置脚本;每恢复一项,观察是否再次出现故障。
- 确实需要长期使用代理时,再把已验证的设置写入对应用户环境或应用配置,并记录端口。
- 以后更改本地监听端口时,同步更新环境变量和浏览器手动配置,避免旧设置继续生效。
客户端与平台选择
根据设备系统选择客户端,桌面端使用 v2rayN。安装后先确认实际监听端口,再按本文分别验证浏览器与终端。首次配置可从使用教程开始。