Routing Information Protocol (RIP) 路由信息协定

前言

Routing Information Protocol (RIP) 是属於 Distance Vector 的 Routing Protocol,设定简单,适合初学者轻松体验 Routing 的乐趣 : ),RIP 有 Version 1 及 Version 2 两个 Version,Version 1 已过时,考试都不考了,所以本篇文章只会集中於 Version 2 的设定。

Network 指令

现在使用以下网络学习 RIP 的设定,RIP 设定非常简单,不外乎一个 Network 指令。

rip

hostname R1
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
!
router rip
 version 2
 network 192.168.12.0
hostname R2
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
!
router rip
 version 2
 network 192.168.12.0
 network 192.168.23.0
hostname R3
!
interface Ethernet0/0
 ip address 192.168.23.3 255.255.255.0
!
router rip
 version 2
 network 192.168.23.0

Network 指令是用来宣告那个网络会参与 RIP,所谓参与,就表示该网络所在的 Interface 要发放 RIP 封包,封包内包括了该 Router 参与的网络资讯。举例:R1 属於 192.168.12.0 网络的 Interface 会参与发放 RIP 封包,即 Eth0/0 会发放 RIP 封包,RIP 封包里面有什麽?就是告诉 R2 知道从 R1 这里可以到达 192.168.12.0 这个网络。至於 Version 2 则是把 RIP 设定为 Version 2,预设是 Version 1 ,所以如果不用这个指令,RIP 便会使用 Version 1。

Unicast 与 Broadcast

使用 Network 指令後 RIP 会用 Multicast Address 224.0.0.9 来交换 Route 资讯,如果网络不支缓 Multicast 的话,可以改用 Unicast 传送。方法是加入 Neighbor 指令并输入对方的 Unicast IP Address。举例:

rip

R1#sh run | s rip
router rip
 version 2
 network 192.168.12.0
 neighbor 192.168.12.2
R2#sh run | s rip
router rip
 version 2
 network 192.168.12.0
 neighbor 192.168.12.1

相反,RIP 也支缓 Broadcast 传播,只要在 Interface 下指令 ip rip v2-broadcast 便可以。(只支缓 Version 2)

 R1(config)#interface Ethernet1/0
 R1(config-if)#ip rip v2-broadcast
 R2(config)#interface Ethernet1/0
 R1(config-if)#ip rip v2-broadcast

Passive Interface

在实际环境中,并不是所有 Router 都需要参与 RIP,如果我们知道相邻的 Router 不参与 RIP,就不用发出 RIP 封包了。以下面的网络为例,R3 只想在 10.0.23.0 / 24 执行 RIP,而不想在 10.0.34.0 / 24 执行。

rip

由於使用 network 10.0.0.0 会让两个 Interface 都被执行 RIP,所以我们要加一道 passive-interface <interface> 指令让 Ethernet0/1 不执行 RIP。

hostname R3
!
router rip
 version 2
 passive-interface Ethernet0/1
 network 10.0.0.0

另一个方法是先让所有 Interface passive,然後再 no 掉要执行的 Interface。

hostname R3
!
router rip
 version 2
 passive-interface default
 no passive-interface Ethernet0/0
 network 10.0.0.0

Authentication

RIP 支援密码认证,传送 Routing 更新时可以检查密码,两只 Router 密码相同才可进行 Routing 交换。设密码有两个步骤,首先在两只 Router 分别设定 Key Chain。

R1(config)# key chain MyChain
R1(config-keychain)# key 1
R1(config-keychain-key)# key-string MyPassword
R2(config)# key chain MyChain
R2(config-keychain)# key 1
R2(config-keychain-key)# key-string MyPassword

第二步是在 Interface 设定 Key Chain 和 encryption 方法,可选 Text 或 MD5,当然用 MD5 较安全。

R1(config)# interface ethernet 0/0
R1(config-if)# ip rip authentication key-chain MyChain
R1(config-if)# ip rip authentication mode md5
R2(config)# interface ethernet 0/1
R2(config-if)# ip rip authentication key-chain MyChain
R2(config-if)# ip rip authentication mode md5

Metric

RIP 的 Metric 是很单纯地用 Hop Count 来计算的,Hop Count 即是要跳过多少个 Hop 才到达目的地,Hop Count 最大为 15,16 或以上会被视为 Unreachable (无法到达)。用以下网络作解说。

rip

