ルーティングの問題(解答編)
さて、前回の解答なんかをやろうかと。
前回、こんな図で問題を出したわけですが。
これでクライアントCから、サーバMへの接続ができない、という話だったわけです。
これを考えるポイント、というか、ネットワークで接続を考えるときによく陥る罠があるんですけど。
「行き」のルーティングは考えるけど、「帰り」のルーティングは忘れがち
になりやすい、と。
前提条件から、デフォルトゲートウェイが次のように設定されているのがわかります。
クライアントCから、サーバMへpingを実施すると、
- クライアントC、サーバM(の内部インタフェース)へping
- クライアントC、サーバMは別サブネットなので、(デフォルトゲートウェイの)L3へ送信
- L3、pingを受信してルーティング
- L3、サーバM側サブネットへフォワード
- サーバM、内部インタフェースにping着信
ここまでは確定です。
問題は、「帰り」です。サーバMのデフォルトゲートウェイがFWのDMZインタフェースに設定されている(前提条件の「サーバMはインターネットへの接続、インターネットからの接続ができます 」から)ことからもわかるとおり、これ、帰りのping replyはFWへ送られてしまうんです。
- サーバM、ping replyをクライアントCへ送信
- サーバM、クライアントCは別サブネットなので、(デフォルトゲートウェイの)FWへ送信
- FW、フィルタリングルール(DMZ→insideは×)によりパケット破棄
よって、ping replyが返ってこない、というのがトラブルの原因でした。
なので、解決法は、サーバMのルーティングテーブルに、内部ネットワークは内部インタフェースより送信、というのを追加することです。
Windowsなら、route addコマンドですね。
実際にこれやって、しばらく悩んだという話です。
「行き」が通るから、「帰り」も通るという発想は間違いの元だよ、という問題でした。