V2Ray 配置文件结构详解:inbounds、outbounds 与 routing 逐段拆读

以一份最小可用的 config.json 为例,逐段解释 inbounds 入站、outbounds 出站与 routing 路由三大块的字段含义与相互关系,读懂后改配置不再靠猜。

本文速览

本文适合已经会导入节点、但看见 config.json 仍不清楚请求如何流动的用户。内容从本地 10808 端口开始,依次拆解入站、出站、路由、DNS 与日志,并给出一份可通过语法检查的 V2Ray 5 系列配置骨架;读完后可以定位端口冲突、出站标签写错、规则顺序不当等常见问题。

先看数据流:配置文件各部分如何协作

把配置看成一条数据流

V2Ray 配置不是一组彼此独立的开关。应用先把请求交给某个入站,路由模块读取目标域名、目标 IP、端口和入站标签,再把请求送往指定出站。没有命中任何路由规则时,V2Ray 通常使用出站数组中的第一项,因此 outbounds 的排列顺序本身也会影响结果。

inbounds 解决“流量从哪里进入”,outbounds 解决“流量从哪里离开”,routing 则负责把两者连接起来。配置能启动,只能证明 JSON 结构和字段基本可解析;是否按预期分流,还要检查标签引用、规则顺序以及 DNS 返回结果。

应用发起请求入站端口接收路由规则匹配选择出站标签目标服务器
10808
示例 SOCKS 入站端口
10809
可选 HTTP 入站端口
3 类
代理、直连、阻断出站
自上而下
路由规则匹配顺序

最小配置骨架:从完整 JSON 开始拆读

下面示例采用一个本地 SOCKS 入站、一个 VMess 代理出站、一个直连出站和一个阻断出站。服务器域名、端口、用户 ID 与传输方式只是结构示例,实际使用时必须与服务端参数逐项一致。JSON 不允许注释,因此说明文字不能直接写进正式配置文件。

