Skip to content

Instantly share code, notes, and snippets.

@mkaraki
Created November 21, 2023 15:00
Show Gist options
  • Save mkaraki/f3a264ccfa956468dea2daf77445bc5e to your computer and use it in GitHub Desktop.
Save mkaraki/f3a264ccfa956468dea2daf77445bc5e to your computer and use it in GitHub Desktop.

ルーティング入門

ネットワークではルーティングを使い、通信を様々な場所の機材に転送しています。

コマンドプロンプトでtracert google.comなどを実行すると、 コンピュータからgoogle.comまでの経路内に存在するルータ(ルーティングする機材)の一覧が出てきます。

本資料では、静的ルーティング(スタテックルーティング)とOSPFを使った動的ルーティングについて、 最低限実験環境で遊べるようになる程度のものを解説します。

ルーティングテーブル

ルーティングテーブルには「宛先(Route)」、「次のルータ(Next hop)」、「インターフェース」の3つが記述されています。

宛先(Route)はIPアドレス(インターネット上の住所)が複数連なったサブネット(区画のようなもの, 丁など?)が記述されています。

次のルータ(Next hop)はその宛先向けのパケット(通信, 郵送物にたとえると良い)をどのルータに送るべきかが記述されています。 このルータは基本的にConnected(L2レベルで直接接続されている)である必要があります。

インターフェースはNext hopのつながっているインターフェース(LANポートなど)を示します。

下記のルーティングテーブルを見てみましょう。

Route Next hop Interface
1.0.0.0/24 100.64.0.2 port1
2.0.0.0/24 100.64.1.2 port2
3.0.0.0/24 connected port3
100.64.0.0/24 connected port1
100.64.1.0/24 connected port2
0.0.0.0/0 (default) 100.64.0.2 port1

このルータは5つのルーティングテーブルを持っています。

1.0.0.0/24 (1.0.0.0 ~ 1.0.0.255)はport1につながっている100.64.0.2に対して転送するパケットになります。 ここで表示されるNext hopは最終経由地ではなく、あくまで直近の経由地のため、再度転送される場合があります。

ではconnectedとはどういう意味でしょう。これは、「ルータ本体が最終経由地」であることを表します。 connectedがついているサブネットは、ルータからL2で接続されており、これらにはルータ本体がパケットを渡しに行くことができます。

(本来は一番最初に表示されるものですが、)最後にdefaultとついているルーティングがあります。 これは、それ以外のすべてのルールに一致しなかったパケットの転送先です。 デフォルトゲートウェイなどと呼ばれる場合もあります。 閉鎖されたネットワークや大規模なルータでは、指定されない場合もあります。

郵便配達にたとえて書いてみましょう。

宛先 転送先の郵便局 輸送路 (良いたとえ募集中)
秋葉原 秋葉原郵便局 品川-秋葉原 間 郵便物輸送路
梅田 東京都郵便局 東京都郵便局-品川郵便局 間 輸送路
品川 管轄内 品川エリア配送ネットワーク
秋葉原郵便局 管轄内 品川-秋葉原 間 郵便物輸送路
東京都郵便局 管轄内 品川-秋葉原 間 郵便物輸送路
上記以外の宛先 東京都郵便局 東京都郵便局-品川郵便局 間 輸送路

Static Route

先ほどのルーティングテーブルを書くことで、ルータ間でパケットのやり取りが可能になります。 逆に、ルーティングテーブルを書かないと、受け取ったパケットをどこに送るべきかがわからないため、 通信ができません。

Note

通常、connectedはルータが自動的に挿入するため、ルータに直接つながっているネットワーク同士の通信は可能です。

Tip

一般的な家庭に設置されるルータはdefaultconnectedのみを持っています。 LAN側(PCやスマホがつながっているネットワーク)とプロバイダとの直接接続をconnectedとし、 それ以外のインターネット上の宛先はすべてdefaultでプロバイダの機材に転送しています。

Static Routeを記述することで、手動でルータにルーティングを教えることができます。

OSPF

ルーティングテーブルを手動で書くことは多くの場合苦行を生みます。 特定経路に障害が発生した場合は別経路の設定が必要ですし、 ネットワークの構成が変われば、関係するすべてのルータに再設定が必要になります。 OSPFを使うことで、これらの煩雑な管理を最小限に抑え、 ルーティングテーブルを簡単に自動生成することができます。

Note

OSPFにはAreaやTypeなどの概念があり、多くの場合学習にはシンプルなRIPが利用されています。 今回はより新しいOSPFを扱いますが、AreaやTypeなどは扱いません。 本資料内ではArea 0, Type Regularと仮定し記述しています。

Tip

OSPFは家庭や企業の同一局舎内などの狭い範囲で利用されることを前提として作られています。 広い範囲でのルーティングには、eBGPなどを利用するのが一般的です。

OSPFを利用する際はルータに名前を付けます。これがRouter IDです。 基本、0-255の間の数値を4つ利用し、IPv4アドレスと同じ書式で32bitを利用し表現します。

OSPFを利用する際にはredistributeを使い、connectedをOSPFで広報したり、 Networkを指定し、明示的に特定の経路だけを広報したりします。 広報するものや、受け取るものを条件で制限することも可能です。

OSPFを利用した経路の交換を行うと、最も近いわけではない経路も収集できます。 これにより、1つの経路が利用できない状態になっても、迂回路を利用し、 パケットの転送が可能です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment