Windows2003 RRAS内置的NAT服务貌似不支持基于TCP的DNS查询

工作环境的计算机是在内网中通过一台安装Windows 2003企业版服务器的路由和远程访问服务(RRAS)上网的,使用系统自带的NAT服务,也开启了客户端DNS转发功能。偶尔发现如果在 nslookup里面查询一些域名会得不到返回的A记录结果(比如personal.avira-update.com),而是返回一个未知的错误 (unspecified error),但是ping同样的域名或者用浏览器访问又是完全正常的,用wireshark抓包看一下,发现在通常的UDP查询DNS记录的数据包之后,出现了几个基于TCP的DNS查询请求(同样是53端口),但是Windows2003服务器没有响应TCP的请求。于是google之,终 于明白了其中的原因。

在这里(http://www.tcpipguide.com/free/t_DNSMessageGenerationandTransport-2.htm)和 http://www.tcpipguide.com/free/t_DNSMessageHeaderandQuestionSectionFormat.htm 说明的很详细了,其实也就是在 RFC文档中定义的DNS的查询规范(RFC1035:http://www.ietf.org/rfc/rfc1035.txt)。简单而言就是当 DNS解析器发出一个UDP请求后,如果返回的DNS response数据报文超过512字节,其中的tc删节标志比特位就会被置为1,说明反馈报文因为超长而有删节,这是因为UDP的报文最大长度为512 字节。解析器发现后,就会使用TCP重发DNS请求,TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。
还有一种情况是,当一个域的辅助域名服务器启动时,将从该域的主域名服务器primary DNS server执行区域传送。除此之外,辅域名服务器也会定时(一般是3小时)向PDS进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区 域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个普通的DNS response要多得多。

由此看来,Windows2003 服务器系统RRAS中自带的NAT应该是默认不支持基于TCP的DNS查询的转发的,也许在Windows 2008以及2008 R2的服务器中已经得到支持了,这点还需要实际测试来验证。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注