【ネットワーク】Windowsホストのルーティング設定

普段使いではゲートウェイはインターネットにつながるデフォルトゲートウェイぐらいしか意識しないが、IaaS のクラウド環境なんか触っていると、VPNとか他業者クラウド接続とかインターネット以外にも隣接するネットワークのGWがあるとかないとか。知らんけど。

だからこんな状況もあったりするかもしれない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494508/b73590f3-a392-de6b-d054-81715691444e.png)

こういうとき、ホストPCくん自体にルーティングを設定する必要がある。

（一つのネットワークに複数のGWがある状態は要は通信の出入口が増えるわけだからセキュリティ的に危ないかも。一般的にはファイアウォールとかそのほかルータおいて一つのネットワークに区切って、そのルータより先でルーティングさせるのがいいらしいので個々の話はあくまで一例として）

例えば、以下の構成だったとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494508/bbe6b067-5845-0ca4-596d-4584f20b0777.png)
（パケットトレーサーでPCのルーティング設定する方法わからなかったのでルータで代用している。通信の挙動はほぼ同じはず。心の目を濁してPCと思い込んでください。。。）

だいたいの家庭ではデフォルトゲートウェイにインターネットに出る通信が割り当てられているはず。上の例で`10.0.0.0/24のNW`をインターネットだと見立てたとき、`192.168.0.1`のPC（誰が何と言おうとPCです）から発信されるパケットで`192.168.0.0/24`のNW以外の宛先が出てきたら、インターネットがあるゲートウェイ:`192.168.0.254`にパケットを送り込む。

ゲートウェイが一つならこれでもいい。
でも二つ以上になると、そうもいかない。

例えば`172.168.0.1`に`ping`を打つとこうなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494508/d3eeee6a-f291-e81a-ee4c-8696a398ffa8.png)


Destination host unreachable（宛先ホストに到達できません）と出て、パケットが到達していない様子。

これはホストPCくんが`172.16.0.1/24`がどこにあるか知らないから起きてしまう。
ホストPCくんが知っている宛先の範囲は、デフォルトだと線とスイッチがつながっている範囲、つまり`192.168.0.0/24`のNWの範囲のみ。図だと緑の領域。

これを解決するために、ホストPCにルーティングを設定してあげる。

（Windowsサーバー触ったことないから勘で書いているとこもあるので注意(ぇ))

# Windowsのルーティング設定

【参考】
■Windowsでルーティングテーブルを操作する
https://www.atmarkit.co.jp/ait/articles/0301/11/news003.html

まずはどんなルーティングテーブルを保持しているのかを`route print`表示する。

```
C:> route print
===========================================================================
Interface List
（見ないので省略）
===========================================================================
IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイ ス  メトリック
          0.0.0.0          0.0.0.0       192.168.0.254       192.168.0.1     35
        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
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上        192.16.0.1    291
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上        192.16.0.1    291
===========================================================================
```
だいたいこんなもんが出るかなと。
ネットワーク宛先`0.0.0.0`、ネットマスク`0.0.0.0`、ゲートウェイ`192.168.0.254`がいわゆるデフォルトゲートウェイ。

`0.0.0.0/0`ですべてのアドレスを表す。

現状、デフォルトルート以外のルーティング情報がないので、実現したいルーティングを追加していく。

`172.16.0.1`へ`ping`を飛ばしたら、一旦`192.168.0.253/24`へのゲートウェイに向ってほしい。そこまでいけばこの例ではその先は直結なので、それだけで`ping`が通るはず。

windowsのスタティックルート追加のコマンド。

```
C:> route add 172.16.0.0 mask 255.255.255.0 192.168.0.253
```

上記は`172.16.0.0/24`のNW向けのパケットが来たら、`192.168.0.253`へ向かわせる、というルート。`172.16.0.1/24`は`172.16.0.0/24`のNWに含まれるのでこれでOK。
（ホストルートを追加するには`route add 172.16.0.1 mask 255.255.255.255 192.168.0.253`かな。試してはない）

また`route print`でテーブルを確認する。

```
C: > route print
===========================================================================
Interface List
（見ないので省略）
===========================================================================
IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイ ス  メトリック
          0.0.0.0          0.0.0.0       192.168.0.254       192.168.0.1     35
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
       172.16.0.0    255.255.255.0       192.168.0.253       192.168.0.1     35
        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
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上        192.16.0.1    291
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上        192.16.0.1    291
===========================================================================
```
`172.16.0.0 255.255.255.0 192.168.0.253`
ルーティングが追加されている。

これで`172.16.0.1`に`tracert`をかけてみる。
(画像は都合上routerから。PCくんと思って)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494508/0466563f-af28-3985-85b5-8279409e9639.png)


無事に、デフォルトルート以外の他のNWとつながることができた。

あんまり役に立たないかもだけど、突然見かけても面食らわないための予防接種と思って。