2.网络地址翻译及其实现方法以及应该注重的问题 目前NAT功能通常被集成到路由器、防火墙等设备中。NAT设备维护一个NAT表,用它来实现全局到本地和本地到全局地址的映射。路由器或防火墙等设备利用NAT表把非法的私有IP地址映射到合法的全局IP地址上去。每个私有地址包通过NAT设备都被翻译成合法的全局IP地址发往下一级设备,这意味着给NAT设备的处理器带来了一定的负担。但这对于一般的网络来说是微不足道的,除非是有许多主机的大型网络。 NAT有三种类型:静态NAT(static NAT)、NAT池(pooled NAT)和端口NAT(PAT)。其中静态NAT设置起来最为简单,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而NAT池则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。PAT则是把内部地址映射到外部网络的一个IP地址的不同端口上。当建立内部网的时候,建议使用以下地址组用于主机,这些地址是由Network Working Group(RFC 1918)保留用于私有网络地址分配的。 Class A:10.1.1.1 to 10.254.254.254 Class B:172.16.1.1 to 172.31.254.254 Class C:192.168.1.1 to 192.168.254.254 下面是一个利用NAT功能实现内部私有地址来访问Internet的案例和可能碰到的问题。
在图1的拓扑结构试验条件下,Router-A配置为用来实现NAT功能,来自Inside Router地址全都被翻译为“test”地址池中。Router-A的配置如下,其它路由器利用静态路由来实现各路由器之间互通。 hostname Router-A ! ip nat pool test 172.16.47.161 172.16.47.165 PRefix-length 28 ip nat inside source list 7 pool test ! interface Ethernet0 ip address 135.135.1.2 255.255.255.0 shutdown ! interface Serial0 ip address 171.68.200.49 255.255.255.0 ip nat inside no ip mroute-cache no ip route-cache no fair-queue ! interface Serial1 ip address 172.16.47.146 255.255.255.240 ip nat outside no ip mroute-cache no ip route-cache ! ip classless ip route 0.0.0.0 0.0.0.0 172.16.47.145 access-list 7 permit 192.168.0.0 0.0.255.255 ! line con 0 exec-timeout 0 0 line aux 0 line vty 0 4 login ! end 通过使用Debug命令,从Inside Router发出一些源地址为171.68.200.48,目的地址为171.68.191.1的ICMP包,我们可以发现,从Inside Router可以Ping通任何外部合法的全局地址。用Show ip nat translations命令可以看出,内部私有地址与外部全局合法地址之间翻译的NAT表。 Router-A#show ip nat translations Pro Inside global Inside local Outside local Outside global --- 172.16.47.161 171.68.200.48 --- --- 然而,当我们用Clear ip nat translation命令后,从Outer Router发出一些源地址为171.68.191.1,目的地址为172.16.47.161(或者为NAT池test中任何一个地址)的ICMP包,发现它们之间不能Ping通。这是由于NAT翻译表中没有任何翻译记录,所以Router-A只能将这些ICMP包路由按照缺省路径向Router-B转发该包,而Router-B认为目的地址为172.16.47.161包应该发向Router-A转发,这样在Router-A和Router-B形成了一个路由环,严重的情况可能引起线路中断。为了避免类似的问题发生,我们可以在Router-A中增加一条静态路由。 ip route 172.16.47.160 255.255.255.252 null0 这样所有的到NAT翻译地址池的路由都指向这个虚拟的null0接口。
在该实例中,我们所采用的策略路由方法是基于源IP地址的策略路由。该用户同时连着两个不同ISP,而且每个ISP都为用户提供不同的合法地址空间。我们采用策略路由和网络地址翻译的方法,将不同的源IP地址沿不同的ISP接入到Internet。如图2,源地址为10.1.0.0/2的数据包沿ISP1路由,源地址为10.2.0.0/2的数据包沿ISP1路由。路由器具体大概配置方法如下: hostname WAN-Router ip nat pool provider1-space 211.111.11.1 211.111.11.254 prefix-length 24 ip nat pool provider2-space 222.122.22.1 222.122.22.254 prefix-length 24 ip nat inside source route-map provider1-map pool provider1-space ip nat inside source route-map provider2-map pool provider2-space ! interface Serial0/0 ip address 222.102.7.5 255.255.255.252 ip nat outside ! interface Serial0/1 ip address 211.109.5.5 255.255.255.252 ip nat outside ! interface FastEthernet1/0 ip address 10.1.1.1 255.255.0.0 ip nat inside ip policy route-map provider1-map ! interface FastEthernet1/1 ip address 10.2.1.1 255.255.0.0 ip nat inside ip policy route-map provider2-map ! route-map provider1-map permit 10 match ip address 1 match interface Serial0/0 ! route-map provider2-map permit 10 match ip address 2 match interface Serial0/1 ! accesss-list 1 permit ip 10.1.0.0 0.0.255.255 accesss-list 2 permit ip 10.2.0.0 0.0.255.255 ! ip route 211.111.11.0 255.255.255.0 null0 ip route 222.122.22.0 255.255.255.0 null0