图1-1 路由故障排除综合实验组网
本实验中用到了五台路由器,划分为两个自治系统。其中路由器A、B、C位于AS100,自治系统内C的S1接口与B的S1接口相连,B的S0接口与A的S0接口相连,A和C之间没有直接的物理连接;路由器D、E位于AS200,D的S1接口与E的S0口相连。在自治系统之间C的S0口与D的S0口直接相连。在以上各链路中,除了AS100内A和B之间的链路层封装为帧中继之外,其余均为PPP。在自治系统AS100中运行的IGP为OSPF,划分为三个区域0,1,2,区域0和区域2没有直接相连,需要用到虚连接;注意其中路由器A、B上的以太网段194.186.23.0/25和194.186.23.128/25上不允许运行OSPF协议;在AS100中路由器A、B、C上也运行BGP协议。在AS200中IGP为RIP,只有路由器D上运行BGP协议。最后一点要求是在本网络中不允许把IGP引入到BGP当中
以上是本实验的网络概况与要求,具体的IP地址如上图所示。
本实验的最终目的是让学员成功排除教师在网络中设置的全部故障点,调试达到全网互通。对于全网互通,我们可以用以下的方法进行检测:从路由器A和B上的用户网段194.186.23.0/25、10.1.2.1/24、10.1.1.1/24、194.186.23.128/25分别ping路由器E上的用户网段20.1.1.1/24、30.1.1.1/18、40.1.1.1/22,看是否能够ping通。
作为教师,在实验前的第一项重要准备工作应该是准备好实验环境,根据组网需求描述中的要求配置全网互通,并进行验证。下面列出全网互通时五台路由器上的全部配置信息以供参考:
[A]display current-configuration Now create configuration... Current configuration !
version 1.74 router id 1.1.1.1 firewall enable sysname A !
interface Aux0 async mode flow link-protocol ppp !
interface Ethernet0 loopback
ip address 194.186.23.1 255.255.255.128 !
interface Serial0 link-protocol ppp
ip address 200.1.1.2 255.255.255.0 ospf enable area 0.0.0.1 !
interface Serial1 link-protocol ppp !
interface LoopBack1
ip address 10.1.1.1 255.255.255.0 ospf enable area 0.0.0.2
!
interface LoopBack2
ip address 10.1.2.1 255.255.255.0 ospf enable area 0.0.0.2 ! quit ospf enable
vlink peer-id 2.2.2.2 transit-area 0.0.0.1 ! quit ! bgp 100
undo synchronization
network 194.186.23.0 mask 255.255.255.128 peer 150.1.1.1 as-number 100 peer 200.1.1.1 as-number 100 ! quit ! return
[B]display current-configuration Now create configuration... Current configuration !
version 1.74 router id 2.2.2.2 firewall enable sysname B !
interface Aux0 async mode flow link-protocol ppp !
interface Ethernet0 loopback
ip address 194.186.23.129 255.255.255.128
!
interface Serial0 clock DTECLK1 link-protocol ppp
ip address 200.1.1.1 255.255.255.0 ospf enable area 0.0.0.1 !
interface Serial1 clock DTECLK1 link-protocol fr
ip address 150.1.1.2 255.255.255.0 ospf enable area 0.0.0.0 ospf peer 150.1.1.1 ospf network-type nbma ! quit ospf enable
vlink peer-id 1.1.1.1 transit-area 0.0.0.1 ! quit ! bgp 100
undo synchronization
network 194.186.23.128 mask 255.255.255.128 peer 150.1.1.1 as-number 100 peer 200.1.1.2 as-number 100 ! quit ! return
[C]display current-configuration Now create configuration... Current configuration !
version 1.74 router id 3.3.3.3
info-center console firewall enable sysname C fr switching !
interface Aux0 async mode flow link-protocol ppp !
interface Ethernet0 !
interface Serial0 link-protocol ppp
ip address 202.1.1.1 255.255.255.0 !
interface Serial1 link-protocol fr
ip address 150.1.1.1 255.255.255.0 ospf enable area 0.0.0.0 ospf peer 150.1.1.2 ospf network-type nbma fr interface-type DCE fr dlci 100 quit ! quit ospf enable ! quit ! bgp 100
undo synchronization
aggregate 194.186.23.0 255.255.255.0 import-route ospf import-route direct
peer 202.1.1.2 as-number 200
peer 150.1.1.2 as-number 100 peer 150.1.1.2 next-hop-local peer 200.1.1.2 as-number 100 peer 200.1.1.2 next-hop-local quit ! return
[D]display current-configuration Now create configuration... Current configuration !
version 1.74 firewall enable sysname D !
interface Aux0 async mode flow link-protocol ppp !
interface Ethernet0 !
interface Serial0 clock DTECLK1 link-protocol ppp
ip address 202.1.1.2 255.255.255.0 !
interface Serial1 link-protocol ppp
ip address 192.168.1.1 255.255.255.0 rip version 2 multicast ! quit rip
network 192.168.1.0 !
quit ! bgp 200
import-route direct import-route rip
peer 202.1.1.1 as-number 100 ! quit ! return
[E]display current-configuration Now create configuration... Current configuration !
version 1.44 firewall enable sysname E !
interface Ethernet0 !
interface Serial0 clock DTECLK1 link-protocol ppp
ip address 192.168.1.2 255.255.255.0 rip version 2 multicast !
interface Serial1 link-protocol ppp !
interface LoopBack1
ip address 20.1.1.1 255.255.255.0 !
interface LoopBack2
ip address 30.1.1.1 255.255.192.0 !
interface LoopBack3
ip address 40.1.1.1 255.255.252.0 ! quit rip
network all ! quit ! quit
ip route-static 0.0.0.0 0.0.0.0 Serial 0 preference 60 ! return
完成上述配置之后,可以用组网需求描述中介绍的方法来验证一下是否达到了全网互通。 1.2.2 设置故障点
在完成全网互通的配置之后,接下来的准备工作是在网络中进行故障点的设置。可以在网络中设置如下几类故障:
(1) RIPv1网络与RIPv2问题:在路由器E的s0口上配置rip version 1,即改为以RIPv1的broadcast方式发送报文,而在路由器D上我们配置的是rip version 2 multicast命令,即以RIPv2的multicast方式发送报文。这样两台运行RIP的路由器之间由于版本和报文发送方式的不同,显然是无法进行通信的,所以也不会收到任何的RIP路由更新报文。
(2) 网络类型不一致导致OSPF不能正确学到路由:在路由器C的S1口上修改OSPF网络类型为P2MP(ospf network-type p2mp),由于链路两端OSPF网络类型配置不一致,因此导致路由计算错误,无法得到OSPF路由。 注意:
在这里我们可以根据情况多设一个故障点,使问题更加复杂化。因为C和B之间为帧中继网络,我们知道帧中继网络不支持广播发送Hello报文,因此在帧中继网络中运行OSPF时必须手工配置邻居peer,这也正是大家在实际操作中容易忽略的地方。因此在这里我们可以多设置一个没有手工配置邻居的故障。
(3) OSPF ROUTER ID问题导致虚连接不能正常建立:在路由器B和A之间存在一条虚连接,我们知道如果我们在配置虚连接时所指定的ROUTER ID和路由器的实际ROUTER ID不一致,该虚连接是不会被成功建立的。这个故障点我们可以设计的比较隐秘,比如说当我们在路由器上已经启用OSPF协议之后才手工配置ROUTER ID,这时路由器已经从接口IP地址之中选除了ROUTER ID,因此手工配置的ROUTER ID不会立即生效,除非路由器重新启动。这样的故障如果只看配置上是看不出问题的。在设置这个故障时我们可以先删去原先配置的ROUTER ID,然后重起路由器,接着再重新配置一遍ROUTER ID。
(4) 直连EBGP邻居发布下一跳非直接可达路由时路由:在路由器C上删除强制下一跳命令(undo peer 150.1.1.2 next-hop-local;undo peer 200.1.1.2 next-hop-local),这样由于BGP speaker对于从EBGP邻居学来的路由,在发送给其IBGP邻居(即在AS内传播)的时候,next-hop是不变的,会造成路由器A、B上到AS200的路由下一跳不可达。这时虽然在路由表中可以看到路由,但实际上是ping不通的。
(5) BGP发布聚合路由产生的路由环路问题:这个问题在教材上已经有比较详细的描述。在这里我们只要去掉路由器B和A之间的IBGP连接,这个问题就会出现,由于在B的路由表中只有从C学到的194.186.23.0/24的聚合路由,届时将会出现奇妙的单通现象,即从A可以ping到B上的194.186.23.128/25网段,而从B上无法ping通A上的194.186.23.0/25网段。 注意:
在上面的参考配置信息中,我们已经用粗体加下划线的方式标示出了相应的故障点,以供参考。
1.3 故障现象描述
在正式进行故障排除实验之前,教师必须先向学员明确网络的需求概况,即正常的网络应该是个什么样子,接下来还应该正确的描述出目前的故障现象。
由于在设置故障点之后,各故障点之间可能会有所影响,最终网络的大体故障现象如下: 从路由器A和B上的用户网段194.186.23.0/25、10.1.2.1/24、10.1.1.1/24、194.186.23.128/25无法访问路由器E上的用户网段20.1.1.1/24、30.1.1.1/18、40.1.1.1/22;路由器A和B上的用户网段也无法互相访问。 1.4 故障相关信息收集
在完整准确的描述了网络的故障现象,并让学员确认之后。教师应该引导学员利用各种方法收集信息,定位故障。
在本实验中,首先应该确认各设备之间的物理连接是否正确;如果物理连接没有问题,接下来应该检查各链路的接口上物理层和链路层是否已经UP,以及链路是否通畅。
在上面的故障信息收集中,我们需要用到“display interface”命令来检查相应的接口状态。
在排除了物理层和链路层故障的可能之后,教师应该引导学员进入本实验的重点,即路由排错部分。在这里我们会经常用查看路由表的“display ip routing-table”命令和与路由协议如OSPF、RIP、BGP相关的一些display命令。对此我们在下面的原因分析及故障排除参考流程中会给大家进行较为详细的介绍。
1.5 原因分析及故障排除参考流程
故障排错是一个渐进的过程,在本实验中,设置故障点较多,但实际上先解决哪一个问题和先从网络中的哪一点开始故障排除,并没有一定的成规。下面我们要介绍的,只是对该网络
进行故障排除的一个参考思路和流程,当学员在故障排除中遇到问题时,教师应该引导学员回到正确的思路上来。
首先,我们可以先来看一看路由器A和B之间各用户网段无法互相访问的问题。在路由器B上,我们发现无法ping通路由器A上的用户网段10.1.2.1/24、10.1.1.1/24,用“display ip routing-table”命令可以看到如下结果: [B]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.2 Serial1 150.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0 194.186.23.0/24 BGP 170 0 150.1.1.1 Serial1 194.186.23.128/25 Direct 0 0 194.186.23.129 Ethernet0 194.186.23.129/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.0/24 Direct 0 0 200.1.1.2 Serial0 200.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.2/32 Direct 0 0 200.1.1.2 Serial0
在上面的路由表中,我们发现没有到10.1.2.1/24、10.1.1.1/24的OSPF路由,这说明OSPF协议存在问题。由于10.1.2.1/24、10.1.1.1/24网段属于区域2且不和骨干区域0直接相连,所以在AB之间配置了虚连接。接下来检查OSPF虚连接的状态: [B]display ospf vlink Virtual Interfaces: vlink peer-id 1.1.1.1 Interface: 200.1.1.1 (Serial0)
Cost: 1562 State: Down Type: Virtual Transit Area: 0.0.0.1 Configure as demand circuit Run as demand circuit DoNotAge lsa allowed Authentication: none
Timers: Hello: 10 Poll: 0 Dead: 40 Retrans: 5 Transmit Delay:1
发现虚连接的状态为down,即没有成功的建立。检查路由器A、B上关于虚连接的配置,发现没有问题,检查ROUTER ID的配置,也没有问题。接下来在两台使用“display ospf”命令查看OSPF状态,发现在路由器A上实际的ROUTER ID(10.1.1.1)与手工配置的ROUTER ID(1.1.1.1)不一致:
[A]display ospf
RouterID: 10.1.1.1 Border Router: Area
Routing selection preference: Inter/Intra: 10 External: 150 Default ASE parametres: Metric: 1 Tag: 1 Type: 2 SPF computation count: 5 „„
其原因可能是我们在路由器上已经启用OSPF协议之后才手工配置ROUTER ID,这时路由器已经从接口IP地址之中选除了ROUTER ID,因此手工配置的ROUTER ID不会立即生效,除非路由器重新启动。
这时可以保存A的配置并重起路由器,让手工配置的ROUTER ID生效。这时再查看OSPF虚连接状态: [A]dis ospf v Virtual Interfaces: vlink peer-id 2.2.2.2 Interface: 200.1.1.2 (Serial0)
Cost: 1562 State: P To P Type: Virtual Transit Area: 0.0.0.1 Configure as demand circuit Run as demand circuit DoNotAge lsa allowed Authentication: none
Timers: Hello: 10 Poll: 0 Dead: 40 Retrans: 5 Transmit Delay: 1 其状态为P To P,已经成功建立了虚连接。 在路由器B上查看路由表如下: [B]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 OSPF 10 3124 200.1.1.2 Serial0 10.1.2.0/24 OSPF 10 3124 200.1.1.2 Serial0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.2 Serial1 150.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0 194.186.23.0/24 BGP 170 0 150.1.1.1 Serial1 194.186.23.128/25 Direct 0 0 194.186.23.129 Ethernet0 194.186.23.129/32 Direct 0 0 127.0.0.1 LoopBack0
200.1.1.0/24 Direct 0 0 200.1.1.2 Serial0 200.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.2/32 Direct 0 0 200.1.1.2 Serial0
这时在路由表中已经有了两条到10.1.2.1/24、10.1.1.1/24的OSPF路由,从路由器B上ping 10.1.2.1/24、10.1.1.1/24网段也可以ping通了。但是从B上的用户网段194.186.23.128/25仍然无法ping通10.1.2.1/24、10.1.1.1/24网段。这个时候路由器B上到10.1.2.1/24、10.1.1.1/24网段的路由已经有了,如果还ping不通,则很可能是路由器A上没有回来的路由。
现在让我们回到路由器A上,查看A的路由表: [A]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 Direct 0 0 10.1.1.1 LoopBack1 10.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 10.1.2.0/24 Direct 0 0 10.1.2.1 LoopBack2 10.1.2.1/32 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 194.186.23.0/25 Direct 0 0 194.186.23.1 Ethernet0 194.186.23.1/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.0/24 Direct 0 0 200.1.1.1 Serial0 200.1.1.1/32 Direct 0 0 200.1.1.1 Serial0 200.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0
通过对比A和B的路由表,我们可以发现,在路由器B上有一条从IBGP邻居C学到的BGP路由194.186.23.0/24,由于在路由器C上配置了BGP聚合,所以这是一条聚合后的路由。但A也和C有IBGP邻居关系,为什么A就没有学到呢?
这时我们可以用“display bgp summary”来检查一下A的BGP邻居状态: [A]display bgp summary
Neighbor V AS MsgRcvd MsgSent OutQ Up/Down State
150.1.1.1 4 100 0 0 0 00:01:08 Active
发现A到C的IBGP连接处于Active状态,没能正常建立。从路由器A上ping对端的接口地址150.1.1.1发现不通,在上面的路由表中也看不到去往150.1.1.0/24网段的OSPF路由。
现在可以肯定的是A和B之间的OSPF连接没有问题,可以正常的收发OSPF路由信息。那么现在问题就一定出在B和C之间,到路由器C上查看路由表: [C]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.1 Serial1 150.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 BGP 170 0 202.1.1.2 Serial0 192.168.1.2/32 BGP 170 0 202.1.1.2 Serial0 194.186.23.0/24 Aggreg 130 0 127.0.0.1 LoopBack0 194.186.23.128/25 BGP 170 0 150.1.1.2 Serial1 202.1.1.0/24 Direct 0 0 202.1.1.2 Serial0 202.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 202.1.1.2/32 Direct 0 0 202.1.1.2 Serial0
发现也没有任何OSPF路由。在BC之间的链路上,封装的链路层协议是帧中继,通过ping端我们可以发现链路层没有问题,那么肯定是C和B之间的OSPF连接有问题。通过检查配置和用“display ospf interface”命令查看OSPF接口状态: [C]display ospf interface Area: 0.0.0.0
IP Address Type State Cost Pri DR BDR 150.1.1.1 PtoMP P To P 1562 1 None None [B]display ospf interface Area: 0.0.0.0
IP Address Type State Cost Pri DR BDR 150.1.1.2 NBMA DR Other 1562 1 150.1.1.1 150.1.1.1 „„
发现路由器B和C两端的接口上,其OSPF网络类型不一致,因此导致路由计算错误,无法得到OSPF路由。要解决这个问题我们可以在路由器C的接口S1上将OSPF网络类型改为NBMA:
[C-Serial1]ospf network-type nbma 接下来在路由器C上查看路由表: [C-Serial1]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface
10.1.1.0/24 OSPF 10 4686 150.1.1.2 Serial1 10.1.2.0/24 OSPF 10 4686 150.1.1.2 Serial1 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.1 Serial1 150.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 BGP 170 0 202.1.1.2 Serial0 192.168.1.2/32 BGP 170 0 202.1.1.2 Serial0 194.186.23.0/24 Aggreg 130 0 127.0.0.1 LoopBack0 194.186.23.128/25 BGP 170 0 150.1.1.2 Serial1 200.1.1.0/24 OSPF 10 3124 150.1.1.2 Serial1 202.1.1.0/24 Direct 0 0 202.1.1.2 Serial0 202.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 202.1.1.2/32 Direct 0 0 202.1.1.2 Serial0
发现已经成功学到了三条OSPF路由。现在我们再回过头来看看路由器A,在A上查看路由表:
[A]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 Direct 0 0 10.1.1.1 LoopBack1 10.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 10.1.2.0/24 Direct 0 0 10.1.2.1 LoopBack2 10.1.2.1/32 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 OSPF 10 3124 200.1.1.1 Serial0 194.186.23.0/24 BGP 170 0 150.1.1.1 Serial0 194.186.23.0/25 Direct 0 0 194.186.23.1 Ethernet0 194.186.23.1/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.0/24 Direct 0 0 200.1.1.1 Serial0 200.1.1.1/32 Direct 0 0 200.1.1.1 Serial0 200.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0
发现已经有了到150.1.1.0/24网段的OSPF路由,表明从A到C的TCP连接已经通畅,同时IBGP邻居关系也已经成功建立,因此A从其IBGP邻居C学习到了一条BGP路由194.186.23.0/24。
这时从路由器B的用户网段194.186.23.128/25上ping路由器A的10.1.1.0/24,
10.1.2.0/24可以ping通。
同时从路由器A上ping路由器B上的用户网段194.186.23.128/25可以ping通,但从A上的用户网段194.186.23.1/25上却不行。 [A]ping 194.186.23.129
PING 194.186.23.129: 56 data bytes, press CTRL_C to break
Reply from 194.186.23.129: bytes=56 Sequence=0 ttl=255 time = 27 ms Reply from 194.186.23.129: bytes=56 Sequence=1 ttl=255 time = 27 ms „„
[A]ping -a 194.186.23.1 194.186.23.129
PING 194.186.23.129: 56 data bytes, press CTRL_C to break Request time out Request time out
对此只能有一个解释,就是从路由器B到A的194.186.23.1/25网段不通。在路由器B上,我们试着ping路由器A的用户网段194.186.23.1/25: [B]ping 194.186.23.1
PING 194.186.23.1: 56 data bytes, press CTRL_C to break Request time out Request time out Request time out Request time out Request time out
--- 194.186.23.1 ping statistics --- 5 packets transmitted 0 packets received 100.00% packet loss
发现无法ping通,但是在A和B的路由表中,我们可以看到他们要到达对方的用户网段,都是通过一条从C学习到的聚合后的BGP路由194.186.23.0/24。但是为什么A利用这条路由可以到达对方用户网段,而B却不能呢?通过相应的路由的下一跳可以看出,在A的路由表中,194.186.23.0/24网段的下一跳为150.1.1.1,但要到达150.1.1.0/24网段就首先必须到达路由器B,在B上有用户网段的直连路由,因此可以ping通。在B的路由表中,194.186.23.0/24网段的下一跳也是150.1.1.1,所以从B上ping 194.186.23.0/25网段,首先会把包送到路由器C上,在路由器C上查看路由表: [C]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface
10.1.1.0/24 OSPF 10 4686 150.1.1.2 Serial1 10.1.2.0/24 OSPF 10 4686 150.1.1.2 Serial1 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.1 Serial1 150.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 BGP 170 0 202.1.1.2 Serial0 192.168.1.2/32 BGP 170 0 202.1.1.2 Serial0 194.186.23.0/24 Aggreg 130 0 127.0.0.1 LoopBack0 194.186.23.0/25 BGP 170 0 200.1.1.2 Serial1 194.186.23.128/25 BGP 170 0 150.1.1.2 Serial1 200.1.1.0/24 OSPF 10 3124 150.1.1.2 Serial1 202.1.1.0/24 Direct 0 0 202.1.1.2 Serial0 202.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 202.1.1.2/32 Direct 0 0 202.1.1.2 Serial0
发现到194.186.23.0/25和194.186.23.128/25的两条BGP路由的下一跳接口都是S1(因为都是从S1学到的),这样从B来的包又被送了回去而形成了路由环路。
什么会出现这样的路由环路问题呢?其根本原因是在路由器A和B上都没有到对方用户网段的具体路由,只能依靠从C学习到的聚合后路由来进行数据包的转发。当然路由器A和B都会发布本地用户网段的具体路由到路由器C上,但是由于受BGP对路由发布的规则所,对于一个BGP speaker来说,从一个IBGP邻居学到的路由不会向另一个IBGP邻居进行转发。由此我们可以看出,在自治系统100当中最大的问题就是在路由器A和B之间缺少一条IBGP连接,即在自治系统之内,没有达到IBGP邻居全连接。 要解决这个问题,我们只需要在A和B之间配置IBGP邻居关系就可以了: [B-bgp]peer 200.1.1.2 as 100 [A-bgp]peer 200.1.1.1 as 100
在完成配置之后,在路由器AB的路由表中都有了到对方用户网段的具体路由,同时也可以ping通对方了:
[A]ping -a 194.186.23.1 194.186.23.129
PING 194.186.23.129: 56 data bytes, press CTRL_C to break
Reply from 194.186.23.129: bytes=56 Sequence=0 ttl=255 time = 27 ms Reply from 194.186.23.129: bytes=56 Sequence=1 ttl=255 time = 27 ms Reply from 194.186.23.129: bytes=56 Sequence=2 ttl=255 time = 26 …… [B]ping -a 194.186.23.129 194.186.23.1
PING 194.186.23.1: 56 data bytes, press CTRL_C to break
Reply from 194.186.23.1: bytes=56 Sequence=0 ttl=255 time = 27 ms Reply from 194.186.23.1: bytes=56 Sequence=1 ttl=255 time = 27 ms
Reply from 194.186.23.1: bytes=56 Sequence=2 ttl=255 time = 26 ms……
到目前为止,AS100内的用户网段都可以实现互通了。下面我们再来看一看到AS200的网络互通情况。
从路由器AB的用户网段194.186.23.0/25、10.1.2.1/24、10.1.1.1/24、194.186.23.128/25分别ping路由器E上的用户网段20.1.1.1/24、30.1.1.1/18、40.1.1.1/22,发现仍然无法ping通。同时在路由表中也没有到目的网段的路由。对此我们还是先从自治系统AS200的内部开始分析:
在AS200内的路由器D上,分别ping路由器E上的用户网段20.1.1.1/24、30.1.1.1/18、40.1.1.1/22,发现无法ping通,在D上查看路由表如下: [D]display ip routing-table Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 BGP 170 0 202.1.1.1 Serial0 10.1.2.0/24 BGP 170 0 202.1.1.1 Serial0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 Direct 0 0 192.168.1.2 Serial1 192.168.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.2/32 Direct 0 0 192.168.1.2 Serial1 194.186.23.0/24 BGP 170 0 202.1.1.1 Serial0 194.186.23.0/25 BGP 170 0 202.1.1.1 Serial0 194.186.23.128/25 BGP 170 0 202.1.1.1 Serial0 200.1.1.0/24 BGP 170 0 202.1.1.1 Serial0 202.1.1.0/24 Direct 0 0 202.1.1.1 Serial0 202.1.1.1/32 Direct 0 0 202.1.1.1 Serial0 202.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0
发现没有任何RIP路由存在。仔细查看路由器D和E的RIP协议相关配置,发现在路由器D上和E相连的S1接口上,配置了“rip version 2 multicast”命令,即此接口以RIP-2的multicast方式发送报文;而在路由器E的S0接口上,采用的是系统缺省配置,即以RIP-1的broadcast方式发送报文。这样两台运行RIP的路由器之间由于版本和报文发送方式的不同,显然是无法进行通信的,所以也不会收到任何的路由更新报文。
要解决这个问题,我们只需要在路由器E的相应接口上也指定以RIP-2的multicast方式发送报文即可:
[E-Serial0]rip version 2 multicast
完成上述配置之后,在路由器D上查看路由表,发现已经有了相应的RIP路由: [D]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 BGP 170 0 202.1.1.1 Serial0 10.1.2.0/24 BGP 170 0 202.1.1.1 Serial0
20.0.0.0/8 RIP 100 1 192.168.1.2 Serial1 30.0.0.0/8 RIP 100 1 192.168.1.2 Serial1 40.0.0.0/8 RIP 100 1 192.168.1.2 Serial1 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 „„
这时在路由器D上ping路由器E的用户网段,发现已经可以ping通了。
在解决了自治系统AS200内部的问题之后,我们再来看看在自治系统之间是否存在问题。 由于路由器C和路由器D之间是EBGP邻居关系,而在路由器D上已经成功的引入了RIP路由。这时,我们可以在路由器C上查看一下路由表,看有什么变化: [C]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 OSPF 10 4686 150.1.1.2 Serial1 10.1.2.0/24 OSPF 10 4686 150.1.1.2 Serial1 20.0.0.0/8 BGP 170 0 202.1.1.2 Serial0 30.0.0.0/8 BGP 170 0 202.1.1.2 Serial0 40.0.0.0/8 BGP 170 0 202.1.1.2 Serial0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.1 Serial1 150.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 BGP 170 0 202.1.1.2 Serial0 192.168.1.2/32 BGP 170 0 202.1.1.2 Serial0 194.186.23.0/24 Aggreg 130 0 127.0.0.1 LoopBack0 194.186.23.0/25 BGP 170 0 200.1.1.2 Serial1 194.186.23.128/25 BGP 170 0 150.1.1.2 Serial1 200.1.1.0/24 OSPF 10 3124 150.1.1.2 Serial1 202.1.1.0/24 Direct 0 0 202.1.1.2 Serial0 202.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 202.1.1.2/32 Direct 0 0 202.1.1.2 Serial0
由上面的信息我们可以发现,多了三条到路由器E用户网段的BGP路由。这时我们可以试着从路由器C上ping路由器E上的三个用户网段,发现已经可以ping通了。
接下来我们再回到路由器B上,同样试着ping路由器E上的三个用户网段,但这次却无法ping通,在B的路由表中,也没有相应的路由信息。在路由器A上,也有相同的问题。 在这种情况下,既然路由器C已经成功的学习到了相应的路由并采用了这些路由,是不是C没有把这些路由发布给自己的IBGP邻居呢?
为了检查这一点,我们可以在路由器B上查看一下其收到的所有BGP路由,采用查看BGP路由表的命令“display bgp”: [B]dis bgp
BGP local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i internal Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Path * i 10.1.1.0/24 150.1.1.1 4686 100 ? * i 10.1.2.0/24 150.1.1.1 4686 100 ? i 20.0.0.0 202.1.1.2 100 200 ? i 30.0.0.0 202.1.1.2 100 200 ? i 40.0.0.0 202.1.1.2 100 200 ? i 192.168.1.0 202.1.1.2 100 200 ? i 192.168.1.2/32 202.1.1.2 100 200 ? *>i 194.186.23.0 150.1.1.1 100 i *>i 194.186.23.0/25 200.1.1.2 100 i *> 194.186.23.128/25 0.0.0.0 i * i 200.1.1.0 150.1.1.1 3124 100 ?
在BGP路由表中,我们可以看到路由器B已经收到了C通告给它的三条BGP路由,但是它并没有把它们加入到IP路由表当中去。为什么会这样呢?对此我们可以观察一下这三条路由的下一跳,可以发现其下一跳都是路由器D与路由器C直连的接口202.1.1.2,而不是C和B相连的接口。这是因为BGP在通告路由时的另一条规则:当BGP speaker从EBGP邻居那里学习到路由的时候,它会把此路由原封不动的通告给它的IBGP邻居,不会改变其下一跳地址。而这时对于路由器B来说,它根本就不知道如何到达202.1.1.2,因此这是一条下一跳不可达的路由,它不会把它加入到路由表中去。因此从路由器B和A也无法ping通相应的目的网段了。
为了解决这个问题,我们可以在路由器C上配置强制下一跳命令,这样C在通告给IBGP邻居路由时就会把下一跳改过来,命令如下: [C-bgp]peer 150.1.1.2 next-hop-local [C-bgp]peer 200.1.1.2 next-hop-local
现在我们再在路由器B和A上查看IP路由表时会发现,已经把相应网段加入到了路由表中,
且下一跳为150.1.1.1: [B]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 OSPF 10 3124 200.1.1.2 Serial0 10.1.2.0/24 OSPF 10 3124 200.1.1.2 Serial0 20.0.0.0/8 BGP 170 0 150.1.1.1 Serial1 30.0.0.0/8 BGP 170 0 150.1.1.1 Serial1 40.0.0.0/8 BGP 170 0 150.1.1.1 Serial1 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 Direct 0 0 150.1.1.2 Serial1 150.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0 192.168.1.0/24 BGP 170 0 150.1.1.1 Serial1 192.168.1.2/32 BGP 170 0 150.1.1.1 Serial1 194.186.23.0/24 BGP 170 0 150.1.1.1 Serial1 194.186.23.0/25 BGP 170 0 200.1.1.2 Serial0 194.186.23.128/25 Direct 0 0 194.186.23.129 Ethernet0 194.186.23.129/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.0/24 Direct 0 0 200.1.1.2 Serial0 200.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 200.1.1.2/32 Direct 0 0 200.1.1.2 Serial0 [A]dis ip rou Routing Tables:
Destination/Mask Proto Pref Metric Nexthop Interface 10.1.1.0/24 Direct 0 0 10.1.1.1 LoopBack1 10.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0 10.1.2.0/24 Direct 0 0 10.1.2.1 LoopBack2 10.1.2.1/32 Direct 0 0 127.0.0.1 LoopBack0 20.0.0.0/8 BGP 170 0 150.1.1.1 Serial0 30.0.0.0/8 BGP 170 0 150.1.1.1 Serial0 40.0.0.0/8 BGP 170 0 150.1.1.1 Serial0 127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 150.1.1.0/24 OSPF 10 3124 200.1.1.1 Serial0 192.168.1.0/24 BGP 170 0 150.1.1.1 Serial0
192.168.1.2/32 BGP 170 0 150.1.1.1 Serial0 194.186.23.0/24 BGP 170 0 150.1.1.1 Serial0 194.186.23.0/25 Direct 0 0 194.186.23.1 Ethernet0 194.186.23.1/32 Direct 0 0 127.0.0.1 LoopBack0 194.186.23.128/25 BGP 170 0 200.1.1.1 Serial0 200.1.1.0/24 Direct 0 0 200.1.1.1 Serial0 200.1.1.1/32 Direct 0 0 200.1.1.1 Serial0 200.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack0
这时如果我们从路由器A和B上的用户网段ping路由器E上的用户网段20.1.1.1/24、30.1.1.1/18、40.1.1.1/22,会发现已经可以ping通了。到这一步我们已经成功的排除了该网络中的全部故障点,达到了各用户网段之间的互通。 注意:
在这里,细心的学员可能会注意到,如果从路由器B上直接ping路由器E的用户网段,是无法ping通的,但是在路由器B的所连的用户网段上却可以,这是为什么呢? [B]ping 20.1.1.1
PING 20.1.1.1: 56 data bytes, press CTRL_C to break Request time out Request time out
--- 20.1.1.1 ping statistics --- 3 packets transmitted 0 packets received 100.00% packet loss
[B]ping -a 194.186.23.129 20.1.1.1
PING 20.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 20.1.1.1: bytes=56 Sequence=0 ttl=253 time = 83 ms Reply from 20.1.1.1: bytes=56 Sequence=1 ttl=253 time = 82 ms Reply from 20.1.1.1: bytes=56 Sequence=2 ttl=253 time = 84 ms Reply from 20.1.1.1: bytes=56 Sequence=3 ttl=253 time = 83 ms Reply from 20.1.1.1: bytes=56 Sequence=4 ttl=253 time = 82 ms
--- 20.1.1.1 ping statistics --- 5 packets transmitted 5 packets received 0.00% packet loss
round-trip min/avg/max = 82/82/84 ms
实际上这并不是什么大问题。我们知道在路由器B上去往路由器E用户网段的路由都是没问题的,问题就出在回来的路由上。通过观察路由器D上的路由表我们可以发现,有到路由器B用户网段194.186.23.128/25的BGP路由,但是没有到路由器B和C之间的150.1.1.0/24网段的路由。而如果我们直接从路由器B上ping的话,其源地址为150.1.1.2,所以这样就没有回来的路由,而造成无法ping通。
实际上这个问题并不会影响到各用户网段之间的互通,当然如果需要在网络中的每一点都达到互通,我们还是可以用一定的方法来解决这个问题。比如说在路由器C上引入所有直连路由,就可以解决这个问题。 1.6 教师实验指导建议 1.6.1 分组建议
由于本实验总共需要五台路由器,因此在开班人数较多时建议分成两组进行,但每组的人数最好不要超过五人,否则会影响实验效果。 1.6.2 组长推举以及组员分工
在分组之后,需要推举出一个组长来领导各组完成实验。组长在本组的实验过程中主要起一个牵头的作用,并组织组内的讨论。组长的推举可以采取学员毛遂自荐的方式,如果学员反应不积极,也可以有意识的指定学员中技术水平较好的来担任组长,以保证实验的顺利进行。在推举出组长之后,还可以引导组长对自己的组员也进行相应的分工。比如说可以让特定的组员负责查看配置与display信息;某些组员负责实际操作,修改配置;某些组员负责记录故障点和每一步操作,完成实验报告。 1.6.3 分组讨论
在实验的开始阶段,教师应该要求各组的组长带领各组的组员先弄清网络的状况与要求,并把各路由器上的配置都先读一遍,这样才不会在后面的实验中大家都弄得一头雾水。接下来可以让组长组织对故障现象,故障定位和如何解决问题进行组内的讨论。同时教师也应该时刻关注各组的讨论情况和实验进展,并在必要的时候参与进来,把大家引导到正确的思路上来。因此,在分组讨论排除故障阶段,根据具体情况,可能会需要一到两名教师指导实验以保证实验效果。
1.6.4 各组总结
在实验完成之后,可以请各组的组长分别对本组的实验情况作一个经验总结,包括故障的定位过程以及如何排除故障。教师在这个时候可以鼓励各组的组员积极的对组长的发言进行补充,教师自己也可以针对学员的总结进行一些点评和补充。 1.6.5 提问
在各组完成总结之后,教师可以有针对性的提一些问题,以加深学员对路由的理解,下面列
出一些问题,以供参考: 参考问题:
1.为什么在A和B之间不配置IBGP邻居的情况下,会出现从194.186.23.0/25网段可以ping通194.186.23.128/25网段,但194.186.23.128/25网段无法ping通194.186.23.0/25网段的单通故障?请学员仔细分析一下当时的路由状况。(参见前面的故障分析与排除流程)
2.如果在A和B之间不允许配置IBGP邻居,还有什么方法可以解决上述的问题?(配置静态路由,或者BGP反射器。)
3.为什么在B上直接ping路由器E上的用户网段无法ping通,而在路由器B的用户网段194.186.23.128/25上却可以ping通?请学员仔细分析一下当时的路由状况。(参见前面的故障分析与排除流程) 1.6.6 教师总结
在本实验的最后,教师还应该对整个实验的故障排除思路,故障点分析和解决方案做一个最终的总结,以加深学员对课程的理解,并使之更系统化。 1.6.7 实验中的时间点控制
下午的实验时间为2:00到5:30共三个半小时的时间,教师在指导实验的同时也需要对各阶段的时间点进行一定控制,以保证在规定时间之内完成整个实验,下面是参考的时间点: 2:00PM之前:教师准备好实验环境,设置好故障点。
2:00-2:30PM:教师介绍实验的网络状况和具体要求,向学员描述故障现象以及排障要求。分组并选举组长,明确各组员的分工。
2:30-4:30PM:各组长组织组员验证故障现象,熟悉网络状况和具体配置。对故障现象,故障定位和如何解决问题进行组内讨论,最终排除故障。 注意:
考虑到时间问题,在4:30PM时不管各组是否完成,都应该进入下一阶段。在下一阶段可以让各组对已经排除的故障点进行总结,再由教师进行总结。
4:40-5:30PM:休息十分钟之后,进入组长总结,提问和教师总结阶段。 5:30PM:实验结束。
通过本实验,我们可以了解到在比较复杂的组网当中,特别是当有多种路由协议共存时,如果出现路由不通的情况。这时只要我们熟悉各路由协议之间的引入和路由发布规律,并且对路由表进行比较细致的分析,一般都能很快找到问题的根结所在,从而解决问题。 路由故障排除综合实验
因篇幅问题不能全部显示,请点此查看更多更全内容