Refine domainStrategy

This commit is contained in:
Meow
2026-09-12 06:38:54 +08:00
parent ab204432b9
commit 46c680b71b
9 changed files with 90 additions and 42 deletions
+5 -7
View File
@@ -24,15 +24,13 @@
域名解析策略,根据不同的设置使用不同的策略。
- `"AsIs"`:不进行额外操作,使用目标地址里的域名或者 sniff 到的域名。默认值;
- `"IPIfNonMatch"`:一整轮匹配结束后,当没有命中任何规则时,将域名解析成 IP 再次进行二次匹配;
- `"IPOnDemand"`:在开始进行匹配前,直接先将域名解析为 IP 进行匹配;
- `"AsIs"`:不进行 DNS 解析。默认值;
- `"IPIfNonMatch"`:先不进行域名解析,若一整轮匹配结束后未命中任何规则且目标包含域名,则重新开始第二轮匹配;第二轮遇到包含 `ip` 条件的规则时,使用内置 DNS 将域名解析为 IP 后进行匹配;
- `"IPOnDemand"`:若目标包含域名,遇到包含 `ip` 条件的规则时,使用内置 DNS 将域名解析为 IP 后进行匹配;若解析失败,则使用原始目标 IP 进行匹配;
实际解析行为会被推迟到第一次遇到 IP 规则以降低延迟。结果将同时包含 IPv4 与 IPv6(你可以在内置 DNS 的 `queryStrategy` 进行二次限制) 域名解析出多条 IP 时每条规则将依次尝试全部 IP,只要任意一 IP 符合要求即视为命中规则。
解析结果将同时包含 IPv4 与 IPv6(可通过内置 DNS 的 `queryStrategy` 进一步限制)。域名解析出多个 IP 时,每条规则会依次尝试所有 IP;任一 IP 符合条件,即视为命中该规则。
当开启 sniff + routeOnly 使路由系统可以同时看见 IP 和域名时,如果发生上述的解析,路由系统只能看到由域名解析出的 IP 而无法看见原始目标 IP, 除非解析失败。
当存在两个域名时(目标域名 + sniff 结果), 无论是用于解析还是用于域名匹配,sniff 结果的优先级总是更高。
原始目标可能是 IP,也可能是域名。当开启 [`sniffing`](./inbound.md#sniffingobject) 且启用 `routeOnly` 时,路由系统除了原始目标外,还能看到嗅探得到的域名。因此,即使没有进行 DNS 解析,只要原始目标中已有 IP,路由系统仍可使用该 IP 进行规则匹配。当原始目标域名与嗅探结果同时存在时,无论用于 DNS 解析还是域名匹配,嗅探结果的优先级始终更高。
无论解析与否,路由系统不会影响真正目标地址,请求的目标仍然是原始目标。