Linux 系统会读取如下三处 DNS 配置,它们的优先级从高到低:

如果一个主机名同时匹配多条 DNS 规则,则采用第一条匹配的。

主机名中不支持使用通配符。

修改网络配置之后需要重启 network 服务:systemctl restart network

查询一个域名时,同时只能向一个 nameserver 发出 DNS 请求。如果超时未响应,则向下一个 nameserver 发出 DNS 请求。

比如查询域名 host1 时,会准备多个可能的域名,依次尝试解析:

如果某个域名解析成功,则立即结束查询。如果所有域名都解析失败,则查询失败。

尝试解析每个域名时,会按 IPv4、IPv6 分别发出两个 DNS 请求。

综上,查询一个域名时,最好指定完整域名,从而减少 DNS 请求数。

如果原域名中的 . 点数小于 ndots ,则先尝试解析 search 域名,然后尝试解析原域名。否则先尝试解析原域名。

程序客户端、下游的 DNS 服务器每次查询 DNS 成功之后,通常会将该 DNS 记录缓存一段时间,避免频繁发出查询请求的耗时。

用户在域名注册商处配置 DNS 规则时,可以指定 TTL ,即这条解析规则的有效时长,超时之后应该重新向 DNS 服务器发出查询请求。

DNS 缓存的有效时长不一定与 TTL 一致。