ルーティングの問題(解答編)

さて、前回の解答なんかをやろうかと。

前回、こんな図で問題を出したわけですが。

これでクライアントCから、サーバMへの接続ができない、という話だったわけです。


これを考えるポイント、というか、ネットワークで接続を考えるときによく陥る罠があるんですけど。


「行き」のルーティングは考えるけど、「帰り」のルーティングは忘れがち


になりやすい、と。


前提条件から、デフォルトゲートウェイが次のように設定されているのがわかります。


クライアントCから、サーバMへpingを実施すると、

  1. クライアントC、サーバM(の内部インタフェース)へping
  2. クライアントC、サーバMは別サブネットなので、(デフォルトゲートウェイの)L3へ送信
  3. L3、pingを受信してルーティング
  4. L3、サーバM側サブネットへフォワード
  5. サーバM、内部インタフェースにping着信

ここまでは確定です。
問題は、「帰り」です。サーバMのデフォルトゲートウェイがFWのDMZインタフェースに設定されている(前提条件の「サーバMはインターネットへの接続、インターネットからの接続ができます 」から)ことからもわかるとおり、これ、帰りのping replyはFWへ送られてしまうんです。



  1. サーバM、ping replyをクライアントCへ送信
  2. サーバM、クライアントCは別サブネットなので、(デフォルトゲートウェイの)FWへ送信
  3. FW、フィルタリングルール(DMZ→insideは×)によりパケット破棄

よって、ping replyが返ってこない、というのがトラブルの原因でした。


なので、解決法は、サーバMのルーティングテーブルに、内部ネットワークは内部インタフェースより送信、というのを追加することです。
Windowsなら、route addコマンドですね。


実際にこれやって、しばらく悩んだという話です。
「行き」が通るから、「帰り」も通るという発想は間違いの元だよ、という問題でした。