简介
本文档介绍如何排除NAT环境中的IP连接问题。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文档规则的详细信息,请参阅Cisco技术提示规则。
问题
本文档对下列问题进行故障排除:
- 可以Ping通一台路由器,但无法对另一台路由器执行Ping操作
- 外部网络设备不能与内部路由器通信
要确定NAT操作中是否存在问题,请执行以下操作:
-
根据配置,清楚地定义应该实现哪些NAT。您可以确定配置有问题。有关NAT配置的信息,请参阅配置网络地址转换:部分。
-
检验转换表中是否有正确转换。
-
使用show和debug命令验证转换是否发生。
-
详细检查数据包的运行情况,并检验路由器是否具有正确的路由信息来传送数据包。
-
可以Ping通一台路由器,但无法对另一台路由器执行Ping操作
在此网络图中,路由器4可以ping路由器5(172.16.6.5),但不能对路由器7(172.16.11.7)执行ping操作:
路由器4无法ping通路由器7
路由协议不运行路由器。路由器4的默认网关是路由器6。路由器6配置了NAT:
interface Ethernet0
ip address 172.16.6.6 255.255.255.0
ip directed-broadcast
ip nat outside
!
interface Ethernet1
ip address 10.10.10.6 255.255.255.0
ip nat inside
!
interface Serial2.7 point-to-point
ip address 172.16.11.6 255.255.255.0
ip nat outside
frame-relay interface-dlci 101
!
ip nat pool test 172.16.11.70 172.16.11.71 prefix-length 24
ip nat inside source list 7 pool test
ip nat inside source static 10.10.10.4 172.16.6.14
!
access-list 7 permit 10.10.50.4
access-list 7 permit 10.10.60.4
access-list 7 permit 10.10.70.4
要排除的故障:
1.您需要确定NAT是否正常工作。从配置中可以知道,路由器4的IP地址(10.10.10.4)被静态转换为172.16.6.14。您可以在路由器6上使用show ip nat translation命令验证转换表中是否存在转换:
router-6#show ip nat translation
Pro Inside global Inside local Outside local Outside global
--- 172.16.6.14 10.10.10.4 --- ---
2.确保在路由器4发出IP流量时进行此转换。您可以通过两种方式从路由器6执行此操作,使用show ip nat statistics命令运行NAT debug或监控NAT统计信息。由于debug命令是最后的手段,因此请从show命令开始。
3.监控计数器,确保它接收来自路由器4的流量时增加。每次使用转换表转换地址时,计数器都会增加。
4.清除统计信息,然后显示统计信息,然后尝试从路由器4 ping路由器7,然后再次显示统计信息。
router-6#clear ip nat statistics
router-6#
router-6# show ip nat statistics
Total active translations: 1 (1 static, 0 dynamic; 0 extended)
Outside interfaces:
Ethernet0, Serial2.7
Inside interfaces:
Ethernet1
Hits: 0 Misses: 0
Expired translations: 0
Dynamic mappings:
-- Inside Source
access-list 7 pool test refcount 0
pool test: netmask 255.255.255.0
start 172.16.11.70 end 172.16.11.71
type generic, total addresses 2, allocated 0 (0%), misses 0
router-6#
在路由器4上使用ping 172.16.11.7命令后,路由器6上的NAT统计信息如下:
router-6#show ip nat statistics
Total active translations: 1 (1 static, 0 dynamic; 0 extended)
Outside interfaces:
Ethernet0, Serial2.7
Inside interfaces:
Ethernet1
Hits: 5 Misses: 0
Expired translations: 0
Dynamic mappings:
-- Inside Source
access-list 7 pool test refcount 0
pool test: netmask 255.255.255.0
start 172.16.11.70 end 172.16.11.71
type generic, total addresses 2, allocated 0 (0%), misses 0
您可以从show命令中看到命中数增加5。从Cisco路由器成功执行ping操作后,命中数将增加10。转换源路由器(路由器4)发送的五个Internet控制消息协议(ICMP)应答,需要转换目的路由器(路由器7)发出的五个数据包应答,总命中10次。5次命中的丢失是因为回应应答未转换或未从路由器7发送。
看看您能否找到路由器7不向路由器4发送回应应答数据包的原因。您查看NAT对数据包的操作。路由器4发送源地址为10.10.10.4和目的地址为172.16.11.7的ICMP回应数据包。发生NAT后,路由器7收到的数据包的源地址为172.16.6.14,目的地址为172.16.11.7。路由器7需要回复172.16.6.14,并且由于172.16.6.14不直接连接到路由器7,因此它需要此网络的路由以便做出响应。让我们检查 Router 7 的路由表,以便检验是否存在该路由。
router-7#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 4 subnets
C 172.16.12.0 is directly connected, Serial0.8
C 172.16.9.0 is directly connected, Serial0.5
C 172.16.11.0 is directly connected, Serial0.6
C 172.16.5.0 is directly connected, Ethernet0
您可以看到Router 7的路由表中没有到达172.16.6.14的路由。添加此路由后,ping操作会起作用。使用show ip nat statistics命令监控NAT统计信息非常有用。在具有多个转换的更复杂的NAT环境中,此show命令不再有用。然后,您可以在路由器上运行debug。
在此问题中,路由器4可以ping路由器5和路由器7,但10.10.50.0网络上的设备无法与路由器5或路由器7通信。网络图为:
网络无法与路由器通信
interface Ethernet0
ip address 172.16.6.6 255.255.255.0
ip directed-broadcast
ip nat outside
media-type 10BaseT
!
interface Ethernet1
ip address 10.10.10.6 255.255.255.0
ip nat inside
media-type 10BaseT
!
interface Serial2.7 point-to-point
ip address 172.16.11.6 255.255.255.0
ip nat outside
frame-relay interface-dlci 101
!
ip nat pool test 172.16.11.70 172.16.11.71 prefix-length 24
ip nat inside source list 7 pool test
ip nat inside source static 10.10.10.4 172.16.6.14
!
access-list 7 permit 10.10.50.4
access-list 7 permit 10.10.60.4
access-list 7 permit 10.10.70.4
说明NAT的预期行为。通过路由器6的配置,您知道NAT应该将10.10.50.4动态转换为NAT池“测试”中的第一个可用地址。 地址池由地址172.16.11.70和172.16.11.71组成。通过此问题,您可以了解路由器5和路由器7接收的数据包的源地址为172.16.11.70或172.16.11.71。这些地址与路由器7位于同一子网中,因此路由器7必须具有直连路由,但如果路由器5还没有直连路由,则它需要通往子网的路由。
您可以使用 show ip route 命令查看路由器 5 的路由表是否列出 172.16.11.0:
router-5#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 4 subnets
C 172.16.9.0 is directly connected, Serial1
S 172.16.11.0 [1/0] via 172.16.6.6
C 172.16.6.0 is directly connected, Ethernet0
C 172.16.2.0 is directly connected, Serial0
您可以使用 show ip route 命令查看路由器 7 的路由表是否将 172.16.11.0 列为直接连接的子网:
router-6#show ip nat translation
Pro Inside global Inside local Outside local Outside global
--- 172.16.6.14 10.10.10.4 --- ---
--- 172.16.11.70 10.10.50.4 --- ---
检查NAT转换表并检验预期转换是否存在。由于所需转换是动态创建的,您必须首先发送来自相应地址的IP流量。从10.10.50.4发往172.16.11.7的ping发送后,路由器6中的转换表显示:
router-6#show ip nat translation
Pro Inside global Inside local Outside local Outside global
--- 172.16.6.14 10.10.10.4 --- ---
--- 172.16.11.70 10.10.50.4 --- ---
由于转换表中存在预期的转换,因此您知道ICMP回应数据包已正确转换。一个选项是您可以监控NAT统计信息,但这种方法在复杂的环境中用处不大。另一个选项是在 NAT 路由器(路由器 6)上运行 NAT 调试。 您可以在路由器6上运行debug ip nat,同时发送从10.10.50.4发往172.16.11.7的ping。debug结果在下一个代码示例中显示。
注意:在对路由器执行 debug 命令时,可能会使路由器过载,从而导致路由器无法运行。务必非常小心,如果可能,不要在没有Cisco技术支持工程师监督的情况下在关键生产路由器上运行debug。
:
router-6# show log
Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns)
Console logging: level debugging, 39 messages logged
Monitor logging: level debugging, 0 messages logged
Buffer logging: level debugging, 39 messages logged
Trap logging: level informational, 33 message lines logged
Log Buffer (4096 bytes):
05:32:23: NAT: s=10.10.50.4->172.16.11.70, d=172.16.11.7 [70]
05:32:23: NAT*: s=172.16.11.7, d=172.16.11.70->10.10.50.4 [70]
05:32:25: NAT*: s=10.10.50.4->172.16.11.70, d=172.16.11.7 [71]
05:32:25: NAT*: s=172.16.11.7, d=172.16.11.70->10.10.50.4 [71]
05:32:27: NAT*: s=10.10.50.4->172.16.11.70, d=172.16.11.7 [72]
05:32:27: NAT*: s=172.16.11.7, d=172.16.11.70->10.10.50.4 [72]
05:32:29: NAT*: s=10.10.50.4->172.16.11.70, d=172.16.11.7 [73]
05:32:29: NAT*: s=172.16.11.7, d=172.16.11.70->10.10.50.4 [73]
05:32:31: NAT*: s=10.10.50.4->172.16.11.70, d=172.16.11.7 [74]
05:32:31: NAT*: s=172.16.11.7, d=172.16.11.70->10.10.50.4 [74]
从前面的debug输出中您可以看到,第一行显示源地址10.10.50.4已转换为172.16.11.70。第二行显示目标地址172.16.11.70已转换回10.10.50.4。此模式在debug的其余部分重复出现。这意味着路由器6在两个方向上转换数据包。
审核:
1.路由器4发送一个从10.10.50.4发往172.16.11.7的数据包。
2.路由器6对数据包执行NAT,并转发源地址为172.16.11.70、目的地址为172.16.11.7的数据包。
3.路由器7发送源地址为172.16.11.7且目的地址为172.16.11.70的响应。
4.路由器6对数据包执行NAT,结果得到源地址为172.16.11.7、目的地址为10.10.50.4的数据包。
5.路由器6根据路由器6路由表中的信息将数据包路由到10.10.50.4。您需要使用 show ip route 命令来确认路由器 6 在路由表中有必需的路由。
router-6#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 5 subnets
C 172.16.8.0 is directly connected, Serial1
C 172.16.10.0 is directly connected, Serial2.8
C 172.16.11.0 is directly connected, Serial2.7
C 172.16.6.0 is directly connected, Ethernet0
C 172.16.7.0 is directly connected, Serial0
10.0.0.0/24 is subnetted, 1 subnets
C 10.10.10.0 is directly connected, Ethernet1
常见问题核对表
使用此核对表排除常见问题:
如果您发现转换表中未安装适当的转换,请验证:
- 配置是否正确。有时很难通过NAT获得您想要的东西。有关配置帮助,请参阅配置网络地址转换:部分。
- 没有任何入站访问列表拒绝从NAT路由器输入数据包。
- 如果数据包从内部传输到外部,则NAT路由器在路由表中具有相应的路由。有关详细信息,请参阅 NAT 运行顺序。
- NAT 命令引用的访问列表支持所有必需的网络。
- NAT 池有足够的地址。这只有在未将NAT配置为拥塞时才会出现问题。
- 路由器接口正确地定义为 NAT 内部接口或 NAT 外部接口。
- 要转换域名系统(DNS)数据包的负载,请确保对数据包的IP报头中的地址进行转换。如果未进行转换,NAT 则不会查看该包的有效载荷。
如果转换表中安装了正确的转换条目,但未使用,请检查:
- 验证没有拒绝来自NAT路由器的数据包条目的任何入站访问列表。
- 对于从内部到外部的数据包,在转换之前检查是否有到目标的路由。有关详细信息,请参阅 NAT 运行顺序。
排除连接故障:
- 检验第 2 层连接。
- 检验第 3 层路由信息。
- 搜索导致问题的数据包过滤器。
这意味着端口80的NAT转换不起作用,但其他端口的转换正常工作。
要解决此问题:
- 运行debug ip nat translations和debug ip packet命令,以查看转换是否正确以及转换表中是否安装了正确的转换条目。
- 验证服务器是否响应。
- 禁用 HTTP 服务器。
- 清除 NAT 和 ARP 表。
执行与NAT相关的show命令或show running-config或write memory命令时,将显示try later错误消息。这是由NAT表大小增加引起的。当 NAT 表大小增加时,路由器的内存将会用光。
- 请重新加载路由器以解决此问题。
- 如果配置 HSRP SNAT 时出现此错误消息,请配置以下命令以解决该问题:
- Router(config)#standby delay minimum 20 reload 20
- Router(config)#standby 2 preempt delay minimum 20 reload 20 sync 10
主机可以发送数百个转换,这会导致CPU使用率较高。换句话说,它可能会使表变得很大,以至于 CPU 达到 100% 使用率。ip nat translation max-entries 300命令在路由器上创建每主机300个转换数量限制或转换数量的聚合限制。解决方法是使用 ip nat translation max-entries all-hosts 300 命令。
- % 已经映射公共 IP 地址(内部 IP 地址 -> 公共 IP 地址)
当您尝试将两个内部IP地址配置到侦听同一端口的一个公有IP地址时,会显示此消息。
% X.X.X.X already mapped (172.30.62.101 -> X.X.X.X)
为了更正此问题,请将公有IP地址配置为具有两个内部IP地址,并在DNS中使用两个公有IP地址。
这是 no-alias
选项。此 no-alias
选项表示路由器不响应地址且不安装ARP条目。如果另一个路由器将 NAT 池用作内部全局池且该池由路由器连接的子网中的地址组成,则会为该地址生成一个别名,从而使路由器可应答针对这些地址的地址解析协议 (ARP) 请求。这会使路由器为虚假地址创建 ARP 条目。
- 错误的令牌0,需要TOK_NUMBER|TOK_PUNCT
此错误消息只是参考性消息,对设备的正常行为没有任何影响。
Bad token 0, wanted TOK_NUMBER|TOK_PUNCT
此错误意味着NAT尝试对FTP打开中的地址进行第4层修复,但找不到它在数据包中转换所需的IP地址。消息包含令牌的原因在于通过在IP数据包中搜索令牌或一组符号来查找数据包中的IP地址,从而查找转换所需的详细信息。
当启动 FTP 会话时,它将协商命令信道和数据信道这两条信道。它们是具有不同端口号的两个 IP 地址。FTP客户端和服务器协商第二个数据通道以传输文件。通过控制信道交换的数据包的格式为“PORT,i,i,i,i,p,p”,其中i,i,i,i是IP地址的四个字节,p,p指定端口。NAT尝试匹配此模式,并在必要时转换地址/端口。NAT必须转换两个通道方案。NAT 会扫描命令流中的数字,直到认为找到需要转换的端口命令。然后解析转换,以相同格式计算。
如果数据包损坏或FTP服务器或客户端的命令格式不正确,NAT将无法正确计算转换并生成该错误。可以将FTP客户端设置为“被动”,使其启动两个通道。
相关信息