2012年9月17日月曜日

SNATとDNAT




SNAT(Source NAT)は、IPマスカレード(masquarding)と同様の概念である。マスカレーディングと同様にSNATは、NATデバイスを経ていくパケットの送信元IPアドレスを指定されたIPに変更します。NATデバイスで発信パケットのうちSNATルールに合致するパケットがある場合は、NATデバイスはパケットのソースアドレスを、あらかじめ定義されたIPに変更します。通常は、ソースIPアドレスにNATデバイスのIPアドレスが使用される。
SNATがどのように動作するかの例を基に説明しましょう​​。ネットワーク構成が以下のようだと仮定する。

                     (SNATインストール)+ --------- +
IPアドレス:FWEXT | eth0 eth1 | IP:FWINT
- + --------- / / ---------------- | | ----------- + ------ ---------
      |外部ネットワーク| | |
+ --- + --- + --------- + + --------- + ----- +
| |ファイアウォール| |
| | | |
+ ------- + + ---------- +
Webサーバー(IP:EXTWEB)ローカルPC(192.168.1.1)
GW:FWINT



上記のネットワーク構成も、ファイアウォールにSNATが設定されていない場合、ローカルPCは、外部Webサーバーに接続できない。ローカルPCのIPアドレスがプライベートIPであり、プライベートIPは、インターネット上でルーティングされることがないからである。しかし、ファイアウォールにSNATが設定されている場合は話は違ってくる。 SNATがどのようにローカルPCが外部のWebサーバにアクセスできるように助けてくれるのか見てみよう。
ローカルPCは、外部Webサーバーに接続するためにパケットを送る。この時、パケットの送信元IPは192.168.1.1となって目的地IPはEXTWEBになるだろう。ローカルPCのデフォルトゲートウェイがFWINTに指定されているので、このパケットは、ファイアウォールに転送される。ファイアウォールは、通常のルーティングプロセスを介してパケットを外部インターフェイスに伝達する。構成からもわかるように、ファイアウォールが外部インターフェイスには、SNATが設定されているので、パケットは、外部インターフェイスを出る直前、ソースIPアドレスがファイアウォールの外部IP(FWEXT)に変更されます。(SNATは、ルーティング後に行なわれることに注意う)後、パケットはWebサーバに送信されるようになる。パケットを受信したWebサーバがこのパケットに対する応答を送信する場合、ソースIPはEXTWEBがされて宛先のIPはFWEXTになるだろう。したがって、Webサーバーの応答パケットは、ファイアウォールで配信されて、ファイアウォールは送信元IP、送信元ポート、宛先ポート情報を確認して、このパケットがSNATされたパケットの応答であることを確認することになるので、ファイアウォールはソースIPをFWEXTで192.168.1.1に変更した後、(この過程をde -SNATとする)のルーティングをするようになって、結局このパケットは、ローカルPCに転送される。このように、ローカルPCと外部Webサーバー間の通信が可能になりられるようになるだろう。
以上の内容をiptablesを使用して実装すると、次のとおりである。 iptables-t nat-A POSTROUTING-p tcp-o eth0-j SNAT-to-source FWEXT
                                      DNATは、これと反対の概念である。その名前からわかるように、DNATは、NATデバイスで受信したパケットの宛先IPアドレスを変更する。通常はローカルLANにサーバーを持っていて、このサーバーのIPアドレスを外部に知らせないための目的やロードバランシングを行うために使用する。前と同様に、例を使って調べてみよう。説明に使用されるネットワークの構成図は以下の通り。

  + --------- +
IPアドレス:FWEXT | eth0 eth1 | IP:FWINT
- + --------- / / ---------------- | | ----------- + ------ ---------
|外部ネットワーク| | |
+ --- + --- + --------- + + --------- + ----- +
| |ファイアウォール| |
| |(DNATインストール)| |
+ ------- + + ---------- +
外部クライアント(IP:EXTCLI)ローカルWebサーバー(192.168.1.1)
GW:FWINT


構成もで見ることができるように、Webサーバーの実際のアドレスは192.168.1.1ですが、このIPアドレスを利用して、外部のクライアントと通信することができません。プライベートIPはルーティングされないルールだからだ。したがって、Webサーバーは、外部にグローバルIPアドレスを使用するようでなければならない。そのために、ネームサーバ、WebサーバのアドレスをFWEXTに設定することができる。ウェブサーバーに接続しようとする外部クライアントは、最終的にFWEXT:80にパケットを送ってくるだろう。もちろん、ファイアウォールがパケットを受信することになる。ファイアウォールは、パケットの受信を許可するかどうかを決定することになって、受信が決定されるとDNATによっては、パケットの宛先IPアドレスを192.168.1.1に変更することになる。その後、ルーティングプロセスを踏むことになり、このパケットは、ファイアウォールの内側側インターフェイスに渡され、Webサーバーに転送される(DNATは、ルーティング前に行われます)このようにして、外部クライアントが送信したパケットは、Webサーバーに渡されるのだ。その後、Webサーバーが送信する応答はどのようになるか? Webサーバーは、外部クライアント(EXTCLI)に応答を送ることになる。そのIPアドレスがローカルではなく、WebサーバーのデフォルトゲートウェイはFWINTに設定されているので、Webサーバーが送信する応答は、最終的にファイアウォールに転送される。ファイアウォールは、受信したパケットの宛先アドレス、宛先ポートなどの情報を確認して、このパケットがDNATされたパケットの応答であることを知ることになる。したがって、パケットの送信元IPを自分のIP(FWEXT)に変更することになる。(これde-DNATとする。)が後パケットはeth0を介して外部クライアントに配信される。

以上の内容をiptablesを使用して設定すると、次のとおりである。iptables-t nat-A PREROUTING-dst 1.2.3.4-p tcp - dport 80-j DNAT-to-destination 192.168.1.1
もし、ローカルのWebサーバーが192.168.1.1-10まで10代ており、ロード·バランシング効果を見ようとすれば、上記のルールを以下のように変更すればよい。iptables-t nat-A PREROUTING-dst 1.2.3.4-p tcp - dportは80 -j DNAT-to-destination 192.168.1.1-10
これにより、ラウンドロビン方式のロードバランシングが可能です。つまり最初のクライアントが送信したトラフィックは192.168.1.1に転送され、第二のクライアントが送信したトラフィックは、192.168.1.2に転送され、熱のクライアントが送信したトラフィックは、192.168.1.10、第十一クライアントが送信したトラフィックは192.168.1.1に転送される式である。

0 件のコメント:

コメントを投稿