初步了解基于TCP的DNS

引言

昨天说了一台服务器受到了NTP流量攻击,叫机房封了进出该机器的UDP数据包,虽然防御了攻击,
但是又出现了另一个问题,该台服务器程序需要使用DNS,封了进出该机器的UDP数据包,导致业务程序出问题了。
所以攻击过后,为了使上面的程序正常运行,又重新开启了进出该机器的UDP数据包。 从上面遇到的情况来看,如果再遇到这种UDP流量攻击,但上面有程序依赖DNS,我们该怎么办? 有一个解决方法是使用基于TCP的DNS。

用UDP还是TCP

注意到DNS名字服务器使用的熟知端口号无论对UDP还是TCP都是53。这意味着DNS均 支持UDP和TCP访问,但我们使用tcpdump观察的所有例子都是采用UDP。那么这两种协议 都在什么情况下采用以及采用的理由都是什么呢? 当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时, 它就意味着响应的长度超过了512个字节,而仅返回前512个字节。在遇到这种情况时,名字 解析器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节(回想在11.10 节讨论的UDP数据报的最大长度)。既然TCP能将用户的数据流分为一些报文段,它就能用多 个报文段来传送任意长度的用户数据。 此外,当一个域的辅助名字服务器在启动时,将从该域的主名字服务器执行区域传送。 我们也说过辅助服务器将定时(通常是3小时)向主服务器进行查询以便了解主服务器数据是 否发生变动。如果有变动,将执行一次区域传送。区域传送将使用TCP,因为这里传送的数 据远比一个查询或响应多得多。 既然DNS主要使用UDP,无论是名字解析器还是名字服务器都必须自己处理超时和重传。 此外,不像其他的使用UDP的Internet应用(TFTP、BOOTP和SNMP),大部分操作集中在局 域网上,DNS查询和响应通常经过广域网。分组丢失率和往返时间的不确定性在广域网上比 局域网上更大。这样对于DNS客户程序,一个好的重传和超时程序就显得更重要了。

基于TCP的DNS软件

1.unbound

2.pdnsd

上面的软件以后有时间测试下。

Ref

《TCP/IP详解 卷1:协议》 第14章 DNS:域名系统 14.8 用UDP还是用TCP
TCP 方式查询解决 DNS 污染问题
DNS使用的是TCP协议还是UDP协议