在 R1 看看 Route Table,由 R1 到 192.168.24.0 / 24 要经过 1 Hop,所以 Metric 为 1。由 R1 到 192.168.34.0 / 24 也经过 1 Hop,所以 Metric 也是 1。而 R1 到达 192.168.45.0 / 24,则要经过 2 Hop,因此 Metric 是 2。值得一提的是,到达 192.168.45.0 / 24 由於有两条 Metric 相同的路径,所以会进行 Load Balance,要到目的地的 Packet 会 Round Robin 地派送到 R2 和 R3。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
C    192.168.13.0/24 is directly connected, Ethernet0/1
R    192.168.45.0/24 [120/2] via 192.168.13.3, 00:00:19, Ethernet0/1
                     [120/2] via 192.168.12.2, 00:00:16, Ethernet0/0
R    192.168.24.0/24 [120/1] via 192.168.12.2, 00:00:16, Ethernet0/0
R    192.168.34.0/24 [120/1] via 192.168.13.3, 00:00:19, Ethernet0/1

由於 RIP 的 Metric 并非由 Bandwidth 计算出来,因此不能藉由更改 Bandwidth 来改变 Metric。这时就要使用 Offset 来进行手动修改 Metric。假设我们修改由 R4 把它宣告的 192.168.45.0 / 24 这条 Route 的 Metric。

第一步是要写一条 Acess List,必需使用 Standard Access List (1-99)。

R4(config)#access-list 1 permit 192.168.45.0

然後在 Router RIP 之下设定 offset,整句指令的意思是:把附合 access list 1 而离开 R4 宣告给其他 Router 的 Route,宣告时把 Metrc 增加 5。

R4(config-router)#offset-list 1 out 5

於是在 R2 和 R3 应该看到 Metric 由原本的 1 变成 6 了。

R2#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
R    192.168.13.0/24 [120/1] via 192.168.12.1, 00:00:11, Ethernet0/0
R    192.168.45.0/24 [120/6] via 192.168.24.4, 00:00:12, Ethernet0/1
C    192.168.24.0/24 is directly connected, Ethernet0/1
R    192.168.34.0/24 [120/1] via 192.168.24.4, 00:00:12, Ethernet0/1

而在 R1 看 192.168.45.0/24 的 Metric 则变成 7。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
C    192.168.13.0/24 is directly connected, Ethernet0/1
R    192.168.45.0/24 [120/7] via 192.168.13.3, 00:00:19, Ethernet0/1
                     [120/7] via 192.168.12.2, 00:00:16, Ethernet0/0
R    192.168.24.0/24 [120/1] via 192.168.12.2, 00:00:16, Ethernet0/0
R    192.168.34.0/24 [120/1] via 192.168.13.3, 00:00:19, Ethernet0/1

Timer

RIP 一共有 4 个 Timer,分别是 Update Timer丶Invalid Timer丶Hold-down Timer 及 Flush Timer。

Update Timer

这个比较简单,就是 Router 隔多久才传送一次 Route Update,预设是 30 秒。

Invalid Timer

当过了 3 分钟 (Invalid Timer) 都没有再收到某条 Route 的更新,Router 就会把该条 Route 变成 Invalid 状态,Route 的 Metric 变成 16,并且继续向其他 Router 发放,这样做是因为它希望其他 Router 都知道这条 Route 出了问题。Invalid Timer 预设是 180 秒。

Hold-down Timer

如出现以下三个情况其中之一,RIP 会把一条 Route 设成 Hold-down 状态:

  1. Invalid Timer 倒数到 0
  2. 收到其他 Router 宣告这条 Route 的 Metric 是 16 (无法到达)
  3. 这条 Route 的 Metric 变大了

进入 Hold-down 状态的 Route 不会再接受任何更新,这是希望 Route 进入一个「冷静」的状态,不希望 Route 的 Metric 不断被改变,增加稳定性。Hold-down Timer 预设为 180 秒。

Flush Timer

当没有再收到某条 Route 的更新,Flush Timer 便会开始倒数。当 Flush Timer 倒数至 0,这条 Route 就会被移除,Flush Timer 预设为 240 秒。留意 Flush Timer 是和 Invalid Timer 同时开始倒数的,即是说当 Invalid Timer 倒数至 0 秒,Flush Timer 就倒数至 60 秒,再过 60 秒,这条 Route 才会被移除。

