前缀列表即 IP-Prefix List,它可以将与所定义的前缀列表相匹配的路由,根据定义的匹配模式进行过滤。前缀列表中的匹配条目由IP地址和掩码组成,IP地址可以是网段地址或主机地址,掩码长度的匹配范围为0~32,可以进行精确匹配或者在一定掩码长度范围内匹配,也可以通过配置关键字greater-equal 和 less-equal 指定待匹配的前缀掩码长度范围。
前缀列表能同时匹配前缀号和前缀长度,主要用于路由的匹配和控制,不能用于数据包的过滤。
公司分部A网络使用11.1.1.0/24网段,通过路由器R2和骨干路由器R1相连,网络运行RIPv2协议。现在公司成立一个新分部B,新分部B的路由器R3连接R1加入该RIPv2网络。由于新分部B的网管不熟悉公司内网IP地址规划,在新分部B中使用了11.1.1.0/25网段,导致从总部发往分部A的部分数据包在R1上都会由于路由掩码最长匹配从而错误的发往分部B。而整个新分部B整改IP地址需要一定时间,公司当务之急需要恢复总部与分部A的通信,通过R1上使用前缀列表过滤掉这些路由。
接口IP配置部赘述。
//R1、R2、R4运行RIPv2协议,在总部路由器R4上能访问PC1。
[R1]rip 1
[R1-rip-1]version 2
[R1-rip-1]undo summary
[R1-rip-1]network 20.0.0.0
[R1-rip-1]network 30.0.0.0
[R1-rip-1]network 40.0.0.0
[R2]rip 1
[R2-rip-1]version 2
[R2-rip-1]undo summary
[R2-rip-1]network 11.0.0.0
[R2-rip-1]network 20.0.0.0
[R4]rip 1
[R4-rip-1]version 2
[R4-rip-1]undo summary
[R4-rip-1]network 40.0.0.0
//查看R4上的路由表。
[R4]dis ip routing-table
Route Flags: R - relay, D - download to fib
Routing Tables: Public
Destinations : 10 Routes : 10
Destination/Mask Proto Pre Cost Flags NextHop Interface
11.1.1.0/24 RIP 100 2 D 40.1.1.1 GigabitEthernet0/0/0
20.1.1.0/24 RIP 100 1 D 40.1.1.1 GigabitEthernet0/0/0
30.1.1.0/24 RIP 100 1 D 40.1.1.1 GigabitEthernet0/0/0
40.1.1.0/24 Direct 0 0 D 40.1.1.4 GigabitEthernet0/0/0
40.1.1.4/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
40.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
//已经获得了11.1.1.0/24的路由,测试R4与总部PC1的连通信。
[R4]ping 11.1.1.1
PING 11.1.1.1: 56 data bytes, press CTRL_C to break
Request time out
Reply from 11.1.1.1: bytes=56 Sequence=2 ttl=126 time=90 ms
Reply from 11.1.1.1: bytes=56 Sequence=3 ttl=126 time=70 ms
Reply from 11.1.1.1: bytes=56 Sequence=4 ttl=126 time=60 ms
Reply from 11.1.1.1: bytes=56 Sequence=5 ttl=126 time=50 ms
— 11.1.1.1 ping statistics —
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 50/67/90 ms
//新分部B加入公司网络,在R3上配置RIPv2协议。
[R3]rip 1
[R3-rip-1]version 2
[R3-rip-1]undo summary
[R3-rip-1]network 11.0.0.0
[R3-rip-1]network 30.0.0.0
//查看R4上的路由表。
[R4]dis ip routing-table
Route Flags: R - relay, D - download to fib
Routing Tables: Public
Destinations : 11 Routes : 11
Destination/Mask Proto Pre Cost Flags NextHop Interface
11.1.1.0/24 RIP 100 2 D 40.1.1.1 GigabitEthernet0/0/0
11.1.1.0/25 RIP 100 2 D 40.1.1.1 GigabitEthernet0/0/0
20.1.1.0/24 RIP 100 1 D 40.1.1.1 GigabitEthernet0/0/0
30.1.1.0/24 RIP 100 1 D 40.1.1.1 GigabitEthernet0/0/0
40.1.1.0/24 Direct 0 0 D 40.1.1.4 GigabitEthernet0/0/0
40.1.1.4/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
40.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
//R4上接收到了公司分部A的11.1.1.0/24路由条目和新分部B的11.1.1.0/25路由条目,同样R1也会收到这两条路由条目。根据路由器转发数据的原理,在转发数据时路由器会根据最长匹配原则去匹配路由条目,即R4向分部A的终端PC1发送数据时,当数据包到达R1后,根据包头的目的IP地址与路由表中的路由条目进行匹配,发现11.1.1.0/25条目匹配更精确,这会使得数据包都根据这条路由条目进行转发,即将原本要发往PC1的数据包都错误地发往R3,造成总部与分部A异常通信。
//R4上测试与PC1间的连通信。
[R4]ping 11.1.1.1
PING 11.1.1.1: 56 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
Request time out
Request time out
— 11.1.1.1 ping statistics —
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss
//无法通信
//R4上使用 tracert 测试发往PC1的数据包所经过的网关。
[R4]tracert 11.1.1.1
traceroute to 11.1.1.1(11.1.1.1), max hops: 30 ,packet length: 40,press CTRL_C
to break
1 40.1.1.1 30 ms 20 ms 20 ms
2 30.1.1.3 40 ms 30 ms 10 ms
3 * * *
4 * * *
//观察到发往PC1的数据包已经错误地发往R3。
//为了能精确匹配掩码长度,仅过滤掉11.1.1.0/25这条新分部B的路由,可以在R1上配置前缀列表。
[R1]ip ip-prefix 1 deny 11.1.1.0 25 //仅过滤掉11.1.1.0/25这条新分部B的路由
[R1]ip ip-prefix 1 permit 0.0.0.0 0 less-equal 32 //放行其它路由,前缀列表也会有一条隐含的拒绝所有的规则,所以如果要放行其它所有路由的话,一定要显示增加一条允许所有的规则。
[R1]rip 1
[R1-rip-1]filter-policy ip-prefix 1 import //前缀列表应用到过滤策略下
//查看R1的路由表
[R1]dis ip routing-table
Route Flags: R - relay, D - download to fib
Routing Tables: Public
Destinations : 14 Routes : 14
Destination/Mask Proto Pre Cost Flags NextHop Interface
11.1.1.0/24 RIP 100 1 D 20.1.1.2 GigabitEthernet0/0/1
20.1.1.0/24 Direct 0 0 D 20.1.1.1 GigabitEthernet0/0/1
20.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
20.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
30.1.1.0/24 Direct 0 0 D 30.1.1.1 GigabitEthernet0/0/2
30.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
30.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
40.1.1.0/24 Direct 0 0 D 40.1.1.1 GigabitEthernet0/0/0
40.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
40.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
//可以看到R1路由表中仅存在11.1.1.0/24,测试R4 ping PC1的连通信
ping 11.1.1.1
PING 11.1.1.1: 56 data bytes, press CTRL_C to break
Request time out
Reply from 11.1.1.1: bytes=56 Sequence=2 ttl=126 time=70 ms
Reply from 11.1.1.1: bytes=56 Sequence=3 ttl=126 time=60 ms
Reply from 11.1.1.1: bytes=56 Sequence=4 ttl=126 time=90 ms
Reply from 11.1.1.1: bytes=56 Sequence=5 ttl=126 time=60 ms
— 11.1.1.1 ping statistics —
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 60/70/90 ms
//正常通信
//恢复新部分B的网络,重新规划IP地址,使用11.2.2.0/24网段。更改PC2的IP为11.2.2.1/24,R3的GE0/0/0接口IP为11.2.2.3/24。
[R3]int g 0/0/0
[R3-GigabitEthernet0/0/0]ip add 11.2.2.3 24
//查看R1的路由表
[R1]dis ip routing-table
Route Flags: R - relay, D - download to fib
Destinations : 15 Routes : 15
Destination/Mask Proto Pre Cost Flags NextHop Interface
11.1.1.0/24 RIP 100 1 D 20.1.1.2 GigabitEthernet0/0/1
11.2.2.0/24 RIP 100 1 D 30.1.1.3 GigabitEthernet0/0/2
…
//可以看到R1的路由表有去往分部A的路由条目,也有去往分部B的路由条目。ping 各分部之间的连通性。
ping 11.1.1.1
PING 11.1.1.1: 56 data bytes, press CTRL_C to break
Request time out
Reply from 11.1.1.1: bytes=56 Sequence=2 ttl=126 time=80 ms
Reply from 11.1.1.1: bytes=56 Sequence=3 ttl=126 time=80 ms
Reply from 11.1.1.1: bytes=56 Sequence=4 ttl=126 time=60 ms
Reply from 11.1.1.1: bytes=56 Sequence=5 ttl=126 time=60 ms
— 11.1.1.1 ping statistics —
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 60/70/80 ms
ping 11.2.2.1
PING 11.2.2.1: 56 data bytes, press CTRL_C to break
Request time out
Reply from 11.2.2.1: bytes=56 Sequence=2 ttl=126 time=80 ms
Reply from 11.2.2.1: bytes=56 Sequence=3 ttl=126 time=70 ms
Reply from 11.2.2.1: bytes=56 Sequence=4 ttl=126 time=70 ms
Reply from 11.2.2.1: bytes=56 Sequence=5 ttl=126 time=60 ms
— 11.2.2.1 ping statistics —
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 60/70/80 ms