経路制御テーブルを操作する、route コマンドの指定に関する小ネタです。
C:\>route /?
ネットワーク ルーティング テーブルを操作します。
ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
(中略)
command 次のいずれかです:
PRINT ルートを印刷します。
ADD ルートを追加します。
DELETE ルートを削除します。
CHANGE 既存のルートを変更します。
destination ホストを指定します。
MASK 次のパラメーターが 'netmask' の値であることを指定します。
netmask このルート エントリのサブネット マスクの値を指定します。
指定されない場合、既定値は 255.255.255.255 です。
gateway ゲートウェイを指定します。
interface 指定されたルートのインターフェイス番号です。
METRIC 宛先のコストなどのメトリックを指定します。
destination では CIDR 指定も可能
route add 192.168.2.0 mask 255.255.255.0 172.16.1.9
という指定は、
route add 192.168.2.0/24 172.16.1.9
のように簡略化して書けます。
「インターフェイス番号」とは
IF オプションで指定する「指定されたルートのインターフェイス番号」の調べ方です。たとえば、以下のようなホストがあるとします。いくつか項目を省略しています。
PS C:\> ipconfig /all
Windows IP Configuration
(中略)
Ethernet adapter Ethernet 2:
Description . . . . . . . . . . . : AWS PV Network Device #1
Physical Address. . . . . . . . . : 0A-2B-8D-29-FD-9D
Link-local IPv6 Address . . . . . : fe80::edd3:771b:4e7d:fb8d%15(Preferred)
IPv4 Address. . . . . . . . . . . : 172.16.1.12(Preferred)
(中略)
Ethernet adapter Ethernet:
Description . . . . . . . . . . . : AWS PV Network Device #0
Physical Address. . . . . . . . . : 0A-2B-E4-AE-FE-35
IPv4 Address. . . . . . . . . . . : 172.16.1.9(Preferred)
(以下略)
このホストには元々1個のインターフェイス(AWS PV Network Device #0)があり、プライベートアドレスとして 172.16.1.9 を指定しています。その後インターフェイスを追加して 172.16.1.12 を割り当てました。後から追加したほうが "AWS PV Network Device #1" です。
次に、経路テーブルを表示します。
PS C:\> route print
===========================================================================
Interface List
15...0a 2b 8d 29 fd 9d ......AWS PV Network Device #1
12...0a 2b e4 ae fe 35 ......AWS PV Network Device #0
1...........................Software Loopback Interface 1
14...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.1.1 172.16.1.9 10
0.0.0.0 0.0.0.0 172.16.1.1 172.16.1.12 10
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
(以下略)
IPv4 Route Table(日本語OSでは「IPv4 ルートテーブル」)上では Interface 欄は IP アドレスで表示されるので、ちょっと戸惑います。
Interface List(日本語OSでは「インターフェイス一覧」)により、"AWS PV Network Device #0" のインターフェイス番号は 12、"AWS PV Network Device #1" は 15 であることがわかります。
メトリック指定の罠
たとえばインターフェイス #1(172.16.1.12) のメトリック値を減らして優先度を上げようと、10 より少ない 5 を指定してみました。
route change 0.0.0.0 172.16.1.1 if 15 metric 5
ところが、これだと 10 から 15 に増えてしまいました。
どうも自動メトリック機能により、インターフェイス速度が 200Mbps 以上の場合は 10 がデフォルトとして設定され、コマンドラインの指定はそれに対する相対値になってしまうようです。かといって負の値を指定するとエラーで弾かれます。
しかたがないので、#0(172.16.1.9) のメトリック値を増やす事で、結果的に #1 の優先度を上げることができました。
route change 0.0.0.0 172.16.1.1 if 12 metric 2
ゲートウェイとして On-link(リンク上) を指定したい
Gateway 欄に On-link (日本語OSでは「リンク上」)とあるのは、そのインターフェイスに直結していることを示しています。直結していることを指定したい場合、ゲートウェイとして 0.0.0.0 を指定します。例)
route add 172.16.0.0/24 0.0.0.0