本記事は 2018 年 9 月 25 日に公開された記事を本ブログに移行した記事になります。
Windows プラットフォーム サポートの山本です。
ネットワーク管理者であれば一度は使用したことがあるコマンド、『 route add 』 。
route add コマンドでスタティック ルートを追加する場合、下記技術情報にあるとおり IF オプションを使用して、明示的にアクティブ ルートが割り当てられるインターフェイスを指定することをお勧めしております。
・https://docs.microsoft.com/en-US/troubleshoot/windows-server/high-availability/active-route-removed
・https://support.microsoft.com/en-us/topic/manually-added-route-table-entries-are-deleted-unexpectedly-when-you-delete-an-additional-ip-address-in-windows-vista-in-windows-7-in-windows-server-2008-or-in-windows-server-2008-r2-6ecbbc34-6776-c28a-3e17-9e5881f6152f
上記の内容のほかに、もう一点、IF オプションを指定することをお勧めする理由を以下にご紹介致します。
下記に、ルート テーブルの例を示します。
Windows OS では、通信先の IP アドレスに従ってパケットを送出するインタフェースを選択する際、自身のルート テーブルを参照します。
上記の場合において、IP アドレス 192.168.1.20 宛に ping を実行する場合、上図の上から 5 番目のアクティブ ルートが選択され、IP アドレス 192.168.1.16 が設定されているインターフェイスよりパケットが送出されます。
次に、IP アドレス 172.16.1.10 宛に ping を実行する場合を考えます。
上記の場合において、アクティブ ルートに IP アドレス 172.16.1.10 と一致するルートが存在しないため、デフォルト ゲートウェイが使用されます。
この時、『 route add 』 コマンドを使用して固定ルート (スタティック ルート) を追加することで、特定の宛先に対してパケットを送信させることが可能です。
例えば、以下のコマンドを実行します。
route -p add 172.16.1.0 mask 255.255.255.0 192.168.1.20
実行後のルート テーブルは以下の通りです。
IP アドレス 172.16.1.10 宛に ping を実行すると、上図の上から 5 番目のアクティブ ルートが選択され、IP アドレス 192.168.1.20 宛に、IP アドレス 192.168.1.16 が設定されているインターフェイスよりパケットが送出されます。
このとき、送出元インターフェイスは、route add コマンドのゲートウェイとして指定した IP アドレス 192.168.1.20 と、各インターフェイスの IP アドレスとの Longest Match により判断されます。
Longest Match でも決まらない場合は、メトリック値の最も低いインターフェイスが選択されます。
しかしながら、Longest Match および メトリック値によってアクティブ ルート が追加されるのはコマンド実行時の挙動であり、OS 再起動または NIC の無効化 / 有効化を実施した場合には、ゲートウェイの IP アドレスと同一ネットワークに該当するインタフェース全てにアクティブ ルートが追加されます。
OS 再起動または NIC の無効化 / 有効化を実施した後のルート テーブルは以下の通りです。
IP アドレス 192.168.1.32 が設定されているインターフェイスにも、アクティブ ルートが追加されることが確認できます。
なお、この挙動は仕様です。
上記の状態で、IP アドレス 192.168.1.32 が設定されているインターフェイスのアクティブ ルートを削除したい場合、以下のコマンドを実行することで削除可能ですが、OS 再起動または NIC の無効化 / 有効化を実施すると再度上図の状況に戻ります。
route delete 172.16.1.0 mask 255.255.255.0 192.168.1.20 if <消したいインターフェイスの IF 番号>
例 : route delete 172.16.1.0 mask 255.255.255.0 192.168.1.20 if 10
上記の現象を回避するためには、以下コマンドにて該当のスタティック ルートを削除する必要がございます。
route delete 172.16.1.0 mask 255.255.255.0 192.168.1.20
このように、意図しないアクティブ ルートが登録されるといった現象を回避するためにも、route add コマンドでスタティック ルートを追加する際には IF オプションを指定することをお勧め致します。
[特記事項]
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。