🐕

【VITOTHON】quagga で RIP ルーティング

2023/07/20に公開

FreeBSD に jail を組み込んだアプライアンス VITOTHON[1][2] を使用して RIP の練習をします。まずは3つの RIP ルータを輪になるように繋げます。(nwdiag だと見づらい図になってしまいました)

簡単に描くと以下のようになります。(それぞれのルータに PC(server0x)が1台ずつ繋がっている状態です)

RIP ルータを輪に繋げる

rip01# conf t
rip01(config)# router rip
rip01(config-router)# version 2 // rip2 にします
rip01(config-router)# network 192.168.100.0/24 // rip01 - host 間ネットワーク(rip01 のみ必要です)
rip01(config-router)# network 10.0.1.0/24      // rip01 - rip02 間ネットワーク
rip01(config-router)# network 10.0.3.0/24      // rip01 - rip03 間ネットワーク
rip01(config-router)# network 1.0.0.0/24       // rip01 - server01 間ネットワーク
rip01(config-router)# end
rip01# write mem

// 確認
rip01# sh ru
Building configuration...
...
router rip
 version 2
 network 1.0.0.0/24
 network 10.0.1.0/24
 network 10.0.3.0/24
 network 192.168.100.0/24
!

上記の rip01 を参考に、残りの rip02, rip03 を設定してください。全ての設定が終わった後に、rip01 でルーティングテーブルを確認します。

rip01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
       > - selected route, * - FIB route

C>* 1.0.0.0/24 is directly connected, epair5b
R>* 2.0.0.0/24 [120/2] via 10.0.1.2, epair2a, 00:37:36
R>* 3.0.0.0/24 [120/2] via 10.0.3.1, epair4b, 00:37:35
C>* 10.0.1.0/24 is directly connected, epair2a
R>* 10.0.2.0/24 [120/2] via 10.0.1.2, epair2a, 00:37:36
C>* 10.0.3.0/24 is directly connected, epair4b
C>* 127.0.0.0/24 is directly connected, lo0
C>* 192.168.100.0/24 is directly connected, epair1a
// 上から 6 個までが表示されていれば OK

server01 から server02 に対して ping を送って疎通確認をします。

[root@vitothon /jails/bin/test]# jexec server01 /bin/sh
# netstat -nr // まず default route が設定されているか確認してください
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            1.0.0.254          UGS     epair5a
1.0.0.0/24         link#2             U       epair5a
1.0.0.1            link#2             UHS         lo0
127.0.0.1          link#1             UH          lo0

# ping 10.0.2.1
PING 10.0.2.1 (10.0.2.1): 56 data bytes
64 bytes from 10.0.2.1: icmp_seq=0 ttl=63 time=0.070 ms
64 bytes from 10.0.2.1: icmp_seq=1 ttl=63 time=0.073 ms
^C

無事に疎通できました。

経路広告

下の図のようにルータを1台(rip04)追加した場合を考えてみます。rip04rip03 とは直接接続していますが、rip01, rip02 とは直接接続していません。そのため、何もしなければ rip04 は直接接続していない rip01rip02 の情報を取得できません。そこで必要になることが経路広告です。各自ルータが自身の知っている経路情報を広告することでネットワーク全体に経路情報を伝えることができます。

RIP で直接接続している情報を経路広告する場合は以下のように行います。

rip03(config-router)# redistribute connected 

ただし、quagga では、直接接続された経路情報はデフォルトで広告されるようです[3]

スプリットホライズン

スプリットホライズンの概要については、他の記事[4]を参考にしてください。quagga では、インターフェース単位でスプリットホライズンの設定をすることができます。(quagga では、デフォルトでスプリットホライズンが有効になっています。)

rip03# conf t
rip03(config)# interface epair5b
rip03(config-if)# ip rip split-horizon 

(quagga では、ポイズンリバース[5] はサポートしてないっぽいです。)

脚注
  1. http://www.fikastudio.net/VITOTHON.ova ↩︎

  2. https://github.com/FikaStudio-code/VITOTHON ↩︎

  3. https://www.nongnu.org/quagga/docs/quagga.html#How-to-Announce-RIP-route ↩︎

  4. https://www.itbook.info/study/split.html ↩︎

  5. https://www.infraexpert.com/study/distancevector3.html ↩︎

Discussion