DNS选择机制

ooowl
  • 计算机网络
  • 课程
  • 计算机网络
  • 计算机网络自顶向下
  • DNS
About 3 min

DNS选择机制

多个DNS

在多个dns服务器下,只有第一个彻底不通的时候才会使用到第二个。
例如:你第一个设置一个不可使用的 IP : 1.1.1.1 第二个设置 114.114.114.114 ,这个时候就可以使用了。
如果你第一个 DNS ,没有彻底挂了的时候,例如 DNS 服务不正常,能通,但无法解析,这个时候是不会使用到第二个 DNS 的。man文档open in new window
Windows: 第一个超过 1s 没返回就使用第二个,当你使用 nslookup 或者 dig 时,是仅用第一个的。微软官方有文档dan但我没找到
但是 linux 的 DNS 系统是可以设置的。可以设置成负载均衡,也可以设置成每次请求向所有配置的 DNS 发送请求,谁先回复就用谁的,也可以像楼主描述的一样按照顺序查询 DNS 运行机制 | Howie's Notesopen in new window

DNS fallback机制

谈一谈各种 DNSopen in new window 接下来再说说一种叫做 DNS fallback 的技术(这个名字可能不太对),在代理服务器不支持 UDP 的时候,单纯的全局 TCP/UDP 流量代理 就会出问题了,因为要解析 DNS 就需要 UDP,服务器不支持 UDP 就没办法处理 DNS ,也就没办法处理所有域名请求了,DNS fallback 是一种可以强制让应用程序把 DNS 请求以 TCP 流量发送出去的技术。

需要说明的是,如果用了 V2Ray 的技术,或者 Fake DNS,那 DNS fallback 是没必要的,DNS fallback 也是一种处理 DNS 相关问题技术,这里只是想把这种技术也列举出来

众所周知一般的 DNS 请求都是用 UDP 发的,但 DNS 的 UDP 报文的大小会被限制在大概 512 字节,如果某个 DNS 答复很长,超过了这个限制,就不能通过 UDP 来传输了,为此 DNS 规范中提出,对于这种超过限制大小的 DNS 请求,DNS 服务器可以在答复中设置一个 flag(truncated),来告诉客户端这个答复太长,你不能用 UDP 来做这个 DNS 请求,请用 TCP,于是客户端就会用 TCP 来重新请求 DNS。

DNS fallback 正是利用了这一点,在 tun2socks 给过来的 UDP 流量中识别出 DNS 请求,然后伪造一个设置了 truncated flag 的答复返回给客户端,客户端就会转用 TCP 来做 DNS 请求了。

DNS fallback 的实现也是非常简单的,有兴趣可以看一下 这里的代码open in new window

Loading...