インターネットにサーバを公開する時の構成としてNATとリバースプロキシを使用します。どちらの機能もパケットの宛先が変わるという共通点があり違いが分かりにくいかもしれません。
この記事は、
- NATとリバースプロキシの違いを知りたい
こんな方に読んでもらいたいです。
NATとは、リバースプロキシとは
2つの違いを書く前にそれぞれの意味を整理しておきます。
NATとは
パケットのアドレスを変更する機能です。送信元アドレスと宛先アドレスのどちらでも変えることができます。
クライアントが送信したパケットを、ルータが宛先アドレス変換してサーバに転送する例を表示します。
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | B.B.B.B |
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | B.B.B.B |
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | X.X.X.X |
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | X.X.X.X |
間にルータは入っていますが、データの要求と応答を行う2台はクライアントとサーバです。
インターネットにサーバを公開する場合はグローバルアドレスが必要ですが、サーバにグローバルアドレスを設定するとプライベートアドレスのサーバとの通信が難しくなります。
NATでルータがグローバルアドレスを持ちインターネットとの境界になる事で、サーバにはプライベートアドレスを設定でき管理が楽になります。
リバースプロキシとは
クライアントからインターネット経由で届いたリクエストパケットを受け取り、クライアントの代わりにサーバへリクエストパケットを送ります。
リクエストパケットを受け取るのでWEBサーバの機能があります。またサーバへリクエストを送るのでクライアントとしての機能もあります。
クライアントが送信したパケットを、リバースプロキシが受け取り代理でサーバにパケットを送信する例を表示します。
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | B.B.B.B |
送信元アドレス | 宛先アドレス |
---|---|
A.A.A.A | B.B.B.B |
送信元アドレス | 宛先アドレス |
---|---|
B.B.B.B | X.X.X.X |
送信元アドレス | 宛先アドレス |
---|---|
B.B.B.B | X.X.X.X |
データの要求と応答を行う2台はクライアントとリバースプロキシの1セットと、リバースプロキシとサーバの1セットで計2セットになります。
リバースプロキシはインターネットにサーバを公開する場合にクライアントとサーバの橋渡しとして使います。
リバースプロキシは必要ないと思うかもしれません。ですが、サーバ単体だとクライアントに提供するサービスに加え通信の暗号化やユーザー認証などの処理で負荷が高くなってしまいます。
この暗号化やユーザー認証の処理を引き受けるのがリバースプロキシです。
違いは処理の内容。具体的には?
処理の大きな違いはパケットの内容を変更するのか、新しくパケットを作成するのか。です。
先ほどの例を見てもらうと分かるように、どちらも最初は宛先がB.B.B.Bでしたが最終的にはX.X.X.Xになっています。
NATはクライアントからのパケットのアドレスを変更してサーバへパケットを転送します。
リバースプロキシはクライアントからのパケットを受け取り内容を確認します。そして内容に応じて新たなパケットを作成してサーバへ送ります。
この2つですが最終的にパケットを受け取るサーバから見るとこんな違いがあります。
NATの場合は送信元アドレスがクライアントのIPアドレスA.A.A.Aに対して、リバースプロキシの場合は送信元アドレスがリバースプロキシのIPアドレスB.B.B.Bになります。
なのでリバースプロキシを使う場合はサーバからするとどのリクエストも全てリバースプロキシなのでIPアドレスから誰が接続してきたのかは判断ができなくなります。
この2つ動作する機器、OSI参照モデルの階層にも違いがあります。
NAT | リバースプロキシ | |
---|---|---|
機器 | ルーター ファイアウォール ロードバランサー | サーバ ロードバランサー(一部のみ) |
OSI参照モデルの階層 | 3〜4層 ネットワーク〜トランスポート | 7層 アプリケーション |
NATはネットワーク機器が処理するのに対して、リバースプロキシはサーバで処理します。
リバースプロキシはアプリケーション層の処理になるので、ネットワーク機器ではなくサーバで処理されるのは理解できると思います。
OSI参照モデルについてはこちらを確認してください。
https://ja.wikipedia.org/wiki/OSI参照モデル
NATとリバースプロキシを使うポイント
実際にはNATとリバースプロキシは2つ組み合わせて使われています。
この構成の場合、インターネットに公開するグローバルアドレスはルーター(NAT)が持っています。
ルータがインターネットとの境界装置になります。ルータを境に左側がインターネットで右側がローカルエリアネットワークです。
ルーター(NAT)に届いたパケットは宛先をグローバルアドレスからリバースプロキシのプライベートアドレスに変換します。リバースプロキシは届いたパケットのリクエスト内容を確認します。そしてリバースプロキシがサーバへリクエストパケットを送ります。
パケットの流れをイメージする為にクライアントからサーバまでを横並びで書きましたが、実際にはクライアントとリバースプロキシ間で通信は完結して、リバースプロキシとサーバ間で別の通信を行なっています。
この構成のメリットとしてはリバースプロキシとサーバをプライベートネットワークにする事で管理しやすくなります。
まとめ
NATとリバースプロキシの違いとそれぞれの役割について説明しました。
どちらも宛先が変わる部分は同じですが、パケットを転送するまたはパケットを作成するという違いがあることがわかりました。
インターネットの境界になるルータ(NAT)と、サーバを補助するリバースプロキシという構造を覚えておいてください。