内网用户通过域名访问内网WEB服务器,域名解析错误导致访问失败

发布时间:  2013-06-26 浏览次数:  996 下载次数:  0
问题描述

如图:内网用户通过公网IP地址可以正常访问内网WEB服务器,但是通过域名却无法访问,通过nslookup检查域名解析,解析结果为错误的私网IP地址
告警信息
处理过程
处理过程
既然内网可以通过公网IP地址访问内网服务器,因此只要保证DNS Response 报文数据域中answer字段的IP地址不被ALG进程修改,问题即可解决。登陆防火墙,关闭ALG对DNS报文的检测,命令
        Firewall zone trust
        Undo detect dns
        Firewall zone untrust
        Undo detect dns

通过nslookup 检查域名解析,解析结果正常,在内网通过域名访问内网web服务器,访问成功,故障排除
根因
DNS属于多通道协议,防火墙默认开启了ALG功能,可以检测到DNS Response报文数据域answer字段的IP地址,查看是否匹配server-map表项,如果能匹配,则将对应的公网IP地址转换为私网IP地址,因此,在内网访问服务器直接通过私网IP地址进行访问,不会导致访问失败的现象出现,登陆防火墙查看NAT Server的配置,用户通过端口映射将出口公网IP映射了多台内网服务器,防火墙ALG进程在处理DNS Response报文 answer字段IP地址时会和server-map中的表项以此匹配,如图:
Nat Server, any -> 1.1.1.1:21[192.168.1.10:21], Zone: ---
   Protocol: tcp(Appro: ftp), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public

Nat Server Reverse, 192.168.1.10[1.1.1.1] -> any, Zone: ---
   Protocol: any(Appro: ---), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public

Nat Server, any -> 1.1.1.1:80[192.168.1.11:80], Zone: ---
   Protocol: tcp(Appro: http), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public

Nat Server Reverse, 192.168.1.11[1.1.1.1] -> any, Zone: ---
   Protocol: any(Appro: ---), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public

Nat Server, any -> 1.1.1.1:6000[192.168.1.13:6000], Zone: ---
   Protocol: udp(Appro: unknown), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public

Nat Server Reverse, 192.168.1.13[1.1.1.1] -> any, Zone: ---
   Protocol: any(Appro: ---), Left-Time: --:--:--, Addr-Pool: ---
   VPN: public -> public
因此匹配结果是192.168.1.10,而不是正确的web服务器地址192.168.1.11
建议与总结
对于FTP、DNS等多通道协议而言,由于应用层数据域中携带了需要通告或是协商的IP地址和端口,因此在NAT转换的时候,也同时需要将数据域中的私网IP地址做相应的转换,否则会导致对端再次发起连接时是目的地址是一个不可达的IP地址和端口,此案例应用场景比较特殊,由于内网没有部署DNS server导致DNS请求报文穿过防火墙转发到公网的DNS server 解析,而正是ALG的特性导致了错误的IP地址转换

END