如果需要在多个路由器间重分发两种路由协议,会出现一些潜在的问题。比如说,在重分发路由器上,它们同时会学习到某个子网的两种路由协议,如果该路由器使用AD来确定哪条是最佳路由,往往会造成某些次优路径。具体可以看看下面的实例:

路由器配置:
1)R1的配置
router ospf 1
router-id 1.1.1.1
redistribute rip subnets
network 10.1.15.1 0.0.0.0 area 0
!
router rip
redistribute ospf 1
network 10.0.0.0
default-metric 1
2)R3的配置:
router ospf 1
router-id 3.3.3.3
redistribute rip subnets
network 10.1.34.3 0.0.0.0 area 0
!
router rip
redistribute ospf 1
network 10.0.0.0
default-metric 1
在上图中,R3通过来自R2的RIP更新会学习到子网10.1.2.0/24,与此同时,R1会将学习到的RIP路由重分发到OSPF域中,这样R3会通过OSPF再学习到一条到10.1.2.0/24的路由。如果R3选择管理距离最小的路由,那么由于OSPF的AD(110)比RIP的AD(120)小,所以它会选择OSPF的重分发路由,显然这不是我们所希望的结果。实际上,这种情况会在R1和R3的每一RIP子网上都可能出现。要解决类似的问题,路由器必须知晓每条路由具体来自什么路由协议域。
一种简单并有效地解决方案是用高AD来标记重分发的路由,从而可以让路由器作出正确的选择。就上面的问题而言,在router ospf进程下增加一条distance ospf external 180命令就可以了。注意,EIGRP本身就支持这样的方案,它对外部路由使用的AD为170,而内部路由使用的值是90。虽然这种方案看上去不错,但也可能有问题,比如说,如果R4注入了一些有效的OSPF外部路由(不是重分发路由),此时按这种方案的配置,因为OSPF外部路由的AD值大,所以路由器会选择经由RIP域的次优路由。这个问题提醒我们,不能对所有外部路由的AD值都增大。幸运的是,distance路由子命令可以针对来自特定路由器的路由进行AD值调整,其格式如下:
distance {distance-value ip-address {wildcard-mask} [ip-standard-list] [ip-extended-list]}
该命令可以设置AD值,广播该路由的路由器IP地址,以及匹配路由的ACL。还是看上面的例子,通过使用完整格式的distance命令,可以对路由器增加如下配置:
1)R1的配置:
router ospf 1
distance 179 3.3.3.3 0.0.0.0 only-rip-routes
!
ip access-list standard only-rip-routes
permit 10.1.12.0
permit 10.1.3.0
permit 10.1.2.0
permit 10.1.23.0
2)R3的配置:
router ospf 1
distance 179 1.1.1.1 0.0.0.0 only-rip-routes
!
ip access-list standard only-rip-routes
permit 10.1.12.0
permit 10.1.3.0
permit 10.1.2.0
permit 10.1.23.0