t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

ネットワーク:VLAN間ルーティングにおける端末側デフォルトゲートウェイ設定でハマった

最近またネットワーク検証機を引っ張り出してきて学習を進めているのだが、想定と違う動きをしてハマったのでメモとして残しておこうと思う。

CiscoのL3スイッチにVLAN間ルーティングを設定したのだが、通信をする端末側(仮想マシン)にデフォルトゲートウェイを設定するのを忘れてpingの応答がないという凡ミスをした。

ここまでは単なる凡ミスでなので結局端末2台にGWを設定することで解決したのだが、どうにも理屈が合わないと感じる事象に出くわした。

前提を図示すると以下のようにPC2にのみデフォルトゲートウェイが設定されている状態で検証した。

まずPC1からPC2へインターフェイスeth1を指定してpingを送ったとき、応答が返ってこなかった。これはPC1にデフォルトゲートウェイの指定が無かっためと考えていたのだが、L3スイッチ側のデバッグモードで確認してみるとPC2からPC1への応答は正しく処理されているようなのだ。

イーサネットフレームの宛先MACとかが違うのかと思って念のためPC1と接続されたスイッチ側のポートに対し、別のポートをミラーポートに設定してWiresharkでキャプチャしてみたのだがPC1にデフォルトゲートウェイを指定したときと指定していないときでパケットの内容は変わらないように思える。
つまり送信元端末にデフォルトゲートウェイが設定されていようがされていまいが関係なくL3スイッチはVLAN間ルーティングをやってのけるということ。

じゃぁなんで送信元デフォルトゲートウェイが無いとping応答が消失するのかというと、送信元となったPC1が着信パケットを破棄しているとしか思えない。それでデフォルトゲートウェイって一体なんなんだ。。と、まる2日ほど悩んだんだけどVMじゃなくて実機で同じ検証をしてみたところあっさり解決した。

PC1を実機に変え、ip routeをすべて削除したうえでインターフェースeth1を指定してPC2宛にpingを打ってみたところ、きちんと応答が返ってきたのだ。逆にPC2からPC1へのpingは失敗となった。

つまり、仮に送信元PCにデフォルトゲートウェイが指定されていなかったとしてもインターフェースを直指定している以上は物理的にどこのLANポートに電気信号を送ればいいのかは自明なわけで、pingも当然成功するということ。最初うまくいかなかったのはVM環境固有の問題と思われる。例えばNWインターフェイスが実際には実機側インターフェイスへのブリッジとして実現されている点などが怪しい。

PC2からPC1へのpingで応答がないのはPC1側にデフォルトゲートウェイの設定が無いために、pingを受け取ったPC1がどのインターフェースから応答すればPC2に届くのか判別できない為と思われる。着信したインターフェースに戻せば良いじゃないかと思ってしまいがちだけどそんな設計にはなってなさそうだ。

一応NW学習目的としては実機で納得のいく答えがでたのでVMの挙動が実機と異なる理由は解明されていないけどそこは深堀りせずに次のネットワーク検証に進もうと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。