详细分解三同不同默认路由配置形式的区别与故障排除
在思科CCNP的学习中,要求接合EIGRP使用ipdefaultnetwork指令将某条具体的主类网络公告为默认路由,在实施这个前建议大家明确区别ip defaultgateway、ip defaultnetwork、ip route 0.0.0.0 0.0.0.0、三种不同配置默认路由形式的关键区别,那么本文档的目标在于解决如下疑问。
解决疑问一:如下配置默认路由指令的具体区别
ipdefaultgateway
ip defaultnetwork(重点理解)
ip route 0.0.0.00.0.0.0
解决疑问二:为什么在实施ip defaultnetwork接合动态路由EIGRP和RIP时总是故障
注意:这现在我们让这两个疑问分开处理,采取逐个击破的方式来,然后再把分开理解的零碎知识点进行逻辑组合,加以实验推演,这样各种不同默认路由的区别就非常明显,顺理成章必能快速处理疑问二中的故障。
理解ip defaultgateway
ip defaultgateway通常是使用在路由器的IP路由功能被禁用或者因为某些原因丧失了路由转发功能时,为路由器配置默认网关的功能,此时的路由器只相当于IP通信世界里的一个单纯的通信节点,与计算机相类同,此时在路由器上使用ip defaultgateway指令就相当于为计算机配置默认网关功能。那么在什么情况下路由器的IP路由功能会丧失?
通常处理某种管理原因,管理员手工的执行了no ip routing指令,或者由于路由器IOS镜像遭到破坏,处于引导模式中,路由器无法进行路由数据包的转发。
如下为思科官方原英文文档关键部分的截取:
用ip defaultgateway定义默认网关的实例
如图1所示的环境,假设路由器R2的IOS镜像受到破坏,或者要为路由器R2升级IOS镜像,再在路由器R2正处于引导模式,此时的R2已经就不再具备IP路由转发功能了。如果R2希望通过网络在TFTP服务器192.168.100.100上下载新的IOS镜像,就必须使用ip defaultgateway指令将路由器R2的默认网关配置为192.168.3.1,此时的R2就类似一台计算机而已。那么为什么不使用平时使用最多的一种方式ip route 0.0.0.0 0.0.0.0192.168.3.1,很遗憾的是:当路由器不再具备路由转发的能力时,就已经没有路由表存在了,那么iproute 0.0.0.0 0.0.0.0 192.168.3.1指令也不可能被执行。
实验论证过程:
默认情况下,路由器是启动IP路由功能的,即便是不配置任何接口地址,或者路由协议,但是IP路由表是可用的,使用show ip route查看路由器如图2所示路由表可用。当在路由器R2上使用指令no ip routing就是让路由器丧失路由转发功能,此时的路由器就只是一个单纯的IP接点,类似于一台计算机,如果使用show ip route查看路由表时会出现如下图3所示的结果,路由表不可用,当然还没有使用ip defaultgateway进行默认网关的配置。
在执行no ip routing(关闭路由转发功能)的情况下,配置默认网关,如下所示。当成功完成配置后,如图4所示,虽然路由转发功能被关闭,路由表不可用,但是该路由器具备了一个与计算机似类的默认网关192.168.3.1。
R2(config)#ipdefault-gateway 192.168.3.1
理解ip defaultnetwork
ip defaultnetwork也是一种配置默认路由的方式,但是它是将路由表中一个特定的主类网络作为默认路由(非0.0.0.0形式的默认路由),如图5所示将198.10.1.0作为了一条默认路由,注意看该路由记录前有本个“*”的标记。并且指示要到达198.10.1.0最后的网关是161.44.192.2。ip defaultnetwork指令必须在路由转发功能可用的情况下,才能生效。
ip defaultnetwork后面跟的网络必须是主类网络,把一条具体的网络作为默认路由。
ip defaultnetwork后面跟的主类网络,在该路由器上必须具备可达性。
如图6所示,当路由器R1上需要将10.0.0.0/8为作为被标有“*”符号的默认路由,那么在R1上就必须具备到10.0.0.0/8的可达到,换句话而言,在R1的路由表中必须有到达10.0.0.0/8的路由记录,该路由记录的形式可以是静态路由,也可以是通过动态路由协议学习到的。
使用在ip route 10.0.0.0255.0.0.0 172.31.1.1图6环境中的R1上配置一条到10.0.0.0的静态路由,如图7所示,然后再在R1使用ip default-network 10.0.0.0将该网络配置为默认路由,得到如图8所示的结果,R1将10.0.0.0标记为代有“*”的默认路由,并指示要到达10.0.0.0的最后网关是172.31.1.1,同时R1会自动在路由表中插入一条0.0.0.0形式的默认路由。
紧接着,善思者必须会产生一些疑问:在使用ip defaultnetwork 10.0.0.0时,路由表中必须要有到达10.0.0.0的路由,既然都已经有到达10.0.0.0的可达性路由了,为了什么还要把10.0.0.0作为默认路由?
这将出于加强了你路由转发的robustness(健状性)考虑,它通过最后的一个网关如图8中的172.31.1.1来到达特点的子网10.0.0.0;如果R1后面还有很多的路由器,假设R1后面的路由器包括了传统的运行了IGRP的路由器,如果你相通过配置让每台传统的IGRP路由器接合IGRP协议自动的从R1上去学到一条默认路由,你一定不能使用0.0.0.0形式,因为IGRP不支持0.0.0.0形式的默认路由,IGRP必须使用ip default-network来公告默认路由。出于这种原因不难看出ip default-network具备向下兼容IGRP完成自动公告默认路由,当然EIGRP和RIP也支持。关于EIGRP和RIP对ip default-network支持,后继会作更多描述。
已经使用ip defaultnetwork10.0.0.0将该网络标记为一条默认路由,在如图8所示,的路由表中R1为什么还会自动插入一条0.0.0.0/0的默认路由?
曾经在哪些传统版本的IOS中使用ip defaultnetwork后,是不会自动插入0.0.0.0这条路由的,现今的IOS为了加强路由转发的稳定性,所以在配置了ipdefaultnetwork网络后,会加入一条0.0.0.0形式的默认路由如图8所示,其实要理解为什么这么做很简单,在图6的环境中,可以使用被标为“*”10.0.0.0的默认路由来到达10.0.0.0的网络,那么要到达11.0.0.0的网络怎么办?因为没有其它具体的静态路由,那就只能使用路由器R1自动插入到路由表中的0.0.0.0来到达,这就是R1为什么还会自动插入一条0.0.0.0/0的默认路由的原因。
ip defaultnetwork X.X.X.X是可以配合动态路由协议IGRP、RIP、EIGRP使用。
如图9所示的环境,R1可以使用ip defaultnetwork 10.0.0.0定义10.0.0.0作为一条有具体主类条目的默认路由向IGRP、RIP、EIGRP路由域公告。让R2自动的从R1得到10.0.0.0这条标记有“*”的默认路由,只是在使用时需要注意如下事项:
ip defaultnetwork X.X.X.X是配合动态路由协议IGRP、RIP、EIGRP注意事项:
在如图9环境R1的路由表中,必须具备到10.0.0.0网络的可达性,也就是说必须要有到10.0.0.0这个网络的路由记录, 可以通过在路由器R1上使用静态路由的方式进行手工输写,然后在满足这一条件(静态路由输前完成)后,针对IGRP、RIP、EIGRP不同的路由协议又会出现几种不同的处理情况, 可以直接通过路由进程里面的network语句,公告10.0.0.0;也可以通过路由再发布redistribute,将10.0.0.0的可达性发布到相应的路由进程里面,来确保R2成功的学到10.0.0.0这条标记有“*”的默认路由,那么什么时候使用network直接公告,哪个时使用redistribute,这将看您静态路由输写的下一跳是出站接口,还是具体的下一跳地址,如果说静态路由的下一跳输写的是出站接口,那么就使用network公告,如果静态路由下一跳输写的是具体地址,那么就必须使用redistribute进行路由再发布,为什么会是这样,我们将在解决疑问二:为什么在实施ipdefaultnetwork接合动态路由EIGRP和RIP时总是故障中做详细回答与测试。
注意:OSPF和ISIS是不支持ip defaultnetwork形式的。它们只认可0.0.0.0形式的默认路由,事实上,你可以更明确的理解,ip defaultnetwork就是一个遗留产物。
解决疑问二:为什么在实施ip defaultnetwork接合动态路由EIGRP和RIP时总是故障
故障环境:如图10所示的演示环境。
故障描述:在路由器R1上已经通过ip default-network 10.0.0.0定义了默认网络,也已经配置ip route 10.0.0.0255.0.0.0 172.31.1.1的可达性路由具备,然后根据思科官方配置文档的指示,在R1的EIGRP路由进程中使用network10.0.0.0进行了公告,但是路由器R2始终得不到被标记为“*”的10.0.0.0作为默认路由,故障路由表如图11所示。
故障原始配置:图10中关键设备R1和R2的原始配置如下所示。
路由器R1的配置
interface Ethernet1/0
ipaddress 172.31.1.2 255.255.255.0
interface Ethernet1/1
ipaddress 192.168.1.1 255.255.255.0
router eigrp 2014
network 10.0.0.0 *已经使用network语句公告10.0.0.0
network192.168.1.0
ip default-network 10.0.0.0 *注意:已经定义10.0.0.0为默认路由
ip route 10.0.0.0 255.0.0.0 172.31.1.1 *已经通过静态路由来确定到10.0.0.0的可达性,下一跳为具体地址
路由器R2的配置:
interface Ethernet1/0
ipaddress 192.168.1.2 255.255.255.0
router eigrp 2014
network192.168.1.0
故障分析:
在这种情况下,故障的原因是如图12所示,你的确配置了到10.0.0.0/8的静态路由,但是它使用了明确的下一跳地址,这对于路由器R1而言,10.0.0.0/8就不是直连路由,你岂可通过network 10.0.0.0来完成公告,不论是RIP、IGRP、EIGRP使用network公告的网络都必须是直连网络。那么要解决这个故障,两个解决方案:改静态路由的下一跳为出站接口,或者使用路由再发布,为什么要这么做,分析如下:
故障处理:使用方案一,将针对10.0.0.0的可达性路由的下一跳改为出站接口,如图13所示,明显可看出此时的10.0.0.0以直连网络(directly connected)存在,那么他就能配置合EIGRP路由进程中的network指令进行公告,因为非BGP路由协议,如RIP、IGRP、EIGRP的Network指令后面,必须是直接连接以“directly connected”的网络, 具体配置如下所示,当完成这个更改后,再到路由器R2上查看路由表,如图14所示,成功的以默认路由的形式,标记有“*”学到了10.0.0.0。
R1(config)#noip route 10.0.0.0 255.0.0.0 172.31.1.1 * no掉下一跳是具体地址
R1(config)#iproute 10.0.0.0 255.0.0.0 E1/0 * 将下一跳改为出站接口
使用解决方案二,就是不更改10.0.0.0的下一跳为出站接口,仍然要求是具体的下一跳地址,但是将具有具体下一跳地址的10.0.0.0再发布到EIGRP进程中,可以对故障进行解决,因为非直接连接的网络只能使用路由再发布来解决,具体配置如下所示,完成关相配置后,在路由器R2上show ip route查看路由表,可看到,成功的学习到10.0.0.0并标记为“*”,同是被标记为“D*EX”表示是再发布进入EIGRP的路由。
router eigrp 2014
network192.168.1.0
redistribute static * 此时必须将表示可达性的静态路由再发布到EIGRP的路由进程中
ip default-network 10.0.0.0 *定义10.0.0.0为默认路由
ip route 10.0.0.0255.0.0.0 172.31.1.1 * 到达10.0.0.0的静态路由使用明确的下一跳地址
故障总结:
如果配置到达10.0.0.0可达性路由的下一跳是具体地址,那么就必须在EIGRP中使用路由再发布,如果达10.0.0.0可达性路由的下一跳是出站接口,那么就只需在EIGRP中使用Network公告,原因上述已经描述得很清晰了,IGRP与EIGRP处理方式相同。
关于RIP使用ip default-network发布默认路由的说明
RIP使用ipdefault-network发布默认路由配置更简单,只虽要使用ip default-network 10.0.0.0定义默认网络,然后使用ip route 10.0.0.0 255.0.0.0 Ethernet1/0配置到默认网络的可达性,如图16所示,当完成如下配置后,可以在R2上查看路由表如图17所示,得到一条标记有*的0.0.0.0形式的默认路由。RIP与IGRP和EIGRP使用ipdefault-network发布默认路由的区别是:RIP不需要在路由进程中使用network公告10.0.0.0;然后使用ip default-network发布的默认路由不是以具体网络为显示的,而是0.0.0.0的形式。
路由器R1的配置:
router rip
version 2
network 192.168.1.0
ip default-network 10.0.0.0 * 定义默认网络
ip route 10.0.0.0255.0.0.0 Ethernet1/0 *配置默认网络的可达性,下一跳为出站接口