Windowsのルーティングテーブルを触った


なんで

ネットワークがちょっと不調だったので。

network


現在、実家・自宅のネットワークは以上のような構成になっており、常に自宅(緑)から実家(青)へVPNセッションをNGN経由で張っています…が、ついこの間までは問題なく使えていたのに、実家側のルータが自宅のマシンにNATテーブルを食い荒らされるという謎の事態になり、実家ネットワークの 192.168.0.0/23 宛てのトラフィックをVPNで、それ以外のトラフィックは自宅のルータからインターネット側に流すということにしました。

ということで、(ルータ側でVPNセッションを張っている訳では無いので)Windows側のルーティングテーブルを触ることにしました。

まずはじめに、コマンドプロンプト(要管理者権限)で route print を実行して現在のルートを確認します。

C:\WINDOWS\system32>route print
===========================================================================
インターフェイス一覧
  7...** ** ** ** ** 8c ......A
  8...** ** ** ** ** a0 ......VPN Client Adapter - VPN
  4...** ** ** ** ** e8 ......B
  2...** ** ** ** ** c5 ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
  5...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0      192.168.2.1     192.168.2.36      4
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.82      2
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
     192.168.1.82  255.255.255.255            リンク上      192.168.1.82    258
      192.168.2.0    255.255.255.0            リンク上      192.168.2.36    257
     192.168.2.36  255.255.255.255            リンク上      192.168.2.36    257
    192.168.2.255  255.255.255.255            リンク上      192.168.2.36    257
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上      192.168.1.82    258
        224.0.0.0        240.0.0.0            リンク上      192.168.2.36    257
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上      192.168.1.82    258
  255.255.255.255  255.255.255.255            リンク上      192.168.2.36    257
===========================================================================
固定ルート:
  なし

- 省略 -

この状態だと、 192.168.1.1, 192.168.2.1 のゲートウェイの順になっていますが、逆にしたいのでアダプタの優先度を触ります。

Windows 10 Pro (build 16184)だと ネットワークと共有センター を開いた後、左側の アダプターの設定の変更 をクリックしネットワークアダプタ一覧を表示させ、対象のインタフェース(今回は AVPN Client Adapter - VPN)のプロパティを開き、インターネット プロトコル バージョン 4(TCP/IPv4)のプロパティ のプロパティをクリックし、プロパティを開いた後、全般タブの詳細設定ボタンをクリックすると、下の方に インターフェイス メトリック というのがあるので、それぞれ優先度を高くしたい方の数値を低くし、OKで適応します。

今回は VPN Client Adapter - VPN を 3、 A を 2に設定しました。

(Windows 8.1くらいの頃までもっと簡単にできた気がするような気が。)

この状態で route print をすると先程とメトリック値が変わっているはずです。

が、、、

今回は(実家側のネットワークの都合で)、192.168.0.0/24192.168.1.0/24 をVPNアダプタに流したいので新たにルートを追加します。

C:\WINDOWS\system32>route -p add 192.168.0.0 mask 255.255.255.0 192.168.1.1 metric 1 if 0x08
 OK!

route add コマンドでルートを追加します。(-p オプションは再起動後も有効になるオプションです。)

キモなのは metric 1if 0x08 のところぐらいです。

前者はメトリック値を指定し、後者はインタフェースIDを指定します。

インタフェースIDは route print した際の インターフェイス一覧 の一番左側に書いてある数値です。

最後に確認。 なんかメトリック値が変なことになってる…けど一応希望の動作はしてるので良しということで。

C:\WINDOWS\system32>route print
===========================================================================
インターフェイス一覧
  7...** ** ** ** ** 8c ......A
  8...** ** ** ** ** a0 ......VPN Client Adapter - VPN
  4...** ** ** ** ** e8 ......B
  2...** ** ** ** ** c5 ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
  5...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0      192.168.2.1     192.168.2.36      3
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.82      4
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
      192.168.0.0    255.255.255.0      192.168.1.1     192.168.1.82      3
      192.168.1.0    255.255.255.0            リンク上      192.168.1.82    258
     192.168.1.82  255.255.255.255            リンク上      192.168.1.82    258
    192.168.1.255  255.255.255.255            リンク上      192.168.1.82    258
      192.168.2.0    255.255.255.0            リンク上      192.168.2.36    257
     192.168.2.36  255.255.255.255            リンク上      192.168.2.36    257
    192.168.2.255  255.255.255.255            リンク上      192.168.2.36    257
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上      192.168.1.82    258
        224.0.0.0        240.0.0.0            リンク上      192.168.2.36    257
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上      192.168.1.82    258
  255.255.255.255  255.255.255.255            リンク上      192.168.2.36    257
===========================================================================
固定ルート:
  ネットワーク アドレス          ネットマスク  ゲートウェイ アドレス  メトリック
      192.168.0.0    255.255.255.0      192.168.1.1       1
===========================================================================

結果的にルーティングテーブル触ってるけど、VPN接続先にネットワークが複数ある場合のみルート追加するから実質メトリック値の変更だけで済む人が多いのでは とか思いました まる