如果想更改 RIP 的 Timer,可以用 timers basic <update> <invalid> <hold-down> <flush> 指令。

R1(config)# router rip
R1(config-router)# timers basic 10 60 60 80

如果真的要更改 Timer,请确保每一只 Router 的 Timer 都相同,否则会造成不稳定的问题。

Summarization

随着网络规模不断增加,Route 的数目亦会不断增加, Summarization 可把 Route 组合,以减少 Route 的数量,从而减低消耗 Router 的 CPU丶记忆体及频宽。用以下网络为例,先把全部 Router 的 auto-summary 关掉

rip

观察 R4 的 Route Table,R3 把 10.1.1.0 和 10.1.2.0 两个网段分别传给 R4,因此 R4 的 Route Table 中有两条不同的 Route。

R4#show ip route | begin Gateway
Gateway of last resort is not set

     10.0.0.0/24 is subnetted, 2 subnets
R       10.1.2.0 [120/1] via 192.168.34.3, 00:00:14, Ethernet0/0
R       10.1.1.0 [120/1] via 192.168.34.3, 00:00:14, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

然後我们尝试在 R3 的 Interface Ethernet 0/2 下一个 Summary 指令。

R3(config-if)#ip summary-address rip 10.1.0.0 255.255.0.0

再到 R4 看看 Route Table,发现多了一条 Summary Route 10.1.0.0/16,至於原本的 10.1.1.0/24 和 10.1.2.0/24 就要等待 Flush Timer 数完才会被移除。

R4#show ip route | begin Gateway
Gateway of last resort is not set

     10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
R       10.1.2.0/24 [120/1] via 192.168.34.3, 00:01:24, Ethernet0/0
R       10.1.1.0/24 [120/1] via 192.168.34.3, 00:01:24, Ethernet0/0
R       10.1.0.0/16 [120/1] via 192.168.34.3, 00:00:27, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

那麽 Auto-summary 又跟刚才的 Summary 指令有什麽分别呢?试试看。

R3(config-if)#no ip summary-address rip 10.1.0.0 255.255.0.0
R3(config-if)#router rip
R3(config-router)#auto-summary

原来 Auto-summary 会使用预设的 Subnet Mask,Class A IP 就用 /8丶Class B IP 就用 /16,而 Class C 就会用 /24,所以在 R4 会多了一条 10.0.0.0/8,至於 /16 那条亦要等到 Flush Timer 数完才会被移除。

R4#show ip route | begin Gateway
Gateway of last resort is not set

     10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
R       10.0.0.0/8 [120/1] via 192.168.34.3, 00:00:09, Ethernet0/0
R       10.1.0.0/16 [120/1] via 192.168.34.3, 00:00:38, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

Default-information Originate

Router 可以透过 RIP 发布 Default Route,用以下网络为例子,假设 R2 想发布 Default Route 给 R1 及 R3,只需使用以下指令。

rip

R2(config)#router rip
R2(config-router)#default-information originate

然後,在 R1 和 R3 已经可以看到 default route 了。

R1#show ip route rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.12.2 to network 0.0.0.0

R*    0.0.0.0/0 [120/1] via 192.168.12.2, 00:00:09, Ethernet1/0
R     192.168.23.0/24 [120/1] via 192.168.12.2, 00:00:09, Ethernet1/0
R3#show ip route rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.23.2 to network 0.0.0.0

R*    0.0.0.0/0 [120/1] via 192.168.23.2, 00:00:02, Ethernet1/0
      1.0.0.0/32 is subnetted, 1 subnets
R        1.1.1.1 [120/2] via 192.168.23.2, 00:00:02, Ethernet1/0
R     192.168.12.0/24 [120/1] via 192.168.23.2, 00:00:02, Ethernet1/0

但如果我们想 RIP 只在某些 Interface 发布 Default Route 而非全部,可以在指令後面加上 Route Map,例如 R2 只向 e1/1 发 Default Route,指令如下:

R2(config-router)#default-information originate route-map TO_R3_ONLY
R2(config-router)#exit
R2(config)#route-map TO_R3_ONLY
R2(config-route-map)#set interface ethernet 1/1

再做一个进阶设定,R2 现时收到 R1 传来的 1.1.1.1/32 (R1 的 Loopback0),现在想 R2 在收到这条 Route 才发布 Default Route,否则不发布,可以在刚才的 Route Map 加入以下设定:

