学网络的人应该都是知道的,现在Internet上的IPv4地址已经非常紧张了甚至可以说临近枯竭了,为了解决IP地址枯竭的问题,网络技术领域中出现了一种叫NAT的技术,它的全称是Network Address Translation(网络地址转换),原理就是在路由器收到数据包之后发出数据包之前将数据包的IP包头中源IP地址转换成定义的一个新的IP地址,当然,如果是一对一的话是就没有做到节约IP地址的目的(NAT的产生据说最初并不是为了解决IP地址枯竭的问题,就像私网地址最初的出现也不是为了解决IP地址枯竭问题一样),所以在NAT的基础上在加上端口这个概念,并在路由器进行NAT转换的过程中生成一张NAT表,记录端口的对应关系,所以就出现了现在用于缓解IPv4地址的NAT,叫做PAT,下面,我们就来做一个NAT配置的实验,在实验中掌握NAT的配置方法。
这个就是实验的拓扑图,PC0的IP地址是192.168.1.2/24,路由器接PC的接口是192.168.1.1/24,路由器接ISP的接口是189.151.187.2/30,ISP的IP地址是189.151.187.1/30,首先我们先做好底层的配置,IP地址呀啥啥的,相信这个对大家来说是很简单的。
配完底层之后,我们就开始配置NAT了,NAT的配置主要是在FireWall上,首先,我们需要定义一下允许进行NAT转换的网段,当然咯,这个要用ACL实现、。
access-list 1 permit 192.168.1.0 0.0.0.255 //实验拓扑中只有192.168.1.0/24的网段要访问ISP,所以我们只用写这一条ACL即可,实际情况则根据实际情况判断
写完了ACL之后则是定义NAT的inside接口和outside接口,当然,不管是那种接口,都是不限制个数的,就是说可以定义多个inside接口,outside接口也是一样的,实验拓扑中我们需要将fa0/0定义为outside接口,fa0/1定义为inside接口,命令如下:
interface FastEthernet0/0
ip nat outside
interface FastEthernet0/1
ip nat inside
再下一步,就是定义NAT转化了,这里有两种情况,一种情况是内网地址可以转换成多个公网地址,另一种内网地址只转换成出接口的IP地址,如果是前者的话,那么需要先定义一个地址池在做下面的步骤,如果是后者的话,那么就可以直接做下面的步骤。定义地址池的命令是ip nat pool +起始IP地址+结尾IP地址+netmask+子网掩码。
刚才说有两种情况,如果是前者的话需要定义地址池,定义的命令上面已经说了,定义完了之后就可以写NAT配置命令了,如果是后者的话则可以直接写NAT配置命令,NAT配置命令是:
ip nat inside source list 1 pool +地址池名称+ overload //这种写法是用于定义了地址池的NAT转换
ip nat inside source list 1 interface FastEthernet0/0 overload //这种写法是用于直接用出接口地址做NAT转换
不管是那种写法,后面我们都加上了一个overload,这个命令必须要加,不加的话就是普通的NAT而不是PAT了,而刚才上面已经说过了的,普通的NAT不能解决IP地址短缺的问题的。
写到这里不知道会不会有人会问,既然有ip nat inside,那么有没有ip nat outside呢?答案是肯定的,ip nat outsite是用于IP地址映射或者是端口映射的,比如内网有一台HTTP服务器,用的是内网地址,我希望公网能通过公网的IP地址访问到这台服务器,那么就要用到ip nat outside命令,这个问题有兴趣的我们可以单独讨论,但是这个问题不在这篇文章的讨论范围内,我就不在赘述了。
最后,别忘了在FireWall上加上命令ip route 0.0.0.0 0.0.0.0 fa0/0(指向公网接口的默认路由),当然,在我们的实验环境中不指这条默认路由也是能通的,但是大家要注意,ISP上的网段不可能只有直连的一个网段的,如果内网访问的并不是与ISP直连的那个网段呢?
到此为止NAT的配置就已经结束了,下面大家可以用PC0去ping一下ISP的IP地址189.151.187.1,看看能不能ping通,然后再到FireWall上用命令show ip nat translations看一下NAT表,“欣赏”一下自己的实验结果吧,O(∩_∩)O~