普段使いではゲートウェイはインターネットにつながるデフォルトゲートウェイぐらいしか意識しないが、IaaS のクラウド環境なんか触っていると、VPNとか他業者クラウド接続とかインターネット以外にも隣接するネットワークのGWがあるとかないとか。知らんけど。
だからこんな状況もあったりするかもしれない。
こういうとき、ホストPCくん自体にルーティングを設定する必要がある。
(一つのネットワークに複数のGWがある状態は要は通信の出入口が増えるわけだからセキュリティ的に危ないかも。一般的にはファイアウォールとかそのほかルータおいて一つのネットワークに区切って、そのルータより先でルーティングさせるのがいいらしいので個々の話はあくまで一例として)
例えば、以下の構成だったとする。
(パケットトレーサーで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
を打つとこうなる。
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くんと思って)
無事に、デフォルトルート以外の他のNWとつながることができた。
あんまり役に立たないかもだけど、突然見かけても面食らわないための予防接種と思って。