R2(config)#route-map TO_R3_ONLY
R2(config-route-map)#match ip address prefix-list CHECKING
R2(config)#ip prefix-list CHECKING permit 1.1.1.1/32

测试一下,如果在 R1 把 Loopback0 关掉,R2 的 1.1.1.1/32 就消失了。

R1(config)#int loopback0
R1(config-if)#shutdown
R2#show ip route rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

R2#

现在 R2 不会发布 Default Route 到 R3。

R3#show ip route rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

R     192.168.12.0/24 [120/1] via 192.168.23.2, 00:00:12, Ethernet1/0

Route Filtering

Route Filtering 的意思是限制 RIP Router 只发布某些 Route,也可控制接收方选择接受那些 Route。而设定方式主要有 Distribute-list丶Distance 和 Offset-list 3 种。先设定好以下网络,R1丶R2 和 R3 透过 192.168.123.0/24 来收发 RIP,R1 和 R2 会把 L0 和 L1 发布出去。

rip

Distribute-list

先在 Global Configure Mode 设定 Standard Access List丶Extended Access List 或 Prefix List,然後放进 RIP 的 Distribute-list 便可做到 Route Filtering。先用 Standard Access List 做例子,在 R1 禁止发布 1.1.1.1/32 的设定如下。

R1(config)#router rip
R1(config-router)#distribute-list FILTER_STD out
R1(config-router)#exit
R1(config)#ip access-list standard FILTER_STD
R1(config-std-nacl)#deny 1.1.1.1
R1(config-std-nacl)#permit any

等待 1.1.1.1/32 在 R3 被 flush 後,R3 便不会再见到 1.1.1.1/32 这条 Route 了。

R3#show ip route rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
R        2.2.2.2 [120/1] via 192.168.123.2, 00:00:11, Ethernet1/0
      3.0.0.0/32 is subnetted, 1 subnets
R        3.3.3.3 [120/1] via 192.168.123.2, 00:00:11, Ethernet1/0
                 [120/1] via 192.168.123.1, 00:00:11, Ethernet1/0

如果使用 Extended Access List 的话,可以把 Route Source 加进去,做一些较仔细的设定。例如,R3 现在不接受来自 R2 (192.168.123.2) 的 3.3.3.3/32,但来自 R1 的 3.3.3.3/32 则保留。设定如下。

R3(config)#access-list 100 deny ip host 192.168.123.2 host 3.3.3.3
R3(config)#access-list 100 permit ip any any
R3(config)#router rip
R3(config-router)#distribute-list 100 in

待 Flush Timer 数完,来自 R2 的 3.3.3.3/32 消失了,只剩下来自 R1 的 3.3.3.3/32。

R3#show ip ro rip
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
R        2.2.2.2 [120/1] via 192.168.123.2, 00:00:14, Ethernet1/0
      3.0.0.0/32 is subnetted, 1 subnets
R        3.3.3.3 [120/1] via 192.168.123.2, 00:02:33, Ethernet1/0
                 [120/1] via 192.168.123.1, 00:00:03, Ethernet1/0

如果用 Prefix List,做法相若,例如想把 3.3.3.3/32 挡掉,Prefix List 设定如下。留意 0.0.0.0/0 le 32 代表所有网络,即 Access List 里的 any)。

R3(config)#ip prefix-list FILTER seq 5 deny 3.3.3.3/32
R3(config)#ip prefix-list FILTER seq 10 permit 0.0.0.0/0 le 32

Administrative Distance

由於 Router 并不会把 Administrative Distance 等於 255 的 Route 加进 Route Table,我们可以利用这特性,把某些 Route 的 AD 设成 255 从而达成 Filtering 效果。现在试把从 R2 来的 2.2.2.2/32 的 AD 设成 255。

R3(config)#ip access-list standard DIST_255
R3(config-std-nacl)#permit 2.2.2.2
R3(config-std-nacl)#exit
R3(config)#router rip
R3(config-router)#distance 255 192.168.123.2 0.0.0.0 DIST_255

Offset-list

最後一个方法是 Offset-list,上面提过,RIP 的 Metric (Hop Count) 如果是 16 或以上会被视为 Unreachable,所以只要在 Offset-list 把某 Route 的 Metric 设为 16,也可做到 Filtering 效果。Offset-list 设定在上面提过了,不在此重覆。

相關主題

发表回复

2021-07-22

Posted In: Layer 3 网络技术

Leave a Comment