AR作DNS Proxy未设DNS源地址导致DNS查询失败

发布时间:  2014-12-30 浏览次数:  207 下载次数:  1
问题描述
组网描述:
AR作为DNS Proxy,在LAN侧AR同时作为PC的网关和DNS服务器,在WAN侧AR通过两条等价路由链路连接到远端的DNS Server。




故障现象:
正常工作时,PC将向AR发送DNS请求,然后AR作为代理向远端DNS Server发送DNS解析请求。业务测试中发现,由于等价路由的存在,AR会在Secondary Link上抓到以链路1的IP1为源地址的DNS报文,由于该报文不被BNG2识别,故报文将被丢弃,从而导致DNS查询失败。
告警信息
DNS查询失败
处理过程
处理过程:
找到了问题原因,问题就很好解决了,可以通过在AR上设置DNS 服务器的源地址再叠加NAT就能解决该问题:
#
dns server source-ip 192.168.1.1
#
添加这个命令后,AR创建DNS报文时将固定设置DNS报文的源地址为192.168.1.1,然后再在两个WAN侧接口上使能NAT,那么这个DNS报文就能被正确转发了。

根因
原因分析:
AR在LAN侧接收PC发送的DNS报文,同时作为代理将该DNS请求发出。
AR配置同步服务器配置为:
#
dns resolve 
dns server 10.130.50.4   //10.130.50.4为远端DNS地址
dns domain ims.vodafone.it
dns proxy enable
#
ip route-static 10.130.50.4 255.255.255.255 link1 //两条等价路由
ip route-static 10.130.50.4 255.255.255.255 link2
#
为什么用link1的源地址,却从link2将该报文发出去呢?这得从报文的初始创建开始分析,当要生成一个DNS报文时,DNS Server内部的Sockets模块会先检查是否设置了DNS Server源地址,本场景中暂未设置,故跳到下一步,由于未设置源地址,故将会查询路由表,此时发现到达目的Server有两条路由,Socket模块会固定选择第一条路由的接口信息创建DNS报文。当报文创建完成后,DNS报文将进入转发流程,此时将会进行第二次路由查询,由于到达目的DNS Server为等价路由,此时将根据等价路由原则(五元组哈希算法)进行转发,导致link2上看到了以link1作为源地址DNS报文,从而导致了问题产生。
解决方案
在AR上设置DNS 服务器的源地址再叠加NAT就能解决该问题:
#
dns server source-ip 192.168.1.1
#
添加这个命令后,AR创建DNS报文时将固定设置DNS报文的源地址为192.168.1.1,然后再在两个WAN侧接口上使能NAT,那么这个DNS报文就能被正确转发了。

建议与总结
在WLAN侧存在等价路由的情况下,AR作为DNS Proxy要注意设备DNS Server的源地址

END