这里的小型局域网主要指中小型网吧、小型办公室等环境,一般具有以下特点:内部主机较少、出接口通过拨号方式获得临时公网 IP 地址以供内部主机访问 Internet。
对于这种情况,可以使用 Easy IP 方式使局域网用户都通过这个 IP 地址接入 Internet。
Easy IP 示意图
如图所示, Easy IP 方式的处理过程如下:
1. Router 收到内网侧主机发送的访问公网侧服务器的报文。比如收到 Host A 报文的源地址是 10.1.1.100,端口号 1540。
2. Router 利用公网侧接口的“公网 IP 地址+端口号”,建立与内网侧报文“源 IP 地址+源端口号”间的 Easy IP 转换表项(正反向),并依据查找正向 Easy IP 表项的结果将报文转换后向公网侧发送。比如 Host A 的报文经 Router 转换后的报文源地址为 162.10.2.8,端口号 5480。
3. Router 收到公网侧的回应报文后,根据其“目的 IP 地址+目的端口号”查找反向 Easy IP 表项,并依据查表结果将报文转换后向内网侧发送。比如Server回应Host A的报文经Router转换后,目的地址为10.1.1.100,端口号 1540。
ALG 是对特定的应用层协议进行转换,在对这些特定的应用层协议进行 NAT 转换过程中,通过 NAT 的状态信息来改变封装在 IP 报文数据部分中的特定数据,最终使应用层协议可以跨越不同范围运行。
以 ICMP 协议为例介绍 ALG 处理的过程。比如一个“目的站点不可达”的 ICMP 报文,该报文数据部分包含了造成错误的数据报文 A 的首部(注意, NAT 发送数据报文 A 之前进行了地址转换,所以源地址不是内部主机的真实地址)。如果开启了 ICMP ALG 功能,在 NAT 转发 ICMP 报文之前,它将与 NAT 交互,打开 ICMP 报文 并转换其数据部分的报文 A 首部的地址,使这些地址表现为内部主机的确切地址形式,最后由 NAT 将这个 ICMP报文转发出去。
四、DNS Mapping
在某些应用中,私网用户希望通过域名访问位于同一私网的内部服务器,而 DNS 服务器却位于公网。由于通常DNS 响应报文中携带的是内部服务器的公网 IP 地址,因此若 NAT 设备未将 DNS Server 解析的公网 IP 替换成内部服务器对应的私网 IP,私网用户将无法通过域名访问到内部服务器。
这个问题可以使用 DNS Mapping 方式来解决,通过配置“域名—公网 IP 地址—公网端口—协议类型”映射表,建立内部服务器的域名与其公网信息间的对应关系。
DNS Mapping 示意图
如图所示,私网用户 Host 希望通过域名方式访问 Web Server, Router 作为 NAT 服务器。当 Router 设备收到DNS 响应报文后,先根据其中携带的域名查找 DNS Mapping 映射表,再根据“公网 IP 地址—公网端口—协议类型”查找 Web Server,然后将 DNS 响应报文中的公网 IP 地址替换成 Web Server 的私网 IP 地址。这样, Host 收到的 DNS 响应报文中就携带了 Web Server 的私网 IP 地址,从而可以通过域名来访问 Web Server。
五、NAT 关联 VPN
路由器的 NAT 不仅可以使内部网络的用户访问外部网络,还允许内部网络中分属于不同 VPN(Virtual Private Network)的用户通过同一个出口访问外部网络,解决内部网络中 IP 地址重叠的 VPN 同时访问外网主机的问题;
实现方式如下:
1. VPN 1 内的主机 A 和 VPN 2 内的主机 B 地址重叠,都为私网地址 10.1.1.1,都要同时访问外部网络的一个服务器。
2. Router在做源NAT时,将内部VPN作为一个NAT的匹配条件,将主机A发出报文的源IP转换为202.1.1.1,将主机 B 发出报文的源 IP 转换为 202.1.2.1,同时在建立的 NAT 转换表中,记录用户的 VPN 信息。
3. 当外部网络服务器回应内部网络主机 A 和 B 的报文经过 Router 时,根据已建立的 NAT 会话表, NAT 模块将发往主机 A 报文的目的 IP 从 202.1.1.1 转换为 10.1.1.1,然后再发往 VPN 1 的目的主机;将发往主机B 报文的目的 IP 从 202.1.2.1 转换为 10.1.1.1,然后再发往 VPN 2 的目的主机。
VPN 关联的 NAT Server
VPN 关联的 NAT Server 是指外网主机通过 NAT 技术访问内网中分属不同 VPN 的服务器,组网如图所示:
上图中, VPN 1 内 Server A 和 VPN 2 内的 Server B 的地址都是 10.1.1.1;使用 202.1.10.1 做为 VPN 1 内的 Server A的外部地址,使用 202.1.20.1 做为 VPN 2 内的 Server B 的外部地址。这样,外部网络的用户使用 202.1.10.1 就可以访问到 VPN 1 提供的服务,使用 202.1.20.1 就可以访问 VPN 2 提供的服务。
实现方式如下:
1. 外部网络的主机访问 VPN 1 内的 Server A,报文目的 IP 是 202.1.10.1;
访问 VPN 2 内的 Server B,报文目的 IP 是 202.1.20.1。
2. Router 在做 NAT server 时,根据报文的目的 IP 及 VPN 信息进行判断,将目的 IP 是 202.1.10.1 的报文的目的 IP 转换为 10.1.1.1,然后发往 VPN 1 的目的 Server A;将目的 IP 是 202.1.20.1 的报文的目的 IP 转换为10.1.1.1,然后发往 VPN 2 的目的 Server B;同时在新建的 NAT 会话表中,记录下关联的 VPN 信息。
3. 当内部 Server A 和 B 回应外部网络主机的报文经过 Router 时,根据已建立的 NAT 会话表, NAT 模块将从Server A 发出的报文的源 IP 从 10.1.1.1 转换为 202.1.10.1,再发往外部网络;将从 Server B 发出的报文的源 IP 从 10.1.1.1 转换为 202.1.20.1,再发往外部网络。
六、两次 NAT
两次 NAT 即 Twice NAT,指源 IP 和目的 IP 同时转换,该技术应用于内部网络主机地址与外部网络上主机地址重叠的情况。
两次 NAT 示意图
如图所示,两次 NAT 转换的过程如下:
1. 内网 Host A 要访问地址重叠的外部网络 Host B, Host A 向位于外部网络的 DNS 服务器发送访问外网 Host B 的 DNS 请求, DNS 服务器应答 Host B 的 IP 地址为 1.1.1.1, DNS 应答报文在经过 Router 时,进行 DNS ALG, Router 将 DNS 应答报文中的重叠地址 1.1.1.1 转换为唯一的临时地址 3.3.3.1,然后再转发给 Host A。
2. Host A 访问 Host B,目的 IP 为临时地址 3.3.3.1,报文在经过 Router 时, Router 检查到目的 IP 是临时地址,进行目的地址转换,将报文的目的 IP 转换为 Host B 的真实地址 1.1.1.1,同时进行正常的 NAT Outbound转换,将报文的源 IP 转换为源 NAT 地址池地址;Router 将报文转发到 Host B。
3. Host B 回应 Host A,目的 IP 为 Host A 的 NAT Outbound 地址池地址,源 IP 为 Host B 的地址 1.1.1.1,报文在经过 Router 时, Router 检查到源 IP 是重叠地址,进行源地址转换,将报文的源 IP 转换为对应的临时地址 3.3.3.1,同时进行正常的目的地址转换,将报文的目的 IP 从源 NAT 地址池地址转换为 Host A 的内网地址 1.1.1.1;Router 将报文转发到 Host A。
内网多 VPN 情况下的两次 NAT 示意图
考虑到内网有多个 VPN 的场景,且内网多个 VPN 的地址一样的情况下,在路由器 DNS ALG 时,增加内网 VPN信息作为重叠地址池到临时地址的映射关系匹配条件之一,如图 2 所示。内网多 VPN 情况下的两次 NAT 转换过程和两次 NAT 转换的过程类似,只是 VPN A 中的 Host A 转换为临时地址 3.3.3.1,而 VPN B 中的 Host B 转换为临时地址 4.4.4.1。
七、NAT 过滤和映射方式
NAT 过滤功能可以让 NAT 设备对外网发到内网的流量进行过滤;NAT 映射功能可以让内部网络中的一组主机通过 NAT 映射表映射到一个外部 IP 地址,共享这一个 IP 地址,所有不同的信息流看起来好像来源于同一个 IP 地址。