目录

简介

先决条件

要求

使用的组件

网络图

规则

示例 情景

相关信息

简介

本文档描述了当使用动态网络地址转换(NAT)时，数据包在NAT路由器和外部接口上的相邻路由器之间循环的场景，原因是NAT池中发往未使用IP地址的流量以及NAT路由器上存在将这些数据包路由回外部的默认路由。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您是在真实网络上操作，请确保您在使用任何命令前已经了解其潜在影响。

网络图

以下拓扑用于创建示例场景。

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

示例 情景

在上述拓扑中，路由器A配置了NAT，以便将来自网络171.68.200.0/24的数据包转换为由NAT池“test-loop”定义的地址范围。 路由器A的配置如下（所有其它路由器都配置了静态路由以便连接）：

hostname Router-A

!

!

ip nat pool test-loop 172.16.47.161 172.16.47.165 prefix-length 28

ip nat inside source list 7 pool test-loop

!

interface Loopback0

ip address 1.1.1.1 255.0.0.0

!

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 171.68.200.0 0.0.0.255

!

!

line con 0

exec-timeout 0 0

line aux 0

line vty 0 4

login

!

end

使用NAT转换调试和IP数据包调试命令，我们从内部设备上的路由器生成了ping命令。ping操作成功，并生成了转换表条目。在以下输出中，我们看到IP数据包调试和IP NAT调试已打开，此时转换表中没有条目。

注意：调试命令会生成大量输出。只有 IP 网络上的流量较低时才能使用此类命令，以避免系统上的其他活动受到负面影响。

Router-A# show debug

Generic IP:

IP packet debugging is on (detailed)

IP NAT debugging is on

Router-A# show ip nat translations

Router-A#

内部路由器（内部设备）发起源地址为171.68.200.48、目的地址为171.68.191.1（外部设备的地址）的ICMP数据包。 以下debug输出显示源IP地址为171.68.200.48的IP数据包被转换为172.16.47.161。该数据包进入Serial0接口，发往Serial1接口。

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [401]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

以下debug输出显示返回的IP数据包，其目的IP地址为172.16.47.161，被转换回171.68.200.48。该数据包进入Serial1接口，并从serial0接口发往。

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [401]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

debug输出显示内部设备与外部设备之间的ping交换成功：

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [402]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [402]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [403]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [403]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [404]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [404]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [405]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [405]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

使用show ip nat translations命令，我们会在内部设备的转换表中看到一个条目。

Router-A# show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

--- 172.16.47.161      171.68.200.48      ---                ---

现在，转换表中存在内部设备的转换，我们可以成功从外部设备ping到内部设备的全局地址，如下面的Router-A生成的调试输出所示。

注意：外部设备发起的数据包的源地址为171.68.191.1，目的地址为172.16.47.161（转换表中的内部全局地址）。

Router-A#

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [108]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [108]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [109]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [109]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [110]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [110]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [111]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [111]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [112]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [112]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

以下调试输出演示当外部设备尝试与测试环路池中未使用的IP地址的目标地址发起通信时会发生什么情况。clear ip nat translation命令用于清除转换表，并且向测试环路池中未使用的IP地址发送了ping命令。

外部设备发送发往内部全局地址172.16.47.161的ICMP数据包。但是，输出接口与此数据包的输入接口相同。

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT在路由数据包之前转换从外部到内部的数据包。在这种情况下，转换表中没有条目，因此路由器A只能路由数据包。路由器A依靠其默认路由来路由数据包，将数据包从Serial1接口发回，这会导致环路，最终可能导致串行线路关闭。

为避免此类路由环路，切勿从外部设备向内部全局地址发送数据包。但是，由于这很难实施，因此您可以在路由器A中为内部全局地址添加下一跳为null0的静态路由。这样，当外部设备发送发往内部全局地址的数据包，并且转换表中没有条目时，路由器A将数据包路由到null0，从而避免环路。使用上例，静态路由如下所示：

ip route 172.16.47.160 255.255.255.252 null0.

相关信息

- NAT 支持页

- IP 路由协议支持页

- IP 路由 支持页

- 技术支持 - Cisco Systems