7. 路由、规则与策略#
路由系统决定“一条连接最终走哪个出口”。Link1 的规则按顺序执行,第一条命中即返回结果。
最小规则#
rules:
- MATCH,DIRECT
含义:所有连接都直连。
常见代理配置:
rules:
- DOMAIN-SUFFIX,google.com,PROXY
- GEOIP,CN,DIRECT
- MATCH,PROXY
含义:
*.google.com走PROXY。
- 目标 IP 属于 CN 走
DIRECT。
- 其他所有连接走
PROXY。
规则格式#
普通规则:
TYPE,ARGUMENT,ACTION[,OPTIONS]
MATCH:
MATCH,ACTION
逻辑规则:
AND,((规则1),(规则2)),ACTION
OR,((规则1),(规则2)),ACTION
NOT,((规则1)),ACTION
子规则跳转:
SUB-RULE,(条件表达式),子规则名称
逗号与引号#
规则行使用逗号分隔字段。通常节点名、策略组名、RULE-SET 名和 SUB-RULE 名不应包含逗号;如果确实包含逗号,可以用双引号包裹对应字段:
rules:
- DOMAIN-SUFFIX,corp.example,"Corp, VPN"
- RULE-SET,"$Corp, VPN","Corp, VPN"
- MATCH,"Fallback, Group"
双引号内可以用反斜杠转义 " 和 \。单引号也可用于包裹字段;单引号内用两个单引号表示一个字面量单引号。引号只影响逗号分隔和首尾 quote 去除,不改变字段语义;action 仍必须能匹配到实际节点名或策略组名。
Action 是什么#
Action 是规则命中后要交给谁处理,可以是:
DIRECT:直连。
REJECT:拒绝。
- 静态节点名。
- provider 生成的节点名。
- 策略组名。
如果 action 不存在,配置编译会失败。
规则类型全集#
域名规则#
| 类型 | 参数 | 含义 | 示例 |
|---|---|---|---|
DOMAIN | 域名 | 精确匹配域名 | DOMAIN,example.com,DIRECT |
DOMAIN-SUFFIX | 后缀 | 匹配域名后缀 | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD | 关键字 | 域名包含关键字 | DOMAIN-KEYWORD,google,PROXY |
DOMAIN-WILDCARD | 通配符 | 按 * 通配匹配 | DOMAIN-WILDCARD,*.example.com,PROXY |
DOMAIN-REGEX | 正则 | 按正则匹配域名 | DOMAIN-REGEX,^api\..*,PROXY |
GEOSITE | 分类 | 按 GeoSite 分类匹配 | GEOSITE,cn,DIRECT |
实际影响:这些规则需要 Link1 知道域名。显式代理通常能拿到域名;TUN/透明代理依赖 DNS/Fake-IP/Sniffer。
IP、GeoIP 与 ASN 规则#
| 类型 | 参数 | 含义 | 示例 |
|---|---|---|---|
IP-CIDR | CIDR | 目标 IP 属于网段 | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve |
IP-CIDR6 | IPv6 CIDR | 目标 IPv6 属于网段 | IP-CIDR6,fc00::/7,DIRECT,no-resolve |
IP-SUFFIX | IP 后缀 | 目标 IP 后缀匹配 | IP-SUFFIX,1.2,DIRECT |
IP-ASN | ASN | 目标 IP ASN 匹配 | IP-ASN,13335,PROXY |
GEOIP | 国家/区域代码 | 目标 IP GeoIP 匹配 | GEOIP,CN,DIRECT |
SRC-GEOIP | 国家/区域代码 | 源 IP GeoIP 匹配 | SRC-GEOIP,CN,DIRECT |
SRC-IP-ASN | ASN | 源 IP ASN 匹配 | SRC-IP-ASN,45102,DIRECT |
SRC-IP-CIDR | CIDR | 源 IP 属于网段 | SRC-IP-CIDR,192.168.9.0/24,DIRECT |
SRC-IP-SUFFIX | IP 后缀 | 源 IP 后缀匹配 | SRC-IP-SUFFIX,9.10,DIRECT |
no-resolve 影响:
- 写在 IP 相关规则后,表示不要为了这条规则主动解析域名。
- 适合保留地址、内网地址等无需 DNS 的规则。
- 如果目标只有域名且规则需要 IP,不解析就不会命中。
端口、入站与网络规则#
| 类型 | 参数 | 含义 | 示例 |
|---|---|---|---|
DST-PORT | 端口/范围 | 目标端口匹配 | DST-PORT,443,PROXY |
SRC-PORT | 端口/范围 | 源端口匹配 | SRC-PORT,50000-60000,DIRECT |
IN-PORT | 端口/范围 | 入站端口匹配 | IN-PORT,7890,PROXY |
IN-TYPE | 类型,可用 / 分隔 | 入站类型匹配 | IN-TYPE,tun/HTTP,PROXY |
IN-USER | 用户,可用 / 分隔 | 入站认证用户匹配 | IN-USER,alice,PROXY |
IN-NAME | 入站名称,可用 / 分隔 | listener/TUN 等入口名匹配 | IN-NAME,hy2-in,PROXY |
NETWORK | tcp 或 udp | 网络类型匹配 | NETWORK,udp,PROXY |
DSCP | 0-63 或范围 | DSCP 值匹配 | DSCP,46,PROXY |
端口范围常见写法:80、443、10000-20000。TUN 选择器里端口范围用 start:end,规则里按规则解析器支持的范围格式。
进程与 UID 规则#
| 类型 | 参数 | 含义 | 示例 |
|---|---|---|---|
PROCESS-PATH | 路径 | 进程路径精确匹配 | PROCESS-PATH,/usr/bin/curl,DIRECT |
PROCESS-PATH-WILDCARD | 通配符 | 进程路径通配匹配 | PROCESS-PATH-WILDCARD,*/Chrome,PROXY |
PROCESS-PATH-REGEX | 正则 | 进程路径正则匹配 | PROCESS-PATH-REGEX,.*/Chrome.*,PROXY |
PROCESS-NAME | 名称 | 进程名精确匹配 | PROCESS-NAME,curl,DIRECT |
PROCESS-NAME-WILDCARD | 通配符 | 进程名通配匹配 | PROCESS-NAME-WILDCARD,Google*,PROXY |
PROCESS-NAME-REGEX | 正则 | 进程名正则匹配 | PROCESS-NAME-REGEX,.*Chrome.*,PROXY |
UID | UID 或范围 | Linux/Android UID 匹配 | UID,1000-1002,PROXY |
实际影响:
- 进程规则依赖平台能力和
find-process-mode。
- 路由器、容器、部分系统权限下可能拿不到进程信息。
UID规则只支持 Linux/Android。
规则集与逻辑规则#
| 类型 | 参数 | 含义 | 示例 |
|---|---|---|---|
RULE-SET | 规则集名 | 引用 rule-providers 或 rule-sets | RULE-SET,private,DIRECT |
AND | 规则表达式 | 所有条件都满足 | AND,((DOMAIN-SUFFIX,example.com),(DST-PORT,443)),PROXY |
OR | 规则表达式 | 任意条件满足 | OR,((DOMAIN,a.com),(DOMAIN,b.com)),PROXY |
NOT | 规则表达式 | 条件不满足 | NOT,((GEOIP,CN)),PROXY |
SUB-RULE | 条件 + 子规则名 | 条件满足后跳到子规则 | SUB-RULE,(DST-PORT,443),tls-flow |
MATCH | 无 | 兜底 | MATCH,DIRECT |
逻辑规则中不能使用 MATCH 和 SUB-RULE 作为内部 matcher。
子规则#
子规则让你把一段规则流程拆出来:
sub-rules:
tls-flow:
- DOMAIN-SUFFIX,openai.com,AI
- DOMAIN-SUFFIX,github.com,PROXY
- MATCH,DIRECT
rules:
- SUB-RULE,(DST-PORT,443),tls-flow
- MATCH,DIRECT
实际影响:
- 主规则命中
SUB-RULE的条件后,进入指定子规则列表继续匹配。
- 子规则名称必须存在。
- 避免循环引用。
rule-providers#
规则 provider 从 HTTP、文件或内联 payload 加载大量规则。
rule-providers:
private:
type: http
behavior: domain
format: text
url: https://example.com/private.txt
path: ./rules/private.txt
interval: 86400
proxy: DIRECT
size-limit: 1048576
rules:
- RULE-SET,private,DIRECT
字段影响:
| 字段 | 含义 | 实际影响 |
|---|---|---|
type | http、file、inline | 决定规则来源 |
behavior | domain、ipcidr、classical | 决定 payload 如何解释和优化 |
format | yaml、text、mrs | 决定文件格式 |
url | HTTP URL | type=http 使用 |
path | 本地路径/缓存路径 | http 缓存或 file 读取 |
interval | 刷新间隔,秒 | 控制自动刷新频率 |
proxy | 下载 provider 使用的出口 | 避免规则订阅被网络环境阻断 |
header | HTTP 请求头 | 用于认证或 User-Agent |
payload | 内联规则 | type=inline 使用 |
size-limit | 下载大小限制 | 防止异常大响应占内存/磁盘 |
behavior 选择#
| behavior | payload 内容 | 适合场景 |
|---|---|---|
domain | 域名、后缀、关键字等 | 域名分流 |
ipcidr | CIDR 列表 | IP 分流、TUN 路由集 |
classical | 完整规则语法 | 复用复杂规则列表 |
rule-sets#
rule-sets 是已解析/内联规则集配置,通常用于运行时或高级配置。用户一般优先使用 rule-providers。
规则顺序建议#
推荐从具体到通用:
rules:
# 1. 本机、局域网、管理面
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- DOMAIN-SUFFIX,lan,DIRECT
# 2. 明确业务域名
- DOMAIN-SUFFIX,openai.com,AI
- DOMAIN-SUFFIX,github.com,PROXY
# 3. 大规则集
- RULE-SET,reject,REJECT
- RULE-SET,private,DIRECT
- RULE-SET,china,DIRECT
- RULE-SET,global,PROXY
# 4. IP 地理规则
- GEOIP,CN,DIRECT
# 5. 最终兜底
- MATCH,PROXY
用 Link1 App 测试规则#
Link1 App 的规则测试功能可以构造一条“虚拟连接”,不真正访问网络,只检查规则会怎样匹配。常用输入包括:
| 输入 | 示例 | 会影响哪些规则 |
|---|---|---|
| 目标域名 | chat.example.com | DOMAIN、DOMAIN-SUFFIX、GEOSITE |
| 目标 IP | 1.1.1.1 | IP-CIDR、GEOIP、IP-ASN |
| 端口 | 443 | DST-PORT |
| 网络类型 | tcp / udp | NETWORK |
| 入站类型 | mixed / tun | IN-TYPE、IN-NAME、IN-PORT |
| 源 IP | 192.168.9.10 | SRC-IP-CIDR、SRC-GEOIP |
测试结果应重点看三项:
- 命中了哪一条规则。
- 最终 action 是节点、策略组、
DIRECT还是REJECT。
- 是否因为缺少域名、缺少源信息或规则顺序导致落到兜底
MATCH。
如果规则测试正确,但真实连接不正确,说明真实连接的元数据和测试输入不同。最常见原因是透明代理/TUN 下真实连接只有 IP,没有域名。