在某些应用中,私网用户希望通过域名访问时位于同一私网的内部服务器,而此时用于解析内部服务器的DNS 服务器却位于公网。这样,当用户访问时首先会通过NAT处位于公网的DNS 服务器发出域名解析请求,公网中的DNS 服务器发出响应报文时在数据部分携带的是内部服务器对应的公网IP 地址(也就是在NAT Server 上配置的公网映射IP 地址)。这时如果在NAT Server 上没将DNS 服务器解析的公网IP 替换成内部服务器对应的私网IP 地址,私网用户将无法通过域名访问到内部服务器,因为此时私网用户访问的是公网IP 地址,而实际上服务器是在私网中,IP 地址为私网IP 地址,自然就访问不了。

这个问题可以使用DNS Mapping 方式来解决。其实DNS Mapping 技术是6.2.1 小节介绍的DNS ALG 技术的一种补充技术。在DNS ALG 中,报文中的IP 地址信息直接通过NAT 映射表进行替换,而DNS Mapping 在替换报文数据部分的地址信息时先要通过查找专门配置的“域名-公网IP 地址-公网端口-协议类型”映射表,找到对应域名所映射的公网IP 地址后使用NAT 地址映射表对数据部分的地址信息(还可能包括端口、协议)用内部服务器的私网地址信息(同样还可能包括端口、协议)进行替换。建立“域名-公网IP 地址-公网端口-协议类型”映射表的目录是建立内部服务器的公网域名与其公网地址信息间的对应关系。

【经验之谈】这里的DNS Mapping 与6.2.1 小节介绍的NAT ALG 有相似之处,都是用来解决一些应用协议报文中数据部分地址信息转换的问题,但两者之间又有较大不同,主要体现在用来替换的私网IP 地址可能不一样。另外,ALG 功能还允许数据部分为私网信息的报文穿越NAT 设备,在不同网络中传输,DNS Mapping 本身没这种功能。所以DNS Mapping 必须同时结合ALG DNS 才能最终生效,否则在数据部分为私网地址和端口信息的报文是不能穿越NAT 设备进行传输的。当然,DNS Mapping 是仅应用于DNS 应用中,不能应用于ALG 中还包括的FTP、RSTP 等之类的应用中。

在地址和端口信息转换方面,NAT ALG 中是直接利用静态配置,或者动态形成的公网IP 地址与私网IP 地址NAT 映射表中的私网IP 地址同时替换报文中IP 报头中的目的IP 地址和数据部分中的公网IP 地址,所以替换的私网IP 地址与发起访问的主机的私网IP 地址是绝对一致的。DNS Mapping 中是通过事先配置的“域名-公网IP 地址-公网端口-协议类型”映射表查找对应公网IP 地址所对应的私网IP 地址(或同时包括端口、协议信息)进行替换的;报文中的IP 报头部分的目的IP 地址是通过NAT 地址映射表(在静态NAT 或者NATServer 中配置的)进行替换的。这时数据部分替换的私网IP 地址与IP 报头部分替换的私网目的IP 地址可能一样(在NAT Server 应用中),也可能不一样(在静态NAT 应用中)。

图6-5 所示为DNS Mapping 的基本原理。私网用户Host 希望通过域名方式访问Web服务器,Router 作为NAT Server。当Router 设备收到DNS 服务器发出的响应报文后,先根据其中携带的域名(www.test.com)查找“域名-公网IP 地址-公网端口-协议类型”映射表,找到对应域名所用的公网IP 地址,然后根据NAT 上配置公网IP 地址与私网IP地址的静态映射关系,将报文中的目的IP 地址和数据部分的服务器公网IP 地址(或同时将端口)替换成为Web 服务器的私网IP 地址10.1.1.200(或同时替换端口)。这样,Host 收到的DNS 响应报文中就携带了Web 服务器的私网IP 地址,从而可以通过域名来访问Web 服务器了。



DNS Mapping 仅可应用于静态NAT 和NAT Server 中,不能应用于动态NAT 中,这也是它与ALG 技术的一种明显区别。