inbounds:本地应用的入口
入站定义内核在哪个地址、哪个端口接收请求,以及使用什么代理协议。本机应用通常连接回环地址,避免将代理端口暴露到局域网。示例中的 SOCKS 和 HTTP 分别监听两个端口,应用侧必须填写相匹配的协议。端口不是固定标准,客户端设置中的实际值才是依据。与系统代理不同,入站本身不会通知浏览器使用代理;两端都配置正确,请求才能进入内核。
{
"inbounds": [
{
"tag": "socks-in",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": { "auth": "noauth", "udp": true }
},
{
"tag": "http-in",
"listen": "127.0.0.1",
"port": 10809,
"protocol": "http",
"settings": {}
}
]
}
outbounds:出站协议与 tag
出站负责把已接收的请求送往目标。直连使用 freedom,阻断使用 blackhole,代理出站则需要对应协议的远端参数。tag 是配置内部的引用名称,不是协议名称;routing 中的 outboundTag 必须与它完全一致。示例只展示直连和阻断,并不包含远端代理。常见配置未命中路由时使用第一个出站,因此调整数组顺序也可能改变默认路径,不能只看规则列表。
{
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {}
}
]
}
routing:先匹配,后选择出站
路由规则按从上到下的顺序判断,命中后选择对应出站。应把更具体的域名或地址规则放在宽泛规则之前,避免前面的条件提前接走请求。示例将私有地址交给 direct,前提是该出站已存在。IPIfNonMatch 表示域名规则未匹配时尝试解析地址再判断,并不等于所有应用都统一使用内置 DNS。geoip 与 geosite 引用的数据集合也需要可用,规则文本本身不包含这些数据。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
}
}
dns:解析器配置不等于完整接管
dns 模块设置内核内置解析器使用的服务器。它何时参与解析,还取决于路由策略、出站设置和应用提交的是域名还是地址。示例展示 hosts 静态映射与 DNS 服务器的基本结构,不代表加入这些字段就完成了所有解析流量的接管。浏览器的加密 DNS、系统解析器和内核解析器可能同时存在。排查解析路径时,应分别确认请求从哪里发起、经哪个出站发送,再判断是否符合预期。
{
"dns": {
"hosts": {
"domain:example.com": "192.0.2.1"
},
"servers": [
"https://1.1.1.1/dns-query"
],
"queryStrategy": "UseIPv4"
}
}
policy:按等级设置连接行为
policy 用于描述用户等级对应的连接策略,例如握手等待时间与空闲连接超时。levels 中的数字键表示等级,不是服务器编号;相关用户配置需使用对应 level 才能关联到策略。示例时间单位为秒,数值只是结构演示,不是适合所有网络的优化结论。超时设置过短可能中断较慢的握手或长连接。遇到断流时,应先确认日志与网络状态,再一次修改一个参数并比较结果。
{
"policy": {
"levels": {
"0": {
"handshake": 4,
"connIdle": 300,
"uplinkOnly": 2,
"downlinkOnly": 5
}
}
}
}
subscription:客户端管理概念
订阅由客户端管理,不是 V2Ray 内核 JSON 的顶层键。客户端读取订阅内容,将连接参数转换成可运行的配置;更新订阅也不等于升级内核。订阅地址可能带有访问凭据,应避免在截图和公开日志里展示。下面仍是有效的内核配置片段,用来说明最终配置中的出站位置,而不是订阅格式。它只有直连出站,不能替代订阅导入;实际代理参数应从已有的有效连接配置生成。
{
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}