路由
RouterConfig 与 RuleConfig
路由在 ServerConfig.router(RouterConfig)中配置。
模式定义:protos/proto/vx/router/router.proto。
规则按顺序评估,第一条匹配的规则决定出站或选择器。命中后后续规则不在考虑。
示例
全部路由到直连:
{
"router": {
"rules": [
{ "matchAll": true, "outboundTag": "direct" }
]
}
}将某入站路由到某出站:
{
"router": {
"rules": [
{
"conditions": [
{ "inboundTags": ["trojan"] }
],
"outboundTag": "direct"
}
]
}
}域名或应用集合任一匹配时走代理:
{
"router": {
"rules": [
{
"conditions": [
{ "domainTags": ["proxy"] },
{ "appTags": ["proxy"] }
],
"selectorTag": "proxy"
}
]
}
}RouterConfig
RuleConfig
目标: outboundTag 与 selectorTag 须恰好设置其一。若均为空,连接将被阻断。
outboundTag发往该出站处理器
matchAll匹配所有连接。为 true 时忽略 conditions。
conditions匹配谓词列表。当任一条件成立时规则命中(逻辑 OR)。matchAll 为 true 时忽略。若为空且 matchAll 为 false,规则永不命中。
推荐使用此字段,而非顶层匹配字段或单数 condition。
ruleName名称
Fallback
selectorTag备用选择器(与 outboundTag 二选一)
outboundTag备用出站(与 selectorTag 二选一)
matchAll匹配所有连接时启用此回退
last若此回退被选用,则为最终回退,后面的不再考虑
Action
Fallback.action 的字段:
ipToDomain回退时将 IP 改写回域名
Condition
用于 RuleConfig.conditions、RuleConfig.condition(旧版)或 Fallback.conditions / Fallback.condition(旧版)。
每个 Condition 是规则或回退 conditions 列表中的一项。列表内任一条件成立即匹配(OR);单个 Condition 内所有已启用的子条件须同时成立(AND)。若无任何子条件,该 Condition 不成立。
usernames匹配已认证用户 id
srcCidrs源 IP 匹配
srcIpTags源 IP 匹配, 使用Geo里的集合名称
dstCidrs目标 IP 匹配
dstIpTags目标 IP 匹配, 使用Geo里的集合名称
resolveDomain解析域名;所有 IP 须在 dstIpTags 或 dstCidrs 中
resolveSoftRewrite解析域名,任意 IP 在 dstIpTags 或 dstCidrs 中即可,并将目标改写为此 IP
resolveSoftNoRewrite解析域名,任意 IP 在 dstIpTags 或 dstCidrs 中即可,但不改写目标
networksTCP、UDP 等
protocols协议嗅探结果
ipv6仅匹配 IPv6
fakeIp匹配 Fake IP 目标
hasNoDomain连接使用 IP 目标且无嗅探到的域名
allTags域名、IP 或应用集合联合匹配(任一集合命中即可)
skipSniff对 IP 目标连接禁用嗅探
inboundTags匹配入站 tag
SelectorConfig
选择器从一组出站中筛选候选节点,再按策略选出实际用于连接的节点。定义在 ClientConfig.selectors(SelectorsConfig),主要用于 VX 客户端;路由规则通过 selectorTag 引用其 tag。
客户端 UI 行为说明见选择器。
tag选择器名称。RuleConfig.selectorTag 与 Fallback.selectorTag 引用此值。
strategy从筛选池中实际选用哪些节点:
ALL:池中全部节点ALL_OK:全部可用节点(无可用时回退到未测试节点)LEAST_PING:ping 最低的单节点MOST_THROUGHPUT:测速吞吐量最高的单节点TOP_PING:ping 在最低值 30% 以内的所有节点(如最低 100 ms → 包含 ≤ 130 ms)TOP_THROUGHPUT:吞吐量 ≥ 最高值 70% 的所有节点(如最高 100 → 包含 ≥ 70)
单节点策略(LEAST_PING、MOST_THROUGHPUT)不使用 balanceStrategy;多节点策略才需要负载均衡。
balanceStrategy多节点策略下,每条连接由哪个节点处理:
RANDOM(默认):从活跃集合中随机选择;IPv6 连接优先选支持 IPv6 的节点MEMORY:按应用或根域名粘性复用同一节点;尚无映射时随机分配并记住
selectFromOm服务端此项应为 true
speedTestSize每次测速的下载字节数。未设置 speedTestSizeRange 且为 0 时,核心默认 1 MiB。
speedTestInterval对筛选节点测速的间隔(分钟)。仅 MOST_THROUGHPUT 与 TOP_THROUGHPUT 会定期测速。
pingTestInterval对筛选节点 ping 的间隔(分钟)。仅 LEAST_PING 与 TOP_PING 会定期 ping。
unusableTestInterval重新检查已标记不可用节点的间隔(分钟)。除 ALL 外各策略都会检测可用性。
speedTestSizeRange测速下载大小的随机范围(字节)。满足 0 < min ≤ max 时,每次测速在 [min, max] 内随机取值;否则使用 speedTestSize。
Filter
prefixes出站 tag 以任一前缀开头即匹配
tags出站 tag 等于列表中任一值即匹配
subStrings出站 tag 包含任一子串即匹配(仅数据库模式)
inversetrue 时取反:未命中 prefixes / tags 的出站才入选(出站管理器模式)
SpeedTestSizeRange
min随机测速大小的下限(字节)
max随机测速大小的上限(字节)