Skip to content

Commit 4a2d0dc

Browse files
committed
DNS: Refine process flow
1 parent ee52110 commit 4a2d0dc

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

docs/config/dns.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Xray 内置的 DNS 模块,主要有三大用途:
1515
- 透明代理时劫持 DNS 流量;或直接对外暴露 53 端口充当递归 DNS 服务器。
1616

1717
::: tip TIP 1
18-
内置 DNS 服务器所发出的 DNS 查询请求,会自动根据路由配置进行转发
18+
DNS 服务器默认进入路由系统进行匹配,除非其包含 `+local` 在其中使用域名时,注意可能的回环问题,`hosts` 可能有帮助
1919
:::
2020

2121
::: tip TIP 2
@@ -24,16 +24,20 @@ Xray 内置的 DNS 模块,主要有三大用途:
2424

2525
## DNS 处理流程
2626

27-
若当前要查询的域名:
27+
域名将先执行 Hosts 映射检查(详见 `hosts` 字段),若没有查出需要的 IP,则继续使用 DNS 服务器进行查询。
28+
29+
而后核心将开始构建一个DNS列表,核心会根据请求的域名,将服务器进行排序,遵循以下规则。
30+
31+
- 构建列表 1:包含请求域名的 `domains` 列表中的服务器,顺序与配置文件中相同。
32+
- 检查 `disableFallback` 若为真则跳过构建列表 2。
33+
- 检查 `disableFallbackIfMatch` 若为真且列表 1 不为空则跳过构建列表 2。
34+
- 构建列表 2:包含不在列表 1 且 `skipFallback` 不为真的服务器,顺序与配置文件中相同。
35+
- 最终服务器列表 = 列表 1 + 列表 2。
36+
37+
注:任何 FinalQuery 为真的DNS服务器都将直接截断后面的部分。
38+
39+
执行 DNS 查询时,核心将依次使用最终服务器列表中的服务器进行查询,并使用 `expectedIPs``unexpectedIPs` 过滤结果,为空则尝试列表中的下一个。(`enableParallelQuery` 为真时行为略有不同,详见其字段描述)
2840

29-
- 命中了 `hosts` 中的「域名 - IP」、「域名 - IP 数组」映射,则将该 IP 或 IP 数组作为 DNS 解析结果返回。
30-
- 命中了 `hosts` 中的「域名 - 域名」映射,则该映射的值(另一个域名)将作为当前要查询的域名,进入 DNS 处理流程,直到解析出 IP 后返回,或返回空解析。
31-
- 没有命中 `hosts`,但命中了某(几)个 DNS 服务器中的 `domains` 域名列表,则按照命中的规则的优先级,依次使用该规则对应的 DNS 服务器进行查询。若命中的 DNS 服务器查询失败或 `expectedIPs` 不匹配,则使用下一个命中的 DNS 服务器进行查询;否则返回解析得到的 IP。若所有命中的 DNS 服务器均查询失败或 `expectedIPs` 不匹配,此时 DNS 组件:
32-
- 默认会进行 「DNS 回落(fallback)查询」:使用「上一轮失败查询中未被使用的、且 `skipFallback` 为默认值 `false` 的 DNS 服务器」依次查询。若查询失败或 `expectedIPs` 不匹配,返回空解析;否则返回解析得到的 IP。
33-
-`disableFallback` 设置为 `true`,则不会进行「DNS 回落(fallback)查询」。
34-
- 既没有命中 `hosts`,又没有命中 DNS 服务器中的 `domains` 域名列表,则:
35-
- 默认使用「`skipFallback` 为默认值 `false` 的 DNS 服务器」依次查询。若第一个被选中的 DNS 服务器查询失败或 `expectedIPs` 不匹配,则使用下一个被选中的 DNS 服务器进行查询;否则返回解析得到的 IP。若所有被选中的 DNS 服务器均查询失败或 `expectedIPs` 不匹配,返回空解析。
36-
- 若「`skipFallback` 为默认值 `false` 的 DNS 服务器」数量为 0 或 `disableFallback` 设置为 `true`,则使用 DNS 配置中的第一个 DNS 服务器进行查询。查询失败或 `expectedIPs` 不匹配,返回空解析;否则返回解析得到的 IP。
3741

3842
## DnsObject
3943

@@ -90,7 +94,7 @@ Xray 内置的 DNS 模块,主要有三大用途:
9094
静态 IP 列表,其值为一系列的 "域名": "地址" 或 "域名": ["地址 1","地址 2"]。其中地址可以是 IP 或者域名。在解析域名时,如果域名匹配这个列表中的某一项:
9195

9296
- 当该项的地址为 IP 时,则解析结果为该项的 IP.
93-
- 当该项的地址为域名时,会使用此域名进行 IP 解析,而不使用原始域名
97+
- 当该项的地址为域名时,将在 hosts 列表中使用此域名重复进行递归匹配,深度最高为 5,如果最后没有查出 IP,则这个域名会被交由后续的 DNS 服务器进行解析
9498
- 当地址中同时设置了多个 IP 和域名,则只会返回第一个域名,其余 IP 和域名均被忽略。
9599
- 当地址中的第一个值为井号后加数字(如 `#3`)时,如果在使用 DNS 出站,核心会返回空的响应以及该数字编号对应的 rcode 以拒绝请求,如果请求来自内部查询则会单纯视为失败。
96100
- 当被解析域名匹配列表中多个域名时,所有关联的 IP 都会被返回。

0 commit comments

Comments
 (0)