Shammer's Philosophy

My private adversaria

Windowsでstatic routeを保存できない?

Windowsのルート情報はroute Add とかで設定できる。そして、-p オプションを使用することでルーティング情報を再起動後も保持できるようだ。
自分の検証用Windows 7 に複数のNICがあるものがあり、当然片方だけにDefault Gatewayを設定している。そして、必要な分のrouteをAddしているのだが、そのrouteを無視してDefault Gatewayにパケットを送っている挙動が確認された。なんだよ、保存されないじゃねーか、と一瞬思ったが、勘違いだった。起動やシャットダウンの過程でroute情報がクリアされDefault Gatewayになるだけのタイミングがあり、このタイミングでもパケットは送信されるので、このようなパケットが保存されたrouteに従わないで送信されてしまうようだ。起動してしばらくしたらこの挙動は収束する。
route /?の結果は以下のようになっている。

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

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

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

  -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