はじめに
インフラ構築やアプリケーションのネットワーク構成を設計する際、ルーティングの動きさえ分かっていれば、ルーティングテーブルに何を設定したら良いのか、どのように結線したら良いのかなどが分かると思います。そこでルーティングの基本の基本をメモとして記載します。IPアドレスやセグメント(=サブネット)についても説明しようと思いましたが、長くなるのでこれらについては知っているものとします。
ルーティングとは
ルーティングとは、特定の宛先IPアドレス(またはセグメント)に向けて送信された通信パケットを、どのネットワークインタフェースから送出したら良いかの対応付けのことです。この対応付けの一覧のことをルーティングテーブルと言います。
言葉だけだと分かりづらいので絵で説明します。上の絵の色のついた小さい四角はネットワークインタフェースを表しています。色はセグメントを表していて、同じ色は同じセグメントのIPアドレスを持っているとします。この構成において、サーバーAからセグメントの違うサーバーBに通信したい場合を考えます。サーバーAのアプリからサーバーBのIPアドレスを宛先としてパケットを送信しますが、ルーティング設定が無い場合、サーバーAのどちらのインタフェースからパケットを送出したら良いか分かりません(図の点線矢印)。ルーターにおいても同じです。この点線矢印のどちらを選んだら良いかを教えてあげるのがルーティングです。
ルーティング設定コマンド
ルーティングはWindows, Linuxともにrouteコマンドで、参照・設定ができます(オプションはもちろん異なりますが)。ルーターの設定コマンドについてはスイッチのマニュアルに従ってください。
例えばLinuxの場合、ターミナルでroute
と叩くと、以下のようなカラムが表示されます。Destination
が宛先IPアドレス、Gateway
はデフォルトゲートウェイ、Genmask
はセグメント、Iface
はeth1などの送出インタフェース名です。他にもありますが、この4項目さえ分かっていれば設定できます。
Destination Gateway Genmask Flags Metric Ref Use Iface
デフォルトゲートウェイ
上にも出てきましたが、ルーティングの設定にはデフォルトゲートウェイという設定があります。通信パケットの宛先がルーティングテーブルに無い場合にデフォルトで送出するネットワークインタフェースを定めたものです。このデフォルトゲートウェイは本来システムに1つだけ設定されるものです(デフォルトの設定が2つ以上あるって変ですよね)。でもWindowsやLinuxでは、ネットワークインタフェース毎に設定できてしまいます。**実際、ネットワークインタフェース毎に設定しても有効になるのは1つだけです。**混乱するので、ネットワークインタフェース毎のデフォルトゲートウェイではなく、上記のrouteコマンドでデフォルトゲートウェイを設定することをお勧めします。
その他の注意事項
上の絵のようにサーバーが複数のネットワークインタフェースを持つ場合、冗長化したいなどの理由が無い限り、個々のネットワークインタフェースのセグメントは分けることをお勧めします。同じセグメントにしても、ルーティングを適切に設定すれば問題無いのですが、混乱の元になるかと思います。
さいごに
ルーティング設定は、サーバーやルーターの内部において、通信パケットをその宛先に応じてどのインタフェースから送出するかを決定するためのものです。これさえ覚えておけば、ルーティング設定やネットワーク結線で迷うことは無くなると思います。