0%

双点双向重分布

写在前面

不同的路由网络之间互联的时候,需要相互导入对方的路由完成路由重分布。进行双向重分布的路由器就显得格外重要,存在单点故障隐患,可通过双点双向重分布来解决这个问题。

拓扑描述

双点双向重分布拓扑如下:

左边的区域运行rip,右边的区域运行ospf,在R2、R4上做双向重分布,最终效果:在R1上到3.3.3.3有两个下一跳,在R3上到1.1.1.1上有两个下一跳。

配置

接口ip及动态路由协议配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
R1:
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
ip address 12.1.1.1 255.255.255.0
!
interface Ethernet0/1
ip address 14.1.1.1 255.255.255.0

router rip
version 2 // 使用rip version2版本,version1只能使用有类别的ip
network 1.0.0.0
network 12.0.0.0
network 14.0.0.0
no auto-summary // rip默认开启路由汇聚,将其关闭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
R2:
interface Loopback0
ip address 2.2.2.2 255.255.255.255
ip ospf 110 area 0
!
interface Ethernet0/0
ip address 12.1.1.2 255.255.255.0
!
interface Ethernet0/1
ip address 23.1.1.2 255.255.255.0
ip ospf 110 area 0 // eth0/1参加ospf110的计算

router ospf 110
!
router rip
version 2
network 12.0.0.0
no auto-summary
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
R4:
interface Loopback0
ip address 4.4.4.4 255.255.255.255
ip ospf 110 area 0
!
interface Ethernet0/0
ip address 14.1.1.4 255.255.255.0
!
interface Ethernet0/1
ip address 34.1.1.3 255.255.255.0
ip ospf 110 area 0
!
router ospf 110
!
router rip
version 2
network 14.0.0.0
no auto-summary // 配置和R2基本一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
R3:
interface Loopback0
ip address 3.3.3.3 255.255.255.255
ip ospf 110 area 0
!
interface Ethernet0/0
ip address 23.1.1.3 255.255.255.0
ip ospf 110 area 0
!
interface Ethernet0/1
ip address 34.1.1.3 255.255.255.0
ip ospf 110 area 0 // R3的接口全部加入ospf110的计算
!
router ospf 110

配置完成之后产看一些状态,看结果是不是符合预期。在R2,R4上应该通过rip学到1.1.1.1的路由:

1
2
3
4
5
R2#show ip route | include 1.1.1.1
R 1.1.1.1 [120/1] via 12.1.1.1, 00:00:20, Ethernet0/0

R4#show ip route | include 1.1.1.1
R 1.1.1.1 [120/1] via 14.1.1.1, 00:00:16, Ethernet0/0

在R2,R4上面应该通过ospf学到3.3.3.3的路由:

1
2
3
4
5
R2#show ip route | include 3.3.3.3
O 3.3.3.3 [110/11] via 23.1.1.3, 00:08:19, Ethernet0/1

R4#show ip route | include 3.3.3.3
O 3.3.3.3 [110/11] via 34.1.1.3, 00:06:15, Ethernet0/1

此时没有做重分布,所以R1上没有到3.3.3.3的路由, R3上也没有到1.1.1.1的路由。

重分布配置

现在R2上做双向重分布:

1
2
3
4
5
R2(config)#router ospf 110
R2(config-router)#redistribute rip subnets // 在ospf中引入rip的路由,注意指定subnets选项

R2(config)#router rip
R2(config-router)#redistribute ospf 110 metric 3 // 在rip中引入ospf的路由,注意指定metric值,否则是无穷大

此时就完成了拓扑中的单点双向重分布。分别检查R1和R3上的路由表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
R1#show ip route | begin 1.1.1.1
C 1.1.1.1 is directly connected, Loopback0
2.0.0.0/32 is subnetted, 1 subnets
R 2.2.2.2 [120/3] via 12.1.1.2, 00:00:03, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
R 3.3.3.3 [120/3] via 12.1.1.2, 00:00:03, Ethernet0/0
4.0.0.0/32 is subnetted, 1 subnets
R 4.4.4.4 [120/3] via 12.1.1.2, 00:00:03, Ethernet0/0
12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 12.1.1.0/24 is directly connected, Ethernet0/0
L 12.1.1.1/32 is directly connected, Ethernet0/0
14.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 14.1.1.0/24 is directly connected, Ethernet0/1
L 14.1.1.1/32 is directly connected, Ethernet0/1
23.0.0.0/24 is subnetted, 1 subnets
R 23.1.1.0 [120/3] via 12.1.1.2, 00:00:03, Ethernet0/0
34.0.0.0/24 is subnetted, 1 subnets
R 34.1.1.0 [120/3] via 12.1.1.2, 00:00:03, Ethernet0/0

可以发现R1通过rip学到了3.3.3.3的路由,并且右边ospf区域内的路由全部是通过eth0到R2,符合预期。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
R3#show ip route | begin 1.1.1.1
O E2 1.1.1.1 [110/20] via 23.1.1.2, 00:08:22, Ethernet0/0
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/11] via 23.1.1.2, 00:19:29, Ethernet0/0
3.0.0.0/32 is subnetted, 1 subnets
C 3.3.3.3 is directly connected, Loopback0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/11] via 34.1.1.4, 00:16:58, Ethernet0/1
12.0.0.0/24 is subnetted, 1 subnets
O E2 12.1.1.0 [110/20] via 23.1.1.2, 00:08:22, Ethernet0/0
14.0.0.0/24 is subnetted, 1 subnets
O E2 14.1.1.0 [110/20] via 23.1.1.2, 00:08:22, Ethernet0/0
23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 23.1.1.0/24 is directly connected, Ethernet0/0
L 23.1.1.3/32 is directly connected, Ethernet0/0
34.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 34.1.1.0/24 is directly connected, Ethernet0/1
L 34.1.1.3/32 is directly connected, Ethernet0/1

可以发现R3通过ospf学到了1.1.1.1的路由,并且左边rip区域内的路由全部是通过eth0到R2,符合预期。ping测试:

1
2
3
4
5
6
7
R3#ping 1.1.1.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
R3# // 1.1.1.1和3.3.3.3之间是通的,符合预期

检查一下R4的路由表:

1
2
3
4
5
6
R4#show ip route | include 34.1.1.3
O E2 1.1.1.1 [110/20] via 34.1.1.3, 00:18:13, Ethernet0/1 // ***
O 2.2.2.2 [110/21] via 34.1.1.3, 00:26:51, Ethernet0/1
O 3.3.3.3 [110/11] via 34.1.1.3, 00:26:51, Ethernet0/1
O E2 12.1.1.0 [110/20] via 34.1.1.3, 00:18:13, Ethernet0/1 // ***
O 23.1.1.0 [110/20] via 34.1.1.3, 00:26:51, Ethernet0/1

发现原本在通过rip学习到的两条路由1.1.1.112.1.1.0现在是通过ospf学到的,并且是E2的标记。原因如图示:

以1.1.1.1路由为例,R4会在两个方向学到该路由。红线部分是通过rip学习到的,ad值是120. 蓝线部分是rip重定向到ospf区域学到,ad值是110.
对于相同的prefix,通过不同路由协议学到,选ad值小的,所以R4到1.1.1.1的下一跳是R3,很明显,这是一条次优路径。同理12.1.1.0网段路由也是如此。

R4通过收到type5的LSA学到充rip中重定向的路由,所以修改下外部路由的ad值就可以避免这个问题

1
R4(config-router)#distance ospf external 121            // 改成比rip ad大即可

再次查看R4的路由

1
2
3
R4#show ip route | include 14.1.1.1
R 1.1.1.1 [120/1] via 14.1.1.1, 00:00:18, Ethernet0/0
R 12.1.1.0 [120/1] via 14.1.1.1, 00:00:18, Ethernet0/0

发现次优路径的问题已经没有了。

双点双向重分布

