ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

WindowsServer2016で複数NICがあるサーバでroute addでIFを指定したら通信できないトラブル

WindowsServerで覚えておくと便利なコマンドがroute addコマンドです。この設定でスタティックルートを設定することで、仮想基盤のサーバであれば、複数のネットワークと通信することができることがあります。


例えば、管理系通信とクローズドネットワークとか。そして、この設定でちょっとつまづいたので、備忘録です。


まず、Windows10の出力結果ですが、route addコマンドのオプションは以下になります。

--------
C:\WINDOWS\system32>route add

ネットワーク ルーティング テーブルを操作します。

ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]

-f ルーティング テーブルにあるゲートウェイのエントリをすべてクリア
します。このオプションをコマンドと併用した場合、コマンドを実行
する前にテーブルがクリアされます。

-p ADD コマンドと併用された場合、システムの再起動後もルートは維持さ
れます。既定では、システムが再起動された場合、ルートは維持され
ません。適切な固定ルートを決定する他のコマンドでは、オプションは
無視されます。

-4 IPv4 の使用を強制します。

-6 IPv6 の使用を強制します。

command 次のいずれかです:
PRINT ルートを印刷します。
ADD ルートを追加します。
DELETE ルートを削除します。
CHANGE 既存のルートを変更します。
destination ホストを指定します。
MASK 次のパラメーターが 'netmask' の値であることを指定します。
netmask このルート エントリのサブネット マスクの値を指定します。
指定されない場合、既定値は 255.255.255.255 です。
gateway ゲートウェイを指定します。
interface 指定されたルートのインターフェイス番号です。
METRIC 宛先のコストなどのメトリックを指定します。

宛先の指定に使われたシンボリック名はすべてネットワーク データベース ファイル
NETWORKS で参照されます。ゲートウェイのシンボリック名は、ホスト名データベース
ファイル HOSTS で参照されます。

コマンドが PRINT または DELETE の場合、destination または gateway にはワイル
ド カード ('*' で指定) を使用できます。gateway の引数は省略できます。

destination に含まれる * または ? はシェルのパターンとして認識され、一致する宛
先ルートのみが印刷されます。'*' は任意の文字列に、'?' は 1 文字の文字に一致しま
す。例: 157.*.1、157.*、127.*、*224*。

パターン マッチは PRINT コマンドでのみ許可されます。
診断情報:
(DEST & MASK) != DEST の場合、MASK が無効なときにエラーが発生します。
例> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
ルートを追加できませんでした: 指定したマスク パラメーターは無効です。
(Destination & Mask) != Destination です。

例:

> route PRINT
> route PRINT -4
> route PRINT -6
> route PRINT 157* .... 157* に一致するルートのみが出力されます

> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
宛先^ ^マスク ^ゲートウェイ メトリック^ ^
インターフェイス^
IF を指定しないと、指定したゲートウェイに最適なインターフェイス
検索されます。
> route ADD 3ffe::/32 3ffe::1

> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

CHANGE はゲートウェイとメトリックの変更にのみ使用します。

> route DELETE 157.0.0.0
> route DELETE 3ffe::/32
------


例で以下のようにあったので、最初は複数あるIFを指定するようにしました。ちなみに、IF番号は、route printコマンドで確認できます。

route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1


そして、うまく行かなくて同僚に教えてもらった時は、IFを指定しない場合は問題なく通信ができました。

route add 192.168.20.0 mask 255.255.255.0 192.168.10.254


理由は不明ですが、NICが複数あるので指定しないといけないと思っていたのですが、とりあえずシンプルに設定したら問題なく通信できました。


現場で使うことがあると思いますので、覚えておいて損はないコマンドですね。