简介
本文档介绍使用ip nat outside source static 命令和NAT进程生成的IP数据包的配置。
先决条件
要求
Cisco 建议您了解以下主题:
使用的组件
本文档中的信息基于运行Cisco IOS®软件版本的Cisco路由器。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
本文档提供了使用 ip nat outside source static 命令的配置示例,并简要介绍了 NAT 过程中 IP 数据包所发生的情况。以本文档中的网络拓扑为例。
配置
网络图
本文档使用此网络设置。
网络图
当您从路由器R1的Loopback1接口向路由器R2的Loopback0接口发出ping命令时,会发生以下情况:
- 在NAT路由器的外部接口(Gi0/0)上,ping数据包的源地址(SA)为172.16.89.32,目的地址(DA)为172.31.1.1。
- NAT将SA转换为外部本地地址172.31.16.5(对应于在NAT路由器上配置的ip nat outside source static命令)。
- 然后,NAT路由器检查其路由表,查找通往172.31.1.1的路由。
- 如果路由不存在,则NAT路由器会丢弃数据包。但是,在本例中,NAT路由器有一个到172.31.1.1的路由,该路由是通过已配置的指向子网172.31.1.0/24的静态路由得到的。它将数据包转发给目标。
- 路由器R2在其传入接口(Gi0/0)上收到数据包,此时的SA为172.31.16.5,DA为172.31.1.1。
- 作为响应,R2向172.31.16.5(NATted地址)发送互联网控制消息协议(ICMP)回应应答。
- 如果R2没有路由,则会丢弃数据包。但是,在本例中,它有一个指向NAT路由器的默认路由。
- 因此,它会向NAT路由器发送一个应答数据包,其中的SA为172.31.1.1,DA为172.31.16.5。
- NAT路由器会看到该数据包,并检查通往172.31.16.5地址的路由。
- 如果该路由器没有这样一个路由,就会发送一个 ICMP 不可达的应答作为响应。
- 在本例中,它有一个配置到172.31.16.0/24子网的静态路由,指向R1。
- 它将数据包转换回172.16.89.32地址并将其从外部接口(Gi0/0)转发出去。
配置
本文档使用以下配置:
路由器 R1 |
hostname R1
!
!--- Output suppressed.
!
interface Loopback1
ip address 172.16.89.32 255.255.255.0
!
interface GigabitEthernet0/0
ip address 172.16.191.254 255.255.255.252
duplex auto
speed auto
!
interface GigabitEthernet0/1
no ip address
shutdown
! !--- Output suppressed.
ip route 0.0.0.0 0.0.0.0 172.16.191.253
!--- Default route to forward packets to NAT-Router. !--- Output suppressed. |
路由器NAT-路由器 |
hostname NAT-Router
!
!--- Output suppressed.
!
interface GigabitEthernet0/0
ip address 172.16.191.253 255.255.255.252
ip nat outside
ip virtual-reassembly in
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 172.31.192.202 255.255.255.0
ip nat inside
ip virtual-reassembly in
duplex auto
speed auto
!
!--- ip nat command defines GigabitEthernet0/1 as a NAT inside interface and GigabitEthernet0/0 as a NAT outside interface.
!--- Output suppressed.
!
no ip http server
no ip http secure-server
ip nat outside source static 172.16.89.32 172.31.16.5
ip route 172.31.1.0 255.255.255.0 172.31.192.201
ip route 172.31.16.0 255.255.255.0 172.16.191.254
!
!--- Outside local address is defined as 172.31.16.5.
!--- Static routes for reaching the loopback interfaces on R2 and subnet 172.31.16.0 towards R1. |
注意:请注意,在此特定场景中,不需要指向R1上的Loopback1的静态路由。这是因为,当ICMP应答进入NAT路由器时,会首先检查路由表以查找目标,然后执行地址转换。
路由器 R2 |
hostname R2
!
!--- Output suppressed.
!
interface Loopback0
ip address 172.31.1.1 255.255.255.0
!
interface GigabitEthernet0/0
ip address 172.31.192.201 255.255.255.0
duplex auto
speed auto
!
!--- Output suppressed.
ip route 0.0.0.0 0.0.0.0 172.31.192.202
!--- Default route to forward packets to NAT-Router. !--- Output suppressed. |
确认
如以下输出所示,使用show ip nat translations命令可以检查转换项:
NAT-Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 172.31.16.5 172.16.89.32
icmp 172.31.1.1:21 172.31.1.1:21 172.31.16.5:21 172.16.89.32:21
NAT-Router#
故障排除
本示例使用NAT转换调试和IP数据包调试来演示NAT过程。
注意:由于debug命令会生成大量输出,因此请仅在IP网络上的流量较低时才使用这些命令,以免系统中的其他活动受到负面影响。
注意:这些debug输出来自运行Cisco IOS软件的路由器。这些调试输出的集合可能因使用的平台而异。
注意:在使用 debug 命令之前,请参阅有关 Debug 命令的重要信息。
此输出是在从R1 loopback1接口地址(172.16.89.32)到R2 loopback0接口地址(172.31.1.1)进行ping的同时,在NAT路由器上同时使用debug ip packet和debug ip nat命令的结果。
此输出显示到达NAT路由器外部接口的第一个数据包。源地址 172.16.89.32 被转换为 172.31.16.5。ICMP数据包从GigabitEthernet0/1接口转发到目的地。
*Sep 19 15:34:39.925: NAT: s=172.16.89.32->172.31.16.5, d=172.31.1.1 [100]
*Sep 19 15:34:39.925: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, NAT Inside(8), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Sep 19 15:34:39.926: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, Common Flow Table(29), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Sep 19 15:34:39.926: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, Stateful Inspection(30), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Sep 19 15:34:39.927: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, NAT ALG proxy(63), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Sep 19 15:34:39.927: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), g=172.31.192.201, len 100, forward
*Sep 19 15:34:39.928: IP: s=172.31.16.5 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, sending full packet
以下输出显示了来自 172.31.1.1,目标地址为 172.31.16.5(已转换为 172.16.89.32)的返回数据包。生成的ICMP数据包从GigabitEthernet0/0接口(NAT路由器)转发出去。
*Sep 19 15:34:39.930: NAT*: i: icmp (172.31.1.1, 20) -> (172.31.16.5, 20) [100]
*Sep 19 15:34:39.930: NAT*: s=172.31.1.1, d=172.31.16.5->172.16.89.32 [100]
ICMP 数据包的交换继续进行。此 debug 输出的 NAT 过程与上一个输出的 NAT 过程相同。
*Sep 19 15:34:39.932: NAT*: o: icmp (172.16.89.32, 20) -> (172.31.1.1, 20) [101]
*Sep 19 15:34:39.932: NAT*: s=172.16.89.32->172.31.16.5, d=172.31.1.1 [101]
*Sep 19 15:34:39.933: NAT*: i: icmp (172.31.1.1, 20) -> (172.31.16.5, 20) [101]
*Sep 19 15:34:39.933: NAT*: s=172.31.1.1, d=172.31.16.5->172.16.89.32 [101]
*Sep 19 15:34:39.935: NAT*: o: icmp (172.16.89.32, 20) -> (172.31.1.1, 20) [102]
*Sep 19 15:34:39.935: NAT*: s=172.16.89.32->172.31.16.5, d=172.31.1.1 [102]
*Sep 19 15:34:39.936: NAT*: i: icmp (172.31.1.1, 20) -> (172.31.16.5, 20) [102]
*Sep 19 15:34:39.936: NAT*: s=172.31.1.1, d=172.31.16.5->172.16.89.32 [102]
*Sep 19 15:34:39.938: NAT*: o: icmp (172.16.89.32, 20) -> (172.31.1.1, 20) [103]
*Sep 19 15:34:39.938: NAT*: s=172.16.89.32->172.31.16.5, d=172.31.1.1 [103]
*Sep 19 15:34:39.939: NAT*: i: icmp (172.31.1.1, 20) -> (172.31.16.5, 20) [103]
*Sep 19 15:34:39.939: NAT*: s=172.31.1.1, d=172.31.16.5->172.16.89.32 [103]
*Sep 19 15:34:39.940: NAT*: o: icmp (172.16.89.32, 20) -> (172.31.1.1, 20) [104]
*Sep 19 15:34:39.940: NAT*: s=172.16.89.32->172.31.16.5, d=172.31.1.1 [104]
*Sep 19 15:34:39.942: NAT*: i: icmp (172.31.1.1, 20) -> (172.31.16.5, 20) [104]
*Sep 19 15:34:39.942: NAT*: s=172.31.1.1, d=172.31.16.5->172.16.89.32 [104]
摘要
当数据包从外部传输到内部时,首先进行转换,然后检查目标的路由表。
当信息包从里向外传输时,路由表首先检查目的地,然后进行转换。
有关详细信息,请参阅 NAT 运行顺序。
请注意IP数据包中用于上述每个命令时需要转换的部分。此表包含指南:
这些指导原则表明,转换数据包的方法不只一种。根据您的特定需求,确定如何定义NAT接口(内部或外部),以及在转换前后路由表包含哪些路由。请记住,数据包被转换的部分取决于数据包传输的方向,以及您配置 NAT 的方式。
相关信息