OSPF【OSPFの設定】

CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。


前回投稿記事
-
こちらの[「OSPF【OSPFの概要】」](https://qiita.com/k-yasuhiro/items/59d064b4dcca5beb6220)投稿記事の続きです。
<br>

2.OSPFの設定と確認
-

#### 2-1.OSPFの設定

##### ■2-1-1.ワイルドカードマスク
OSPFでは、動作を有効にしたいインターフェイスを指定する際に <font color="Red"><b>ワイルドカードマスク</b></font>という
ものを使用します。ワイルドカードマスクは、直前に指定されたセットとなっているIPアドレスの
どこまでを比較の対象とするのかを指定する為に使用されます。
直前に指定されたIPアドレスのうち、<b>条件とする部分を 0、任意の値で良い部分を 1</b>で
指定します。


具体的に確認してみましょう。

例えば「172.16.1.0/24」のネットワークに属するインターフェイスでOSPFの動作を有効に
したい場合、172.16.1.0/24のネットワーク内に属するIPアドレスは、172.16.1.0〜172.16.1.255
ですので、最初の3オクテットの 172.16.1が条件とする部分で、最後の1オクテットは任意である
IPアドレスとなります。
ワイルドカードマスクは、IPアドレスのうち、条件とする部分を 0、任意の値で良い部分を 1とする為、
ワイルドカードマスクは、<font color="Red">「0.0.0.255」</font>となります。よって、IPアドレスとワイルドカードマスクは、<font color="Green">「172.16.1.0 0.0.0.255」</font>と指定します。

<br>
##### ■2-1-2.OSPFの有効化
ダイナミックルーティングを行うには、ルータでOSPFを有効化する必要があります。
OSPFを有効化するには、<b>グローバルコンフィギューレションモード</b>で 次の<font color="Red"><b>router ospfコマンド</b></font>
を実行します。

```
(config)# router ospf <プロセスID>
```
OSPFは1台のルータで、複数のOSPFプロセスを起動することができます。
その際に他のプロセス区別する為にプロセスIDを指定する必要があります。
プロセスIDは、<font color="Green">1 ~ 65,535の値</font>を指定可能です。

このプロセスIDはローカルルータのみで使用する値であるため、ネイバールータとプロセスIDを
一致させる必要はなく、範囲内のいずれかの値を指定しておけば問題ありませんが、
分かりやすい設計/管理という観点でネイバールータとプロセスIDは同じの方が望ましいです。

コマンドを実行すると<b>ルータコンフィギューレションモード</b>に移行し、
プロンプトが「(config-router)#」となります。

<br>
##### ■2-1-3.インターフェイスの指定
インターフェイスでOSPFを有効にするには、<b>ルータコンフィギューレションモード</b>で
次の <font color="Red"><b>networkコマンド</b></font>を実行します。

```
(config-router)# network < IPアドレス > < ワイルドカードマスク > area < エリアID >
```
>
＜エリアID＞には、有効にするインターフェイスが所属するエリア番号を指定します。

インターフェイスでOSPFを有効にすると、Helloパケットを送信し始めます。また、
そのインターフェイスに関する LSAを通知します。
<br>
また、IOSのバージョンによっては、<b>インターフェイスコンフィギューレションモード</b>で
次の <font color="Red"><b>ip ospf areaコマンド</b></font>を実行する事で有効にする事も出来ます。

```
(config-if)# ip ospf < プロセスID > area < エリアID >
```
>
このコマンドではインターフェイス事にOSPFを有効にする事が出来ます。
＜プロセスID＞は、どのプロセスを起動させるかを指定します。

※ IPアドレスを「0.0.0.0」、ワイルドカードマスクを「255.255.255.255」にすると
IPアドレスとしてどのような値でもかまわないという意味になり、全てのインターフェイスで、
OSPFが有効になります。


<br>
##### ■2-1-4.パッシブインターフェイスの設定
パッシブインターフェイスの設定をする事で、OSPFを動作させる必要があるものの
Helloパケットがを送信する必要がないインターフェイスから、Helloパケットが送信されなく
なります。

パッシブインターフェイスの設定するには、<b>ルータコンフィギューレションモード</b>で、
次の <font color="Red"><b>passive-interfaceコマンド</b></font>を実行します。

```
(config-router)# passive-interface < インターフェイス >
```

<br>
##### ■2-1-5.ルータIDの指定
OSPFでは、各ルータを識別する為にルータIDが必要になります。
ルータIDは設定しなくても、IPアドレスが設定されていればそこから自動で設定します。
しかし、手動で設定したい場合は、<b>ルータコンフィギューレションモード</b>で、
次の <font color="Red"><b>router-idコマンド</b></font>を実行します。

```
(config-router)# router-id < ルータID >
```
＜ルータID＞には、32ビットの値をIPアドレスと同じ形式で指定します。

また、<font color="Green"><b>手動で設定していない場合は、ループバックインターフェイス、物理インターフェイスの順<b></font>で、
IPアドレスから設定されます。
ループバックインターフェイスの作成は、<b>グローバルコンフィギューレションモード</b>で、
次の <font color="Red"><b>interface Loopback<b>コマンド</b></font>を実行します。

```
(config)# interface Loopback <番号>
```
＜番号＞には、0 ~ 2,147,483,647の値を指定します。作成したインターフェイスには、
IPアドレスを設定します。
<br>

またルータID設定した後、再度設定変更するには、
router-idコマンドで再設定した後、<font color="Red"><b>再起動</b></font>する必要があります。
再起動のコマンドは、<b>特権EXCEモード</b>で、次の <font color="Red"><b>clear ip ospf processコマンド</b></font>を
実行します。

```
# clear ip ospf process
```



<br>
##### ■2-1-5.OSPFの設定の流れ

```
(config)# interface Loopback 0                           // ループバックインターフェイスの作成
(config-if)# ip address 10.10.10.1 255.255.255.255       // IPアドレスの設定
(config-if)# exit
(config)# router ospf 10
(config-router)# network 192.168.100.0 0.0.0.255 area 0  //インターフェイスでOSPFの有効化
(config-router)# network 172.16.10.1 0.0.0.0 area 0      //インターフェイスでOSPFの有効化
```
>
※ ワイルドカードマスクを、<font color="Red">「0.0.0.0」</font>に指定すると全てのビットを条件とする為、
<font color="Green">IPアドレス</font>そのものを指定します。

<br>

#### 2-2.OSPFの設定の確認

##### ■2-2-1.ネイバーの確認
OSPFでは、ネイバーとして隣のルータを認識しないとLSDBの同期を始めません。
なので、まずネイバーテーブルの確認をします。ネイバーテーブルを確認するには、
<b>特権EXCEモード</b>で、次の <font color="Red"><b>show ip ospf neighbor<b>コマンド</b></font>を実行します。

```
# show ip ospf neighbor
```

<br>
show ip ospf neighborコマンドの実行結果を確認していきます。
<img width="700" alt="ファイル名" src="https://i.gyazo.com/2971884e7c917951f895526811a414d8.png">

|項目|説明|
|:---|:---|
|①Neighbor ID|認識しているネイバーのルータID|
|②Pri|ネイバーのルータプライオリティ|
|③State|隣接関係を表す。「FULL」または「2Way」と表示。 / の後ろはDR、BDR、DROTHERかそれ以外（-）が表示される|
|④Dead Time|後何秒間、Helloパケットが到達しなかったらネイバーダウンとみなすかを表す|
|⑤Address|ネイバーのIPアドレス|
|⑥Interface|隣接関係を結んだインターフェイス|
<br>
show ip ospf neighborコマンドでネイバーテーブルを確認出来ますが、自身のルータ情報ではなく、
隣接するネイバーのルータの情報である事に注意。

<br>
##### ■2-2-2.LSDBの要約情報の確認
LSDBの要約情報であるトポロジテーブルを確認します。
<b>特権EXCEモード</b>で、次の <font color="Red"><b>show ip ospf database<b>コマンド</b></font>を実行します。

```
# show ip ospf database
```
<br>
詳細は、CCNA試験の範囲外なので割愛します。

<font color="DarkTurquoise">※興味がある方は[OSPFデータベースの概要と読解](https://community.cisco.com/t5/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%83%81%E3%83%A3-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/ospf%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%A6%82%E8%A6%81%E3%81%A8%E8%AA%AD%E8%A7%A3/ta-p/3149510)という記事参照して見て下さい</font>

<br>
##### ■2-2-3.ルーティングテーブルの確認
OSPFでルートを学習出来ているかどうかの確認をするには、
<b>特権EXCEモード</b>で、次の <font color="Red"><b>show ip route<b>コマンド</b></font>を実行します。

```
# show ip route
```

show ip routeコマンドの実行結果を確認していきます。
<img width="700" alt="ファイル名" src="https://i.gyazo.com/be795315c3d889bd52fac802a0e305b8.png">

|項目|説明　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　|
|:---|:---|
|①|ルートの情報源。「O」であることからOSPFにより宛先ルート|
|②|宛先ネットワーク。|
|③|アドミニストレーティブディスタンス。OSPFの場合はAD値が「110」。|
|④|OSPFの場合、メトリック値はコスト|
|⑤|ネクストホップアドレス。|
|⑥|宛先ルートを受信してから経過時間。|
|⑦|宛先ネットワークに転送するための出力インターフェース。|

<br>
##### ■2-2-4.OSPFのプロトコルの確認
OSPFのプロトコルの確認をするには、
<b>特権EXCEモード</b>で、次の <font color="Red"><b>show ip protocols<b>コマンド</b></font>を実行します。

```
# show ip protocols
```

show ip protocolsコマンドの実行結果を確認していきます。
<img width="700" alt="ファイル名" src="https://i.gyazo.com/40cfda4a74842dbbb2764c7dea3a0c14.png">

|項目|説明|
|:---|:---|
|①Routing Protocol|通信プロトコル|
|②Router ID|ルータID|
|③Number of area|このルータの所属するエリアは1つで標準エリアに接続していることを表示。スタブエリア、NSSAエリアには所属なし。|
|④Maximum path|等コストロードバランシングの数|
|⑤Routing for Networks|定義したnetworkコマンドの情報を表示|
|⑥Reference|コスト計算式の分子の値|
|⑦Routing Information Sources|エリア内でLSAを交換しているルータの情報を表示|
|⑧Distance|アドミニストレーティブディスタンス値|

<br>
##### ■2-2-5.インターフェイスの確認
OSPFが動作しているインターフェイスの情報を確認するには、
<b>特権EXCEモード</b>で、次の <font color="Red"><b>show ip ospf interface<b>コマンド</b></font>を実行します。

```
# show ip ospf interface  [<インターフェイス>]
```
インターフェースの所属エリア、ネットワークタイプ、コスト値、Hello/Deadタイマー間隔を確認できます。
例えば、Fa 1 のOSPFの動作状況を確認したい場合は、下記のように入力します。

```
# show ip ospf interface FastEthernet 1
```

<br>
show ip ospf interfaceコマンドの実行結果を確認していきます。
<img width="700" alt="ファイル名" src="https://i.gyazo.com/f8b5864f590883cb611fa949ef48a228.png">

|項目|説明|
|:---|:---|
|①|このインターフェースのIPアドレスと、インターフェースの所属エリア ※1|
|②|このルータのOSPFプロセスID、ルータID、このインターフェースのネットワークタイプとコスト値 ※2|
|③|このインターフェースのプライオリティ値及びDR/BDR/DROTHERなのかを示す|
|④|このインターフェースのセグメント上のDRのルータIDとIPアドレス|
|⑤|このインターフェースのセグメント上のBDRのルータIDとIPアドレス|
|⑥|このインターフェースのHelloタイマー、Deadタイマー、Waitタイマー、Retransmitタイマー ※3|
|⑦|このインターフェースのセグメントにおけるネイバー関係の数、アジャセンシ―関係の数|
|⑧|アジャセンシー関係が確立されたネイバールータのルータIDと、ネイバールータがDRであることの情報|

※1 エリアIDやサブネットマスクが対抗ルータと異なっているとネイバーにはなりません
※2 ネットワークタイプが「ブロードキャストマルチアクセス」の場合、「BROADCAST」と表示さ、
　ネットワークタイプが「ポイントツーポイント」の場合、「POINT_TO_POINT 」と表示される。
※3 これらの値が隣接ルータとずれていると隣接関係が築けません


<br>
#### 2-3.OSPF関連のパラメータの調整

##### ■2-3-1.ルータプライオリティ
マルチアクセス環境では、DRとBDRを選択します。その際に比較されるのが、
ルータプライオリティとルータIDです。

● ルータプライオリティの変更
ルータプライオリティを設定するには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>ip ospf priorityコマンド</b></font>を実行します。

```
(config-if)#ip ospf priority <ルータプライオリティ値>
```
＜ルータプライオリティ値＞のデフォルト値は 1です。変更したい場合は、0 ~ 255の値を
指定します。<font color="red">0を設定すると、DR及びBDRに選出</font>されなくなります。

ルータプライオリティを変更する事で、意図するルータにDRの役割を持たせる事が出来ます。
<br>

● ルータプライオリティの変更の注意点
例えば、既にDRに選定されているルータがあり、ip ospf priorityコマンドを使用して、
ルータプライオリティ値を設定して新たに別のルータをDRを選定しようとした場合、
DRの変更されない可能性があります。

理由は、既にDRとして選定されているルータが稼動している為です。
<font color="Green"><b>DRが頻繁に変更されるとそのたびにマルチアクセスネットワーク上の他のルータとアジャセンシーを
確立しなおさなければいけないので、なるべくDRは変更されないように動作</b></font>しているからです。
なので、プライオリティの高いルータが新たに追加されたとしても、DRは変更されません。


そこで、既にDRとして選定されているルータのプライオリティをip ospf priorityコマンドを使用して、
0に変更してしましょう。<b>0を設定すると、DR及びBDRに選出されなくなります。</b>
そうすれば、DRではなくなり、プライオリティの高いルータが新たにDRに選定されます。
<br>

また、<font color="Green"><b>OSPFのプロセスを再始動して、OSPFの動作を初めからやり直す</b></font>というやり方もあります。
OSPFのプロセスを再始動するには、<b>特権EXCEモード</b>で、次の <font color="Red"><b>clear ip ospf processコマンド</b></font>を
実行します。

```
# clear ip ospf process
```
プロセスを再始動すると、隣接するルータとネイバーの関係を一度解消し、
OSPFの動作を初めからやり直す事が出来ます。

<br>
##### ■2-3-2.OSPFのコスト

インターフェイスのコスト値を変更する事で、最適ルートを任意に変更する事が出来ます。
インターフェイスのコスト値を変更するには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>ip ospf costコマンド</b></font>を実行します。

```
(config-if) #ip ospf cost <コスト値>
```
＜コスト値＞は、 1 ～ 65535 の範囲で指定する。

例えば、interface GigabitEthernet 0/1 にコスト値を 「10」 とする設定例は以下。

```
(config) # interface GigabitEthernet 0/1
(config-if) # ip ospf cost 10
```

<br>
##### ■2-3-3.帯域幅

コスト計算で使用する帯域幅を変更する事でもルートを変更する事が出来ます。

インターフェイスの帯域幅を変更するには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>bandwidthコマンド</b></font>を実行します。

```
(config-if) #bandwidth <帯域幅>
```

＜帯域幅＞は、kbps単位で指定します。

※<font color="Green">コスト値と帯域幅の変更を同時に行った場合、コスト値の変更で設定した値が優先されます。</font>
その為、帯域幅でコスト値を変更する場合は、コスト値を変更するコマンドを先に実行しておく
必要があります。



bandwidthコマンドで帯域を変更する事で、コスト値を変更することも可能ですが、
このようなマイナー手法での設定変更は一般的に行いません。

<br>
##### ■2-3-4.Hellowインターバルの変更

OSPFは、Helloパケットによってネイバーを検出します。
Helloパケットを定期的に送信していて、ネイバーからのHelloパケットを受信出来ていれば、
そのネイバーが正常に動作していると判断します。

Helloパケットを送信する間隔をHelloインターバルと呼び、ネイバーがダウンしたとみなす時間が、
Deadインターバルです。これらの間隔はインターフェイス事に設定出来ます。

Helloインターバルを変更するには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>ip ospf hello-intervalコマンド</b></font>を実行します。

```
(config-if) #ip ospf hello-interval <秒数>
```
Helloインターバルを変更すると、<font color="Green">Deadインターバルは自動でその4倍の時間に設定</font>されます。

● 下記が設定例

```
(config) #interface FastEthernet 0/0
(config-if) #ip ospf hello-interval 10
```
Helloインターバルを 10と設定したので、自動的にDeadインターバルは 40と設定される


<br>

Deadインターバルのみを変更するには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>ip ospf dead-intervalコマンド</b></font>を実行します。

```
(config-if) #ip ospf dead-interval <秒数>
```
<br>
隣接するルータと、Helloインターバル、Deadインターバルが一致していないとネイバーとして認識
されない為、実行する際には注意が必要です。

<br>
##### ■2-3-5.MTUのミスマッチ検出機能の無効化
MTUのサイズが異なると、完全な隣接環境を築く事が出来ません。
その為、MTUを合わせるか、またはMTUの不一致を検出する機能を無効にする必要が、
あります。

MTUの不一致を検出する機能を無効にするには、<b>インターフェイスコンフィギューレションモード</b>で、
次の <font color="Red"><b>ip ospf mtu-ignoreコマンド</b></font>を実行します。

```
(config-if) #ip ospf mtu-ignore
```

<br>
##### ■2-3-6.デフォルトルートの配布

● デフォルトルートの配布の設定

1台のルータにデフォルトルートの設定を行い、OSPFで他のルータに配布すると
いった方法を使う事があります。

デフォルトルートを他のルータに配布するには、<b>ルータコンフィギューレションモード</b>で、
次の <font color="Red"><b>default-information originateコマンド</b></font>を実行します。

```
(config-router) #default-information originate [always]
```
alwaysのオプションを付けると、ルータにデフォルトルートの設定がされていなくても
デフォルトルートを他のルータに配布する事が出来ます。
つまり、デフォルトルートの設定を行う ip routeコマンドを行わなくても、デフォルトルートを
他のルータに配布するという事。
<br>

● デフォルトルートの配布の設定例

設定例1

```
RouterA(config) #ip route 0.0.0.0.0.0.0.0 FastEthernet 0/1
RouterA(config) #router ospf 10
RouterA(config-router) #network 192.168.1.0. 0.0.0.255 area 0
RouterA(config-router) #default-information originate
```

設定例2（alwaysのオプションを付けた場合）

```
RouterA(config)# router ospf 1
RouterA(config-router) #network 192.168.1.0. 0.0.0.255 area 0
RouterA(config-router)#default-information originate always
```

● 補足
ルーティングテーブルで確認した際、ルートの情報源が、「O*E2」と表示されます。
<b>「*」は、デフォルトルート</b>を表し、<b>「E2」は、OSPF以外で設定されたルートがOSPFで構成
されているネットワーク内で伝えられた事</b>を表します。このようなルートを<font color="Red"><b>外部ルート</b></font>といいます。


<br>
参考記事
-
<font color="DarkTurquoise">※[OSPF DR/BDR](https://server-network-note.net/2018/04/ospf-dr-bdr/)という記事参照</font>
<font color="DarkTurquoise">※[OSPF - sh ip ospf neighbor / sh ip ospf database / sh ip route](https://www.infraexpert.com/study/ospfz11.html)という記事参照</font>