VXVX Docs

路由

RouterConfig 与 RuleConfig

路由在 ServerConfig.routerRouterConfig)中配置。

模式定义: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

rules

有序路由规则

RuleConfig

目标: outboundTagselectorTag 须恰好设置其一。若均为空,连接将被阻断

outboundTag
string

发往该出站处理器

selectorTag
string

发往选择器(客户端 / 负载均衡)

matchAll
bool

匹配所有连接。为 true 时忽略 conditions

conditions

匹配谓词列表。当任一条件成立时规则命中(逻辑 OR)。matchAlltrue 时忽略。若为空且 matchAllfalse,规则永不命中。

推荐使用此字段,而非顶层匹配字段或单数 condition

condition

旧版。 单个条件;等价于 conditions 中的一项。仅在 conditions 为空时使用。

fallbacks

主目标失败时尝试备用选择器/出站

ruleName
string

名称

Fallback

selectorTag
string

备用选择器(与 outboundTag 二选一)

outboundTag
string

备用出站(与 selectorTag 二选一)

action

回退时的附加动作

matchAll
bool

匹配所有连接时启用此回退

conditions

回退条件列表。当任一条件成立时此回退可用(逻辑 OR)。matchAlltrue 时忽略。

condition

旧版。 单个条件。仅在 conditions 为空时使用。也支持旧版顶层 domainTags / dstIpTags(合并为单个隐式条件)。

last
bool

若此回退被选用,则为最终回退,后面的不再考虑

Action

Fallback.action 的字段:

ipToDomain
bool

回退时将 IP 改写回域名

Condition

用于 RuleConfig.conditionsRuleConfig.condition(旧版)或 Fallback.conditions / Fallback.condition(旧版)。

每个 Condition 是规则或回退 conditions 列表中的一项。列表内任一条件成立即匹配(OR);单个 Condition所有已启用的子条件须同时成立(AND)。若无任何子条件,该 Condition 不成立。

usernames
string[]

匹配已认证用户 id

srcCidrs
string[]

源 IP 匹配

srcIpTags
string[]

源 IP 匹配, 使用Geo里的集合名称

dstCidrs
string[]

目标 IP 匹配

dstIpTags
string[]

目标 IP 匹配, 使用Geo里的集合名称

resolveDomain
bool

解析域名;所有 IP 须在 dstIpTagsdstCidrs

resolveSoftRewrite
bool

解析域名,任意 IP 在 dstIpTagsdstCidrs 中即可,并将目标改写为此 IP

resolveSoftNoRewrite
bool

解析域名,任意 IP 在 dstIpTagsdstCidrs 中即可,但不改写目标

geoDomains

内联 Domain 条目进行域名匹配

domainTags
string[]

域名匹配(引用 geo 集合)

networks
Network[]

TCPUDP

srcPortRanges

源端口范围

dstPortRanges

目标端口范围

appIds

应用 id 匹配

appTags
string[]

应用集合匹配(引用 geo 集合)

protocols
string[]

协议嗅探结果

ipv6
bool

仅匹配 IPv6

fakeIp
bool

匹配 Fake IP 目标

hasNoDomain
bool

连接使用 IP 目标且无嗅探到的域名

allTags
string[]

域名、IP 或应用集合联合匹配(任一集合命中即可)

skipSniff
bool

对 IP 目标连接禁用嗅探

inboundTags
string[]

匹配入站 tag

SelectorConfig

选择器从一组出站中筛选候选节点,再按策略选出实际用于连接的节点。定义在 ClientConfig.selectorsSelectorsConfig),主要用于 VX 客户端路由规则通过 selectorTag 引用其 tag

客户端 UI 行为说明见选择器

tag
string

选择器名称。RuleConfig.selectorTagFallback.selectorTag 引用此值。

filter

候选出站池的筛选条件,见 Filter

strategy
SelectingStrategy

从筛选池中实际选用哪些节点:

  • ALL:池中全部节点
  • ALL_OK:全部可用节点(无可用时回退到未测试节点)
  • LEAST_PING:ping 最低的单节点
  • MOST_THROUGHPUT:测速吞吐量最高的单节点
  • TOP_PING:ping 在最低值 30% 以内的所有节点(如最低 100 ms → 包含 ≤ 130 ms)
  • TOP_THROUGHPUT:吞吐量 ≥ 最高值 70% 的所有节点(如最高 100 → 包含 ≥ 70)

单节点策略(LEAST_PINGMOST_THROUGHPUT)不使用 balanceStrategy;多节点策略才需要负载均衡。

balanceStrategy
BalanceStrategy

多节点策略下,每条连接由哪个节点处理:

  • RANDOM(默认):从活跃集合中随机选择;IPv6 连接优先选支持 IPv6 的节点
  • MEMORY:按应用或根域名粘性复用同一节点;尚无映射时随机分配并记住
selectFromOm
bool

服务端此项应为 true

speedTestSize
uint32

每次测速的下载字节数。未设置 speedTestSizeRange 且为 0 时,核心默认 1 MiB

speedTestInterval
uint32

对筛选节点测速的间隔(分钟)。仅 MOST_THROUGHPUTTOP_THROUGHPUT 会定期测速。

pingTestInterval
uint32

对筛选节点 ping 的间隔(分钟)。仅 LEAST_PINGTOP_PING 会定期 ping。

unusableTestInterval
uint32

重新检查已标记不可用节点的间隔(分钟)。除 ALL 外各策略都会检测可用性。

speedTestSizeRange

测速下载大小的随机范围(字节)。满足 0 < min ≤ max 时,每次测速在 [min, max] 内随机取值;否则使用 speedTestSize

Filter

prefixes
string[]

出站 tag 以任一前缀开头即匹配

tags
string[]

出站 tag 等于列表中任一值即匹配

subStrings
string[]

出站 tag 包含任一子串即匹配(仅数据库模式)

inverse
bool

true 时取反:未命中 prefixes / tags 的出站才入选(出站管理器模式)

SpeedTestSizeRange

min
uint32

随机测速大小的下限(字节)

max
uint32

随机测速大小的上限(字节)

相关

  • GeodomainTagsdstIpTagsgeoDomains
  • DNSresolveDomain 规则的解析
  • 调度器 — 嗅探影响协议/域名匹配

评论