add DNS fallback (#139)
* Update dns.md https://github.com/XTLS/Xray-core/releases/tag/v1.5.0pull/142/head
							parent
							
								
									c656ba63b2
								
							
						
					
					
						commit
						f14597dd20
					
				| 
						 | 
					@ -23,15 +23,16 @@ Xray 内置的 DNS 模块,主要有两大用途:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## DNS 处理流程
 | 
					## DNS 处理流程
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DNS 服务器配置模块可以配置多个 DNS 服务器, 并且指定优先匹配列表.
 | 
					若当前要查询的域名:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. 查询的域名与某个 DNS 服务器指定的域名列表匹配时,Xray 会优先使用这个 DNS 服务器进行查询。
 | 
					- 命中了 `hosts` 中的「域名 - IP」、「域名 - IP 数组」映射,则将该 IP 或 IP 数组作为 DNS 解析结果返回。
 | 
				
			||||||
2. 无匹配时, 按从上往下的顺序进行查询,并且会跳过 1 步骤中使用的最后一个服务器。
 | 
					- 命中了 `hosts` 中的「域名 - 域名」映射,则该映射的值(另一个域名)将作为当前要查询的域名,进入 DNS 处理流程,直到解析出 IP 后返回,或返回空解析。
 | 
				
			||||||
3. 只返回匹配 expectIPs 的 IP 列表。
 | 
					- 没有命中 `hosts`,但命中了某(几)个 DNS 服务器中的 `domains` 域名列表,则按照命中的规则的优先级,依次使用该规则对应的 DNS 服务器进行查询。若命中的 DNS 服务器查询失败或 `expectIPs` 不匹配,则使用下一个命中的 DNS 服务器进行查询;否则返回解析得到的 IP。若所有命中的 DNS 服务器均查询失败或 `expectIPs` 不匹配,此时 DNS 组件:
 | 
				
			||||||
 | 
					  - 默认会进行 「DNS 回退(fallback)查询」:使用「上一轮失败查询中未被使用的、且 `skipFallback` 为默认值 `false` 的 DNS 服务器」依次查询。若查询失败或 `expectIPs` 不匹配,返回空解析;否则返回解析得到的 IP。
 | 
				
			||||||
DNS 服务器的处理流程示意图如下:
 | 
					  - 若 `disableFallback` 设置为 `true`,则不会进行「DNS 回退(fallback)查询」。
 | 
				
			||||||
 | 
					- 既没有命中 `hosts`,又没有命中 DNS 服务器中的 `domains` 域名列表,则:
 | 
				
			||||||

 | 
					  - 默认使用「`skipFallback` 为默认值 `false` 的 DNS 服务器」依次查询。若第一个被选中的 DNS 服务器查询失败或 `expectIPs` 不匹配,则使用下一个被选中的 DNS 服务器进行查询;否则返回解析得到的 IP。若所有被选中的 DNS 服务器均查询失败或 `expectIPs` 不匹配,返回空解析。
 | 
				
			||||||
 | 
					  - 若「`skipFallback` 为默认值 `false` 的 DNS 服务器」数量为 0 或 `disableFallback` 设置为 `true`,则使用 DNS 配置中的第一个 DNS 服务器进行查询。查询失败或 `expectIPs` 不匹配,返回空解析;否则返回解析得到的 IP。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## DnsObject
 | 
					## DnsObject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,11 +51,16 @@ DNS 服务器的处理流程示意图如下:
 | 
				
			||||||
        "address": "1.2.3.4",
 | 
					        "address": "1.2.3.4",
 | 
				
			||||||
        "port": 5353,
 | 
					        "port": 5353,
 | 
				
			||||||
        "domains": ["domain:xray.com"],
 | 
					        "domains": ["domain:xray.com"],
 | 
				
			||||||
        "expectIPs": ["geoip:cn"]
 | 
					        "expectIPs": ["geoip:cn"],
 | 
				
			||||||
 | 
					        "skipFallback": false
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "localhost"
 | 
					      "localhost"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "clientIp": "1.2.3.4",
 | 
					    "clientIp": "1.2.3.4",
 | 
				
			||||||
 | 
					    "queryStrategy": "UseIP",
 | 
				
			||||||
 | 
					    "disableCache": false,
 | 
				
			||||||
 | 
					    "disableFallback": false,
 | 
				
			||||||
 | 
					    "disableFallbackIfMatch": false,
 | 
				
			||||||
    "tag": "dns_inbound"
 | 
					    "tag": "dns_inbound"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -105,6 +111,29 @@ DNS 服务器的处理流程示意图如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
用于 DNS 查询时通知服务器以指定 IP 位置。不能是私有地址。
 | 
					用于 DNS 查询时通知服务器以指定 IP 位置。不能是私有地址。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::: tip TIP 1
 | 
				
			||||||
 | 
					需要 DNS 服务器支持 EDNS Client Subnet。
 | 
				
			||||||
 | 
					:::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::: tip TIP 2
 | 
				
			||||||
 | 
					可以在 [DnsObject](#dnsobject) 为所有 DNS 服务器指定 clientIp, 也可在每个 DNS 服务器配置的 [ServerObject](#serverobject) 为此 DNS 服务器指定 clientIp (优先级高于 [DnsObject](#dnsobject) 的配置)。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> `queryStrategy`: "UseIP" | "UseIPv4" | "UseIPv6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`UseIPv4` 只查询 A 记录;`UseIPv6` 只查询 AAAA 记录。默认值为 `UseIP`,即查询 A 和 AAAA 记录。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> `disableCache`: true | false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`true` 禁用 DNS 缓存,默认为 `false`,即不禁用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> `disableFallback`: true | false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`true` 禁用 DNS 的 fallback 查询,默认为 `false`,即不禁用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> `disableFallbackIfMatch`: true | false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`true` 当 DNS 服务器的优先匹配域名列表命中时,禁用 fallback 查询,默认为 `false`,即不禁用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> `tag`: string
 | 
					> `tag`: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
由内置 DNS 发出的查询流量,除 `localhost` 和 `DOHL_` 模式外,都可以用此标识在路由使用 `inboundTag` 进行匹配。
 | 
					由内置 DNS 发出的查询流量,除 `localhost` 和 `DOHL_` 模式外,都可以用此标识在路由使用 `inboundTag` 进行匹配。
 | 
				
			||||||
| 
						 | 
					@ -149,3 +178,7 @@ DNS 服务器端口,如 `53`。此项缺省时默认为 `53`。当使用 DOH 
 | 
				
			||||||
当配置此项时,Xray DNS 会对返回的 IP 的进行校验,只返回包含 expectIPs 列表中的地址。
 | 
					当配置此项时,Xray DNS 会对返回的 IP 的进行校验,只返回包含 expectIPs 列表中的地址。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
如果未配置此项,会原样返回 IP 地址。
 | 
					如果未配置此项,会原样返回 IP 地址。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> `skipFallback`: true | false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`true`,在进行 DNS fallback 查询时将跳过此服务器, 默认为 `false`,即不跳过。
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue