NAT包括四种类型的地址:
静态NAT使用本地和全局地址的一对一映射。这些映射由网络管理员配置,并且保持不变。
多对少
多个地址映射到一个或几个地址
NAT | PAT |
---|---|
内部本地地址和内部全局地址之间的一对一映射。 | 一个内部全局地址可以映射到许多内部本地地址。 |
在转换过程中仅使用IPv4地址。 | 在转换过程中使用IPv4地址和TCP或UDP源端口号。 |
每个内部主机访问外部网络都需要一个唯一的内部全局地址。 | 一个唯一的内部全局地址可以由许多访问外部网络的内部主机共享。 |
使用NAT的一个缺点与网络性能有关,尤其是对于VoIP等实时协议。NAT增加了转发延迟,因为数据包头中每个IPv4地址的转换需要时间。第一个数据包始终通过较慢的路径进行过程交换。路由器必须查看每个数据包以决定是否需要转换。路由器必须更改IPv4标头,并可能更改TCP或UDP标头。每次进行转换时,都必须重新计算IPv4标头校验和以及TCP或UDP校验和。如果存在缓存条目,则其余的数据包将通过快速交换路径;否则,它们也会被延迟。
使用NAT的另一个缺点是丢失了端到端寻址。这就是所谓的端到端原理。许多Internet协议和应用程序都依赖于从源到目的地的端到端寻址。某些应用程序不适用于NAT。例如,某些安全应用程序(例如数字签名)会失败,因为源IPv4地址在到达目的地之前就已更改。使用物理地址而不是合格域名的应用程序不会到达在NAT路由器上转换的目标。有时,可以通过实现静态NAT映射来避免此问题。
端到端IPv4可追溯性也丢失了。跟踪在多个NAT跃点上经历了无数个数据包地址变化的数据包变得更加困难,这使故障排除具有挑战性。
使用NAT还会使隧道协议(例如IPsec)的使用复杂化,因为NAT会修改标头中的值,从而导致完整性检查失败。
需要从外部网络启动TCP连接或无状态协议(例如使用UDP的协议)的服务可能会中断。除非已将NAT路由器配置为支持此类协议,否则传入数据包将无法到达其目的地。某些协议可以容纳参与主机之间的NAT的一个实例(例如,被动模式FTP),但是当两个系统都通过NAT与Internet隔离时,它们将失败。
第一步: 第一个任务是在内部本地地址和内部全局地址之间创建映射。例如,图中的本地地址内部192.168.10.254和全局地址内部209.165.201.5被配置为静态NAT转换。
R2(config)# ip nat inside source static 192.168.10.254 209.165.201.5
第二步: 配置映射后,将参与转换的接口配置为相对于NAT内部还是外部。在此示例中,R2串行0/1/0接口是内部接口,而串行0/1/1是外部接口。
R2(config)# interface serial 0/1/0
R2(config-if)# ip address 192.168.1.2 255.255.255.252
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface serial 0/1/1
R2(config-if)# ip address 209.165.200.1 255.255.255.252
R2(config-if)# ip nat outside
show ip nat translations,此命令显示活动的NAT转换。
show ip nat statistics,它显示有关活动转换总数,NAT配置参数,池中地址数量和已分配地址数量的信息。
clear ip nat statistics命令清除所有过去转换的统计信息
第一步
使用ip nat pool命令定义将用于转换的地址池。该地址池通常是一组公共地址。通过指示池的起始IPv4地址和终止IPv4地址来定义地址。的网络掩码或前缀长度的关键字指示哪个地址位属于网络和哪些位属于主机该范围内的地址。
在这种情况下,在池名称NAT-POOL1下定义一个公共IPv4地址池。
R2(config)# ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask 255.255.255.224
第二部
配置标准ACL以仅识别(允许)将要转换的地址。过于宽容的ACL可能导致无法预测的结果。请记住,每个ACL的末尾都有一个隐含的deny all语句。
在方案中,定义哪些地址可以翻译。
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
第三步
使用以下命令语法将ACL绑定到池:
源列表内的 Router(config)#ip nat { 访问列表号 | 访问列表名称 } 池 池名
路由器使用此配置来标识哪些设备(列表)接收哪些地址(池)。在这种情况下,将NAT-POOL1与ACL 1绑定。
R2(config-if)# ip nat inside source list 1 pool NAT-POOL1
第四步
确定与NAT相关的内部接口;这将是连接到内部网络的任何接口。
在这种情况下,将s0/1/0标识为内部NAT接口。
R2(config)# interface serial 0/1/0
R2(config-if)# ip nat inside
第五步
确定与NAT相关的外部接口;这将是连接到外部网络的任何接口。
在这种情况下,将串行接口0/1/1标识为外部NAT接口。
R2(config)# interface serial 0/1/1
R2(config-if)# ip nat outside
show ip nat translations命令的输出显示所有已配置的静态翻译和通过流量创建的任何动态翻译。
R2# show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 209.165.200.228 192.168.10.10 --- ---
--- 209.165.200.229 192.168.11.10 --- ---
R2#
R2(config)# ip nat inside source list 1 interface serial 0/1/0 overload
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
R2(config)# interface serial0/1/0
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface Serial0/1/1
R2(config-if)# ip nat outside
配置PAT以使用地址池
R2(config)# ip nat pool NAT-POOL2 209.165.200.226 209.165.200.240 netmask 255.255.255.224
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
R2(config)# ip nat inside source list 1 pool NAT-POOL2 overload
R2(config)# interface serial0/1/0
R2(config-if)# ip nat inside
R2(config)# interface serial0/1/0
R2(config-if)# ip nat outside