{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      "1.1.1.1",
      "localhost"
    ]
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "server.example.com",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-3333-4444-555555555555",
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none"
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom"
    },
    {
      "tag": "block",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

这份配置把未命中规则的请求交给第一个出站 proxy。私有地址、境内域名和境内 IP 则指向 direct,特定协议指向 block。如果把 direct 放在出站数组第一项,却没有补充一条明确的代理规则,未匹配流量就会改为直连。

inbounds 入站:应用如何把流量交给内核

入站可以理解为 V2Ray 在本机开放的接收入口。示例监听 127.0.0.1:10808,协议为 SOCKS。浏览器、下载工具或系统代理把 SOCKS 地址设为这个端口后,请求才会进入 V2Ray。仅启动内核但没有让应用指向入站端口,不会自动接管普通应用流量。

settings.auth 设为 noauth 表示该 SOCKS 入口不要求用户名和密码,因此应维持本机监听。udp: true 允许 SOCKS UDP 请求进入,但后续出站协议、服务器和网络环境也必须支持相应处理,单独开启这个字段不代表所有 UDP 流量都能正常通过。

SOCKS 入站

监听地址
127.0.0.1
监听端口
10808
协议
socks
UDP
true

适合支持 SOCKS5 设置的浏览器、命令行工具与桌面应用。

HTTP 入站

监听地址
127.0.0.1
建议示例端口
10809
协议
http
用途
HTTP 代理入口

需要同时提供两类入口时,应使用不同端口,避免监听冲突。

多个入站可以同时存在。例如保留 10808 作为 SOCKS,增加 10809 作为 HTTP。每个入站应设置独立标签,便于路由规则按 inboundTag 区分来源。修改 v2rayN 的本地端口时,可进入「设置」→「参数设置」核对 SOCKS 与 HTTP 端口;应用中的代理端口也必须同步修改。

outbounds 出站:代理、直连与阻断的职责

出站定义请求离开 V2Ray 的方式。代理出站通常包含服务器地址、服务器端口、用户凭据和传输设置;直连出站使用 freedom;阻断出站使用 blackhole。路由模块不直接建立远程连接,只根据规则选出一个出站标签。

VMess 示例中的 vnext 是服务器列表,每个服务器可以包含一组用户。addressport 必须对应服务端监听信息,id 必须是服务端认可的用户标识。传输层还要核对 TCP、WebSocket、TLS 等配置;客户端和服务端只要有一项不一致,就可能表现为连接建立后立即断开或持续超时。

代理出站 proxy

协议
vmess
服务器端口
443
示例传输
TCP
默认用途
未匹配流量

实际服务器参数应来自有效节点配置,不能只替换地址而保留其他示例值。

本地策略出站

direct
freedom
block
blackhole
连接服务器
不需要
选择方式
routing 标签

直连和阻断也属于出站,它们同样需要唯一 tag 供规则引用。

字段 所在位置 作用 常见错误
protocol 出站对象 决定出站处理器类型 把 VMess 参数填入 VLESS 出站
settings 出站对象 保存服务器与用户参数 端口、用户标识与服务端不一致
streamSettings 出站对象 定义底层传输与安全层 TCP、WebSocket 或 TLS 配置错配
tag 出站对象 供路由规则引用 规则引用了不存在的标签

结论:先确认出站自身可用,再调路由

临时只保留一个代理出站并测试连接;确认服务器参数可用后,再加入 direct、block 和 routing。否则节点错误与分流错误会同时出现,日志难以判断问题来源。

routing 路由:规则顺序决定最终出口

routing.rules 是从上到下检查的规则数组。请求命中一条规则后,就使用该规则指定的 outboundTag,后面的规则不再处理该请求。因此范围更窄、优先级更高的规则应放在前面,范围较宽的规则放在后面。

domainStrategy: IPIfNonMatch 表示先尝试用域名规则匹配;域名规则没有命中时,再解析 IP 并继续检查 IP 规则。这个设置让 geosite:cngeoip:cn 可以配合使用,但也意味着 DNS 结果会影响 IP 规则的判断。

  1. 先处理需要明确阻断的协议或目标,避免后面的宽泛直连规则提前接管。
  2. 再处理 geoip:private,让局域网地址和私有地址直接连接。
  3. 随后匹配 geosite:cn,按域名分类选择直连。
  4. 域名未命中时,再用 geoip:cn 检查解析后的目标 IP。
  5. 其余流量没有匹配规则,落到出站数组第一项 proxy
匹配条件 示例值 目标出站 处理结果
protocol bittorrent block 交给阻断出站
ip geoip:private direct 局域网与私有地址直连
domain geosite:cn direct 匹配分类中的域名后直连
ip geoip:cn direct 匹配目标 IP 后直连

规则中的 outboundTag 不是协议名称,而是某个出站对象的 tag。如果出站标签叫 proxy,规则却写成 Proxy,两者不会被视为同一个标签。删除或改名出站时,也要搜索整个文件并更新所有引用。

结论:改分流时一次只移动一条规则

先记录目标域名和预期出口,再调整单条规则位置并观察日志。整段复制新的规则集会同时改变域名、IP 与默认出口,出现异常时很难定位是哪一项造成。

DNS 与日志:为什么配置正确仍可能分流异常

DNS 不只是把域名转换为 IP。在启用域名与 IP 混合匹配时,解析结果会参与路由判断。示例把 1.1.1.1localhost 放入服务器列表,表示可以使用指定 DNS,也可以交给本机解析器;真实网络中应根据可达性、解析结果和分流目标选择合适方案。

loglevel 设为 warning 适合日常运行,可以看到警告与错误。排查规则时可临时改为 info,获取更完整的运行信息;问题确认后再恢复,避免日志快速增长。JSON 字符串必须使用双引号,最后一个数组项或对象字段后不能保留多余逗号。

{
  "log": {
    "access": "access.log",
    "error": "error.log",
    "loglevel": "info"
  },
  "dns": {
    "hosts": {
      "domain:internal.example.com": "192.168.1.20"
    },
    "servers": [
      "1.1.1.1",
      "localhost"
    ]
  }
}

常见修改问题:从报错位置反推字段

手改配置最容易出现三类问题:JSON 语法损坏、字段放错层级、标签关系断开。语法错误通常会阻止内核启动;字段层级错误可能提示未知字段;标签错误则可能在请求真正命中规则时才暴露。排查时应先验证文件,再检查入口,最后检查请求走向。

改完端口后,浏览器立刻无法连接怎么办?

同时核对 config.json 的 inbounds.port 与浏览器代理端口。例如入站从 10808 改为 10818,浏览器仍指向 10808 就无法把请求交给新入口。

配置测试通过,为什么全部流量都直连?

检查 outbounds 第一项是否变成了 direct。未命中规则的请求会使用默认出站;若要默认代理,应把可用代理出站放在第一项,或增加明确覆盖目标的代理规则。

加入 geosite 规则后仍没有按域名分流?

先确认规则位于更宽泛的 IP 规则之前,再检查 domainStrategy。如果应用只提交目标 IP 而不提交域名,域名规则本身无法获得原始域名信息。

日志提示找不到 proxy 出站怎么处理?

outbounds 中搜索 tag,确认确实存在值为 proxy 的对象。标签区分大小写,也不能在标签前后加入空格。

v2rayN 导入节点后还需要手写整份 JSON 吗?

一般不需要。v2rayN 会根据节点和参数设置生成运行配置。需要定制本地端口时进入「设置」→「参数设置」;只有在使用自定义配置、复杂入站或特殊路由时,才需要逐段维护 JSON。

对于 v2rayNG 与 v2flyNG,订阅或分享链接同样会生成客户端运行所需配置。v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核,界面中的字段名称和可用传输能力可能随内核而异。不要把某个客户端导出的完整配置直接覆盖到另一内核环境,至少要先检查协议、传输字段和路由资源是否兼容。

  1. 备份当前可工作的 config.json,并记录本地入站端口。
  2. 每次只改一个区块,保存后先运行配置测试。
  3. 启动内核,确认 127.0.0.1:10808 已成功监听。
  4. 用单一目标测试代理出站,再测试直连规则与阻断规则。
  5. 观察日志中的目标地址、匹配结果和连接错误,确认后再继续修改。
下载 V2Ray 客户端 Windows、macOS、Android、Linux