本次实验要点是双点双向重分布,之前只是在R2单点上进行重分布,现在在R4上也执行重分布操作, 配置与R2上一致。

需要注意的是,现在R2也会遇到之前R4的次优路径的问题,因为现在R2也会从rip和ospf两个域收到1.1.1.1的路由,所以同样需要在ospf中修改外部路由ad值。分别查看R1和R3上的路由:

1
2
3
4
5
6
7
8
9
R1#show ip route | begin 3.3.3.3
R 3.3.3.3 [120/3] via 14.1.1.4, 00:00:22, Ethernet0/1
[120/3] via 12.1.1.2, 00:00:26, Ethernet0/0
// R1分别学到从R2、R4重分布过来的3.3.3.3的路由,形成ecmp

R3#show ip route | begin 1.1.1.1
O E2 1.1.1.1 [110/20] via 34.1.1.4, 00:06:13, Ethernet0/1
[110/20] via 23.1.1.2, 00:04:31, Ethernet0/0
// R3上分别学到从R2、R4重分布过来的1.1.1.1的路由,形成ecmp

完全符合预期。

路由标记解决路由回馈的问题

以本实验为例,R2上在ospf中引入的rip路由,某些情况下,R4上会将这部分路由从重分布到rip。rip中没有邻居的概念,将R1的eth1 shutdown之后,在R4上:

1
2
3
4
R4#clear ip route *                // 刷新R4上的路由表

R4#show ip route | include 1.1.1.1
O E2 1.1.1.1 [121/20] via 34.1.1.3, 00:04:34, Ethernet0/1 // 此时1.1.1.1的路由是从ospf学到的(R2上rip重分布到ospf中)

在R2的eth1上抓包如下:

可以发现R4将本属于rip路由域中1.1.1.112.1.1.0这两条路由重新发回到了rip,这会引起路由环路的风险

通过路由标记可以解决这个问题。本质是本路由域从别的路由域中学到的路由不会再重新分发回去(自己发出的自己不再接收)。实际操作是:

  1. 当从别的路由域引入路由的时候,给这些路由打上标记
  2. 将本路由域中的路由重分布出去的时候,不分布这些有标记的路由

接着上面的实验,R2上ospf中引入的rip路由打上标记

1
2
R2(config)#router ospf 110
R2(config-router)#redistribute rip subnets tag 120

在R4上查看ospf中带有tag的路由:

1
2
3
R4#show ip ospf database | include 120
1.1.1.1 2.2.2.2 704 0x80000003 0x00F128 120
12.1.1.0 2.2.2.2 704 0x80000003 0x006CA3 120

R4上在rip中引入ospf路由时过滤这些带有tag的路由:

1
2
3
4
5
6
7
route-map otr deny 5                      // 常见route-map ospf two rip,deny
match tag 120 // tag为120的路由全部deny
!
route-map otr permit 10 //允许不带tag 120的路由通过

router rip
redistribute ospf 110 metric 3 route-map otr // 在rip中引入ospf的路由时使能该route-map

等待拓扑收敛后再次抓包查看:

由于是双点双向重分布,所以需要在4个redistribute的点上分别打tag和使能对应的route-map,这里不做重复操作。

简单总结

本实验的关键是AD值的理解。双点双向重分布中有以下几个关键点:

  1. 次优路径。高AD向低AD重分布时产生次优路径。R2重分布后,R4到1.1.1.1是次优路径。
  2. 重分布失败。重分布的本质:在重分布路由表中一定要有对应路由协议的路由。R2重分布后,R4的路由表中没有rip 1.1.1.1的路由,r4自然无法将1.1.1.1从rip重分布到ospf,此时R3上到1.1.1.1的下一跳只有R2.
  3. 路由回馈(路由倒灌):当一个协议的路由重分布进另一个协议后,如果不做任何控制,在双点双向的场景中,源自于该协议的路由很可能被重新分布回去,就会有环路风险。

本质就是路由重分布之后,边界路由器可能从不同的路由域中收到相同prefix的路由,ad值小的下发到路由表,此时可能造成次优路径等问题。