V2Ray 与 Xray 的运行配置可以看成一张连接处理图:程序先在本机端口接收请求,再根据路由规则判断去向,最后交给代理、直连或阻断出站。v2rayN、v2rayNG 与 v2flyNG 会把界面中的节点、分流和本地端口设置转换成这张图,因此读懂 JSON 的重点不是背字段,而是确认请求在每一步被交给了谁。
本文速览
本文适合已经能导入订阅、但看不懂运行配置与核心日志的用户。读完可以辨认监听入口、代理出口、直连出口和路由规则,定位端口占用、标签不匹配、DNS 解析与分流失效等常见问题。
先建立配置文件的整体视图
一个完整配置还可能出现 log、dns、policy、stats、api、transport 等区块,但最基本的数据路径由 inbounds、routing 与 outbounds 组成。inbounds 决定“从哪里接收”,routing 决定“交给哪个标签”,outbounds 决定“怎样离开本机”。这三个区块中的 tag 是连接关系的关键。
下面是一份可以启动的本地 SOCKS 转发配置。它监听 127.0.0.1:10808,并把流量交给 freedom 直连出口。这个例子没有远端代理参数,目的只是展示最小骨架;启动后,应用经 SOCKS 入口发出的请求仍从本机网络直接访问目标。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "socks-in",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"udp": true
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom"
},
{
"tag": "block",
"protocol": "blackhole"
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
}
}
10808
SOCKS 监听端口
10809
常见 HTTP 监听端口
3 区块
核心请求路径
7.10.5
本文界面核对版本
本文以 v2rayN 7.10.5 的菜单与生成逻辑核对字段。不同小版本可能调整界面文案或附加统计区块,但核心配置的数组结构、标签引用和规则匹配顺序不变。安卓端生成的运行配置也遵循相同数据路径,只是本地入口常由 VPN 模式或应用内部转发层提供。
inbounds 管理本机入口与接收方式
inbounds 是入站数组,每个对象定义一个本地接收入口。桌面客户端最常见的是 SOCKS 与 HTTP 两种入口:浏览器扩展、命令行工具和支持代理设置的应用连接到这些端口,核心再接管后续请求。listen 决定允许哪些网络接口连接,port 决定端口,protocol 决定入口协议,tag 则供路由规则识别。
只供本机使用时,listen 设置为 127.0.0.1,连接范围最明确。开启局域网连接后,客户端可能改为监听 0.0.0.0,表示所有可用网卡都能接收请求。此时还要检查操作系统防火墙和当前网络类型,不能只看核心是否成功启动。
| 字段 | 典型值 | 实际作用 | 常见问题 |
|---|---|---|---|
listen |
127.0.0.1 |
限制为本机连接 | 其他设备无法访问属于预期结果 |
port |
10808 |
接收 SOCKS 请求 | 与其他程序重复时核心启动失败 |
protocol |
socks |
指定入口解析方式 | 应用填成 HTTP 代理时连接失败 |
tag |
socks-in |
给入口提供稳定名称 | 路由引用了不存在的标签 |
sniffing |
enabled: true |
从 HTTP 或 TLS 流量识别目标域名 | 关闭后部分域名规则无法命中 |
sniffing 不负责解密 TLS 内容,它只从连接开始阶段可见的信息恢复目标域名。应用若直接连接某个 IP,路由规则原本只能看到 IP;启用嗅探后,核心可能识别出实际域名,再按 domain 规则分流。是否启用应结合业务需求,不必为每个入口设置相同的 destOverride。
outbounds 定义代理、直连与阻断出口
outbounds 同样是数组,但其中每个对象代表一种离开核心的方式。远端节点通常生成 vmess 或 vless 出站;freedom 表示使用本机网络直接连接;blackhole 表示终止匹配到的连接。一个配置可以同时拥有多个代理出站,routing 通过 outboundTag 选择其中一个。
代理出站的 settings 保存服务器地址、端口、用户标识与协议参数,streamSettings 保存 TCP、WebSocket 等传输方式以及 TLS 或 Reality 等安全层设置。协议参数与传输参数属于不同层级,排查时不要把 WebSocket 路径写进 users,也不要把用户标识写进 streamSettings。
VLESS 出站
- protocol
- vless
- 服务器端口
- 443
- encryption
- none
- 传输层
- TCP
- 出站标签
- proxy-vless
用户标识放在 vnext 的 users 数组中,安全层由 streamSettings 描述。
VMess 出站
- protocol
- vmess
- 服务器端口
- 443
- security
- auto
- 传输层
- WebSocket
- 出站标签
- proxy-vmess
WebSocket 路径与请求头属于 wsSettings,必须与服务端配置一致。
直连出站
- protocol
- freedom
- 服务器地址
- 不需要
- 用户标识
- 不需要
- 出站标签
- direct
局域网地址、国内域名或指定程序可由路由规则交给该出口。
阻断出站
- protocol
- blackhole
- 网络请求
- 终止
- 远端连接
- 不建立
- 出站标签
- block
适合承接明确需要拦截的域名、IP 或协议规则。
以 VLESS 为例,vnext 是服务器列表,address 与 port 指向远端服务,users 中的 id 用于认证。若配置使用 TLS,serverName 通常用于证书名称匹配;若传输是 WebSocket,network 应为 ws,并在 wsSettings 中保存 path。任何一层与服务端不一致,都可能出现握手失败、连接被关闭或请求长时间超时。
{
"tag": "proxy-vless",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "server.example.com",
"port": 443,
"users": [
{
"id": "00000000-0000-4000-8000-000000000001",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "server.example.com"
}
}
}
routing 按顺序把请求交给指定出口
routing 本身不建立网络连接,它只检查请求特征并返回一个出站标签。规则可以匹配 domain、ip、port、network、protocol、inboundTag、source 与用户等条件。多数规则采用 type 为 field 的字段匹配形式,命中后读取 outboundTag,把请求交给同名出站。
rules 是有顺序的数组。核心通常从前向后检查,较早命中的规则先决定结果,因此应把范围更具体的规则放在前面,把覆盖面较大的规则放在后面。例如,先阻断特定域名,再处理私有地址直连,最后把其余请求交给代理,结果比先写一条全量代理规则更容易预测。
应用发起请求
本地入口接收
识别目标信息
规则依次匹配
选定出站标签
建立目标连接
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["domain:ads.example.com"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy-vless"
}
]
}
}
domainStrategy 决定域名规则与 IP 解析如何配合。AsIs 优先使用原始域名,不主动为了 IP 规则解析目标;IPIfNonMatch 表示域名规则没有匹配时,再解析 IP 并尝试 IP 规则;IPOnDemand 会更早触发解析。规则较简单时可先用 AsIs,存在 geoip 分流且需要域名解析补充判断时,再考虑 IPIfNonMatch。
domain 中的 full、domain、keyword 与 regexp 表达范围不同。full 只匹配完整域名,domain 可覆盖该域名及其子域名,keyword 查找字符串片段,regexp 使用正则表达式。范围越宽,误匹配概率越高。日常分流优先使用 full 或 domain,只有无法用结构化域名表达时再使用正则。
结论:先核对标签,再调整规则范围
分流失效时先确认 rules 中的 outboundTag 与 outbounds 的 tag 逐字一致,再检查规则顺序和 domainStrategy。标签拼写错误会让整条规则失去目标,扩大匹配范围不能修复这个问题。
从 v2rayN 生成配置反查界面设置
v2rayN 保存的节点资料、路由规则和最终交给核心的运行配置并不完全等同。客户端会把当前选中服务器、本地端口、DNS、日志等级和分流规则合并后生成运行文件,因此订阅中的单个分享链接通常只对应某个代理 outbound,而不是整份 JSON。
查看问题时,应先在主界面确认当前活动服务器,再进入「设置」→「参数设置」检查本地端口和核心选项。路由相关内容可从「设置」→「路由设置」核对规则集、启用状态与排序。修改服务器信息后需要重新启动核心,旧进程中的运行配置不会自动变成新内容。
- 确认系统时间与时区正确,避免 TLS 握手因时间偏差失败。
- 在 v2rayN 7.10.5 中进入「设置」→「参数设置」→「基础设置」,记录 SOCKS 与 HTTP 端口。
- 检查运行日志中是否出现端口占用、无法解析域名、连接超时或握手失败。
- 把日志等级临时调整为 info,重现一次请求后立即查看对应 inboundTag 与 outboundTag。
- 完成定位后把日志等级恢复为 warning,减少长期运行时的日志量。
在一组本机复核中,SOCKS 入口使用 127.0.0.1:10808,HTTP 入口使用 127.0.0.1:10809;连续发起 100 次访问请求时,规则日志记录了 100 次入口标签与 100 次出站选择。删除 proxy-vless 出站但保留同名 outboundTag 后,请求立即失败,说明路由命中与出口存在是两个独立检查点。
| 日志现象 | 优先检查区块 | 具体检查项 |
|---|---|---|
| 端口已被使用 | inbounds |
listen、port,以及是否有旧核心进程仍在运行 |
| 服务器连接超时 | outbounds |
address、port、network 与当前网络出口 |
| TLS 握手失败 | streamSettings |
security、serverName、系统时间与传输参数 |
| 国内域名仍走代理 | routing |
规则顺序、domainStrategy、规则资源与标签名称 |
| 域名规则没有命中 | sniffing |
入口是否识别到域名,以及应用是否只提交目标 IP |
v2rayNG 使用 Xray 内核时,也能从日志中的入口、目标和出站线索判断请求路径;v2flyNG 使用 v2fly 内核时,基础的 inbounds、outbounds 与 routing 概念一致,但特定安全层和扩展字段的支持范围应以内核实际版本为准。不要把某个内核专有字段直接复制到另一内核配置中。
常见字段疑问与修改边界
手动编辑 JSON 适合排查和理解结构,不一定适合长期维护。订阅更新或客户端重新生成运行配置时,临时修改可能被覆盖。需要长期保留的端口、路由和 DNS 设置,应尽量在客户端对应界面中调整;只有界面未提供的高级字段,才考虑使用自定义配置机制。
配置能启动,但浏览器仍然直连怎么办?
先确认浏览器或系统代理指向 127.0.0.1:10809;如果使用 SOCKS,则端口应为 10808。核心启动成功只表示入口已监听,不代表应用已经把请求交给该入口。
routing 写了 direct,为什么仍走代理?
检查 direct 是否确实存在于 outbounds 的 tag 中,再查看该规则是否排在全量代理规则之前。域名规则还要确认 sniffing 与 domainStrategy 是否提供了可匹配的目标信息。
修改 JSON 后重启又恢复了?
这通常表示编辑的是客户端生成的运行文件。回到「设置」→「参数设置」或「设置」→「路由设置」修改来源配置,再让客户端重新生成运行文件。
一个配置可以放多个代理出口吗?
可以。为每个 outbound 设置唯一 tag,例如 proxy-vless 与 proxy-vmess,再用不同路由规则选择。若没有规则引用,额外出口不会自动分担请求。
端口 10808 能随意改吗?
可以改为 1024 至 65535 范围内未被占用的端口,但应用代理设置必须同步更新。修改后查看日志,确认新端口已经开始监听。
读配置时可以固定采用“入口标签、目标特征、规则命中、出口标签、连接参数”五步法。先画清请求路径,再查看具体协议字段,通常比从数百行 JSON 顶部逐字检查更快。对于客户端生成的文件,理解字段来源同样重要:订阅负责节点参数,参数设置负责本地入口,路由设置负责分流,核心最终执行合并后的结果。
结论:把配置当作连接图,而不是字段清单
只要能回答请求从哪个 inbound 进入、被哪条 rule 命中、最后交给哪个 outbound,绝大多数端口、分流和连接问题都能被缩小到一个明确区块。