雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

ルーティング有効にしたのにつながらない

と思っているアナタ(キラーン☆)
ではなく、異なるサブネットのサーバー同士をつなげようと、
間のサーバーでLANルーティングを有効にしたのだけれどつながらない、と思ったとき

host1 (Windows Server)
NIC1 192.168.10.2 /24

host2 (Windows Server)
NIC1 192.168.20.2 /24

をつなぎたくて、
host3 (Windows Server 2012 R2)
NIC1 192.168.10.10 /24
NIC2 192.168.20.10 /24
& リモートアクセスの役割を追加して、
「LANルーティング」を有効に

そしてhost1からhost3の192.168.10.10へのpingが通り、
host2からhost3の192.168.20.10へのpingも通るのに、
host1からhost2へのpingが通らない

解決方法は
host1で以下のコマンドを実行
route -p add 192.168.20.0 mask 255.255.255.0 192.168.10.10 metric 1
host2で以下のコマンドを実行
route -p add 192.168.10.0 mask 255.255.255.0 192.168.20.10 metric 1

詳しい解説は「route add」で検索。
host1には、「192.168.20.xxへ通信しようとする場合、192.168.10.10へ送れ」
host2には、「192.168.10.xxへ通信しようとする場合、192.168.20.10へ送れ」
という設定(スタティックルートの登録)をしている。

今まで知識としては知っていながらもピンときていなかったのだが、
先日検証中に突然腑に落ちた。
まず「通信は同一サブネットのみ可能」という基本ルールがあって、
pingなどで異なるサブネットへ信号を送ろうとしたときに、
そのままだと「異なるサブネットだから通信できませ〜ん」とどこにも送らない。
いや、デフォルトゲートウェイには送る。だからデフォルトゲートウェイを設定してもよいのだがここでは措いておく。
ここで、自ホストにスタティックルートを登録しておくと、
「異なるサブネットのうちこのセグメントへ送りたい場合は、同一サブネットであるこのIPアドレスに送ってね。
そしたらこのIPアドレスのホストがルーティングをしているから送ってくれるよ」
と指定する意味がある。

ちなみに片側のみの通信をしたい場合でも、pingで反応を見たければ
相手先ホストでもスタティックルートを登録する必要がある。
片側だけの設定では、戻りの通信が自分で確認できないからpingが戻ったと判定されないのだ。