前言
随着网络设备的数量不断增长,对IPv4地址的需求也不断增加,导致可用IPv4地址空间逐渐耗尽。解决IPv4地址枯竭问题的权宜之计是分配可重复使用的各类私网地址段给企业内部或家庭使用。然而,私有地址不能在公网中路由。NAT是将IP数据报报头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能。 NAT一般部署在连接内网和外网的网关设备上。当收到的报文源地址为私网地址、目的地址为公网地址时,NAT可以将源私网地址转换成一个公网地址。这样公网目的地就能够收到报文,并做出响应。此外,网关上还会创建一个NAT映射表,以便判断从公网收到的报文应该发往的私网目的地址。
NAT 的功能
1. 解决IP地址不足
2. 隐藏并保护内部计算机
工作原理
术语 | 解释 |
---|---|
内部本地 | 转换之前内部源地址的名字 |
外部本地 | 转换之前目标主机的名字 |
内部全局 | 转换之后内部主机的名字 |
外部全局 | 转换之后外部目标主机的名字 |
原理:
当内部网络中的一台主机想传输数据到外部网络时,它先将数据包传输到NAT路由器上,路由器检查数据包的报头,获取该数据包的源IP信息,并从它的NAT映射表中找出与该IP匹配的转换条目,用所选用的内部全局地址(全球唯一的IP地址)来替换内部局部地址,并转发数据包。
当外部网络对内部主机进行应答时,数据包被送到NAT路由器上,路由器接收到目的地址为内部全局地址的数据包后,它将用内部全局地址通过NAT映射表查找出内部局部地址,然后将数据包的目的地址替换成内部局部地址,并将数据包转发到内部主机。
总结一下:NAT设备维护一个状态表,用来把非法的IP地址映射到合法的IP地址上去。
实现方式
静态转换
静态NAT实现了私有地址和公有地址的一对一映射。如果希望一台主机 优先使用某个关联地址,或者想要外部网络使用一个指定的公网地址访问内部服务器时,可以使用静态NAT。但是在大型网络中,这种一对一的IP地址映射无法缓解公用地址短缺的问题。
动态转换
动态NAT是通过使用地址池来实现的。所有被授权访问internet的私有ip地址可以随机的转换为地址池中的合法的ip地址。动态NAT地址池中的地址用尽以后,只能等待被占用的公用ip被释放后,其他主机才能使用它来访问公网。
端口多路复用(PAT)
允许多个内部地址映射到同一个公有地址的不同端口。最大限度的节约ip地址资源,这是目前网络中应用最多的NAT方式。(家用路由器就是这种)
相关配置
静态NAT
1.首先要清楚在哪个路由器上做?出口路由器
2.设置NAT转换:
R3(config)#ip nat inside source static 192.168.20.100 13.1.1.1
3.指定inside与outside端口
inside:为内部网络的网关接口
R3(config)#interface f0/1
R3(config-if)#ip nat inside
outside:出口路由器的出接口
R3(config)#int f0/0
R3(config-if)#ip nat outside
4.测试:R3#debug ip nat
R3#undebug ip nat
R3#undebug all
5.如果测试不成功,如何排错?
sh run
sh ip nat ?
6.如果是这样配置,意思是将源地址192.168.20.100这台服务器上的
所有服务都发布到了外网。为了确保案全,我们只需要将需要发布的服务发布就可了。
举例:只对外发布WEB服务器
R3(config)#ip nat inside source static tcp 192.168.20.100 80 13.1.1.1 80
R3(config)#interface f0/1
R3(config-if)#ip nat inside
R3(config)#int f0/0
R3(config-if)#ip nat outside
R3(config)#ip nat inside source static tcp 192.168.20.100 53 13.1.1.1 53
R3(config)#ip nat inside source static udp 192.168.20.100 53 13.1.1.1 53
动态NAT
1.配置地址池(公网地址池):
R1(config)#ip nat pool zlt 12.1.1.1 12.1.1.10 netmask 255.255.255.0
2.配置允许转换的私网地址(ACL):
R1(config)#access-list 10 permit 192.168.10.0 0.0.0.255
3.配置NAT转换(将List10 转换为poo zlt)
R1(config)#ip nat inside source list 10 pool zlt overload
4.配置inside和outside端口。
R1(config)#int f0/0
R1(config-if)#ip nat inside
R1(config)#int f0/1
R1(config-if)#ip nat outside
PAT
多个本地地址映射到同一个全局地址,用端口号区别不同的本地地址。如局域网中共享上网。
R1(config)#ip nat pool zlt 12.1.1.1 12.1.1.1 netmask 255.255.255.0
R1(config)#access-list 10 permit 192.168.10.0 0.0.0.255
R1(config)#ip nat inside source list 10 pool zlt overload
或
R1(config)#access-list 10 permit 192.168.10.0 0.0.0.255
R1(config)#ip nat inside source list 10 interface f0/1 overload
R1(config)#int f0/0
R1(config-if)#ip nat inside
R1(config)#int f0/1
R1(config-if)#ip nat outside