メインコンテンツへスキップ

【SRへの道4】OSPFを動かしてみる

    トップページはこちら

    前回までに行ったこと


    前回までは勉強ネットワーク①を作成してアドレス振りまで行いました。
    作ったネットワークはこちらになります。

    画像

    OSPFを実装してみよう

    さて、これからルーティングプロトコルを動かしていきます。
    今回の目標はOSPFをISP-Aのなかで動かしてみることです。
    基本的にOSPFの具体的な説明や詳しい動作の仕方などの解説はここでは致しません。頭でっかちになるのではなく、まず動くものを作るという理念のもと進めていきます。

    お題

    画像

    条件
    ・ISP-AにはOSPFを動かすこと
    ・今回はこれら以外の接続は無視すること

    先に決めておく事柄

    OSPFを動作させるといっても先に決めておかなければいけない数値がいくつかあります。それを先に決めておいて、コンフィグに進みます。

    ・Area番号
    大規模なネットワークになったときにOSPFは処理が膨大になってしまうので
    ネットワークをエリアという論理的な単位に分けて運用管理できる仕組みが備わっている。今回は比較的小さくまとまっているのでISP-Aの中はすべて同一エリア0とする。
    Area番号: 0

    ・OSPFプロセス番号
    こちらはOSPFをルーター上で動かす際につける番号で正の整数で特にこだわる必要はありません。今回はISP-Aの中はプロセス番号1で設定します。
    OSPFプロセス番号: 1


    実際にコンフィグしてみる

    さて、事前に決めておく事柄も完了したので実際にコンフィグしていきたいと思います。

    画像

    まずはそれぞれの機器にOSPFを動かすよという設定を入れます。

    XE-A1(config)#router ospf 1 <<プロセス番号

    これを行うとospf 1の設定の中に入ります。
    次にこちらの設定の中で相手に伝えたいアドレス体系をnetworkコマンドで指定してあげます。
    XE-A1のルーターに接続されているネットワークは10.0.13.0, 10.0.15.0, 10.0.12.0なのですが、ワイルドカードマスクを指定してあげればまとめて広告させてあげる設定もできます。

    XE-A1(config-router)#network 10.0.0.0 0.0.255.255 area 0

    ワイルドカードマスクによって第三オクテット、第四オクテットがなんでもよいよというコマンドです。これでOSPFネイバー通し10.0.xx.xのアドレスをやりとりしてくれるようになります。networkコマンドの最後にはエリア番号を指定してあげる必要があります。

    もう一つ伝えてあげなければいけないアドレスがありました。Loopback0アドレスです。こちらも伝えてあげなければ対向の機器は自分のLoopback0アドレスに向けて疎通が取れません。なのでこちらもnetworkコマンドで伝えることにしてあげます。

    XE-A1(config-router)#network 172.16.1.1 0.0.0.0 area 0

    ip アドレスの設定とは違い、ワイルドカードマスクは共通する部分が0で表現するのでちょっとややこしいですね。Loopback0アドレスは/32なのでアドレスが第四オクテットまで全く同じであると指定してあげるのでワイルドカードマスクは0.0.0.0になります。
    こうすることでXE-A1が持っている10.0.xx.xのアドレスと自身Loopback0のアドレスをネイバーに伝える設定ができました。

    今回の構成ではISP-Aの中の隣接するすべての機器をOSPFネイバーとして設定するので、ほかの機器も同じようにrouter ospfのコマンドとnetworkコマンドで設定してあげます。これだけで動いてしまうのです。

    XE-A2(config)#router ospf 1
    XE-A2(config-router)#network 10.0.0.0 0.0.255.255 area 0
    XE-A2(config-router)#network 172.16.1.2 0.0.0.0 area 0
    XE-A3(config)#router ospf 1
    XE-A3(config-router)#network 10.0.0.0 0.0.255.255 area 0
    XE-A3(config-router)#network 172.16.1.3 0.0.0.0 area 0
    XE-A4(config)#router ospf 1
    XE-A4(config-router)#network 10.0.0.0 0.0.255.255 area 0
    XE-A4(config-router)#network 172.16.1.4 0.0.0.0 area 0
    XE-A5(config)#router ospf 1
    XE-A5(config-router)#network 10.0.0.0 0.0.255.255 area 0
    XE-A5(config-router)#network 172.16.1.5 0.0.0.0 area 0


    設定ができているか確認してみる

    こちらコマンドにてネイバーが張れているか、アドレスをOSPF経由で学習できているかを確認します。

    XE-A1#show ip ospf neighbor
    
    Neighbor ID     Pri   State           Dead Time   Address         Interface
    172.16.1.3        0   FULL/  -        00:00:38    10.0.13.3       GigabitEthernet4
    172.16.1.2        0   FULL/  -        00:00:32    10.0.12.2       GigabitEthernet3
    172.16.1.5        0   FULL/  -        00:00:31    10.0.15.5       GigabitEthernet2
    XE-A1#show ip route ospf
    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, m - OMP
           n - NAT, Ni - NAT inside, No - NAT outside, Nd - NAT DIA
           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
           H - NHRP, G - NHRP registered, g - NHRP registration summary
           o - ODR, P - periodic downloaded static route, l - LISP
           a - application route
           + - replicated route, % - next hop override, p - overrides from PfR
           & - replicated local route overrides by connected
    
    Gateway of last resort is not set
    
          10.0.0.0/8 is variably subnetted, 15 subnets, 2 masks
    O        10.0.24.0/24 [110/2] via 10.0.12.2, 1d06h, GigabitEthernet3
    O        10.0.25.0/24 [110/2] via 10.0.15.5, 1d05h, GigabitEthernet2
    O        10.0.34.0/24 [110/2] via 10.0.13.3, 1d06h, GigabitEthernet4
    O        10.0.35.0/24 [110/2] via 10.0.15.5, 1d05h, GigabitEthernet2
    O        10.0.45.0/24 [110/3] via 10.0.15.5, 1d05h, GigabitEthernet2
          172.16.0.0/32 is subnetted, 12 subnets
    O        172.16.1.2 [110/1] via 10.0.12.2, 1d06h, GigabitEthernet3
    O        172.16.1.3 [110/1] via 10.0.13.3, 1d06h, GigabitEthernet4
    O        172.16.1.4 [110/2] via 172.16.1.4, 22:13:12, Tunnel0
    O        172.16.1.5 [110/1] via 10.0.15.5, 1d05h, GigabitEthernet2



    追加でしなければいけないOSPF設定

    動くことは確認できたのですが、追加で設定しておいた方が良いものもあります。

    routeIDをそれぞれの機器に設定する

    router IDはその名前の通りOSPFの中でどのルーターなのかを識別する値です。ciscoルーターではルーターに割り当てられている一番大きいIPアドレスが自動的に設定されるのですが、こちらはループバックアドレスを定義するのが一般的なので各機器に設定してあげます。

    XE-A1(config)#router ospf 1
    XE-A1(config-router)#router-id 172.16.1.1

    loopbackにはpassive-interfaceを打つ

    あるインターフェースでそのインターフェースが持っているアドレスはOSPFで広告したいのだけれどもOSPF自体は動かしたくない場合があります。今回の場合だとLoopbackがそのインターフェースに値していまして、Loopbackの先には実際機器がありません。これを設定しなくても問題はないのですが、明示的にコンフィグを入れておくのだそう。

    XE-A1(config)#router ospf 1
    XE-A1(config-router)#passive-interface Loopback 0

    OSPF ネットワークタイプの設定を入れる

    OSPFではLayer2の種類によりネットワークのタイプを定義してあげなければいけないようです。ネットワークタイプにはいくつかの種類があります。
    ・ブロードキャストマルチアクセス
    ・ポイントツーポイント
    ・NBMA (Non Broadcast Multi Access)
    今回の構成ではOSPFを動作させる環境ではDR/BDRの選出が行われず、ルーター間で必ずアジャセンシー関係になるため、「ポイントツーポイント」を設定します。

    XE-A1(config)#interface Gi2
    XE-A1(config-if)#ip ospf network point-to-point
    .
    .
    .

    ※OSPFが動作するすべてのインターフェースでこの設定を入れます

    pingで疎通確認!


    これで各機器のループバックアドレスを含むアドレスをOSPFを使ってダイナミックルーティングできるようになったのでpingとtracerouteを使って確認してみます。

    XE-A1#ping 172.16.1.4
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 172.16.1.4, timeout is 2 seconds:
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/4 ms
    XE-A1#traceroute 172.16.1.2
    Type escape sequence to abort.
    Tracing the route to 172.16.1.2
    VRF info: (vrf in name/id, vrf out name/id)
      1 10.0.12.2 4 msec 2 msec *

    よかった。ひとまずこれでOSPFを動かすまでできるようになりました!

    OSPFで複数経路を一本にする

    OSPFが動くことが確認できたのでXE-A1からXE-A4のLoopbackアドレスに向けてpingが飛ぶことが確認できたのですが、現在XE-A1からXE-A4に向かうルートは3種類あります。XE-A3を通るルート、XE-A2を通るルート、XE-A5を通るルートです。

    画像

    現在は特に優先度の設定はしていないのでどのルートを使ってもいいからXE-A4にpingを通すようになっています。これをイコールコストマルチパスと言って、コストが同じ場合は複数の経路を選択できるということです。
    これをわかりやすいように対角線側に行く際は必ずXE-A5を通るように設定してみます。
    OSPFではコストというもので経路の優先度を設定できます。
    こちら設定をしていなければデフォルトで
    100Mbps / インターフェースの速度(bps)
    の値が設定されます。現在の環境ではすべて1が設定されていました。

    このコストはインターフェースごとに設定する値で、そのインターフェースを通ると設定したコストが加算され、宛先につくまでに一番小さなコストとなるルートが最短ルートとして設定されます。
    なのでXE-A1からXE-A4に向けてのルートはXE-A5を必ず通ってほしいので、XE-A1のインターフェースGi2にコスト20を設定するとします。別のインターフェースにはGi2よりも高いコストにしなければGi2のルートを通ってくれないので30に設定します。

    XE-A1(config)#interface Gi2
    XE-A1(config-if)#ip ospf cost 20
    
    XE-A1(config)#interface Gi3
    XE-A1(config-if)#ip ospf cost 30
    
    XE-A1(config)#interface Gi4
    XE-A1(config-if)#ip ospf cost 30

    こうすることによってXE-A1からXE-4に向かうルートはGi2から送出してくれることになります。

    もちろん、これだけの設定だけではいけません。最終的な宛先に向かうまで通るインターフェースのコストの合計値が一番小さなルートが選択されるので、XE-A1のインターフェースだけではなくXE-A2 ~ A5までのすべてのインターフェースで適切なコストを設定してあげなければなりません。

    XE-A2, XE-A3, XE-A4ではXE-A1と同じように、XE-A5につながっているインターフェースにはコスト20を、それ以外のインターフェースには30を設定します。
    中央にあるXE-A5ではすべてのインターフェースにコスト20を設定します。

    そうすることによってXE-A1からXE-A4のLoopbackに向かうためのルートは
    ・Gi2からXE-A5を通って向かうコストは合計で
    20(XE-A1 int Gi2のコスト) + 20(XE-A5 int gi5のコスト) = 40
    ・Gi3からXE-A2を通って向かうコストは合計で
    30(XE-A1 int Gi3のコスト) + 30(XE-A2 int gi4のコスト) = 60
    ・Gi4からXE-A3を通って向かうコストは合計で
    30(XE-A1 int Gi4のコスト) + 30(XE-A3 int gi4のコスト) = 60

    このようになるため、最小コストのGi2からXE-A5を通って向かうルートを優先的に通るようになります。
    こちらはtracerouteで確認することができます。

    XE-A1#traceroute 172.16.1.4
    Type escape sequence to abort.
    Tracing the route to 172.16.2.1
    VRF info: (vrf in name/id, vrf out name/id)
      1 10.0.15.5 1 msec 2 msec 1 msec
      2 10.0.45.4 3 msec 6 msec * 


    あなたへのおすすめ