隙あらば寝る

うぇぶのかいしゃではたらくえんじにあがかいています

NAT と SNAT と DNAT

ネットワークでは避けて通れない NAT。

Network Address Translation を略したもので、文字通りアドレスの変換を行う。

NAT は SNAT/DNAT に分類され、

送信元アドレスを変換するのが SNAT。

送信先アドレスを変換するのが DNAT。


この技術が解決しようとしているのは

  • プライベートアドレスとグローバルアドレスは直接通信できない

という問題。(実際はこの限りではないが、大体の場合はこれ)


グローバルアドレスは限りがあるので、普通はプライベートアドレスを使う。

プライベートアドレスを使っているとグローバルアドレスと通信できない。

それでは困るのでプライベートネットワークの代表者にグローバルアドレスを付与する。

この代表者が NAT 機能を提供する。


この例で表現すると、

SNAT はプライベートアドレスから発生した通信をグローバルアドレスに届ける技術。

プライベートアドレス(S)をグローバルアドレスに書き換えて通信を実現している。

ホームネットワークから外部サービスへの通信等がこれ。

DNAT はグローバルアドレスから発生した通信をプライベートアドレスに届ける技術。

グローバルアドレス(D)をプライベートアドレスに書き換えて実現している。

ホームネットワークで web/mail 等のサーバ等を複数台構築してアドレスを一つに見せて外部に公開する場合がこれ。


f:id:yoru9zine:20151219065148p:plain

ここまでの説明で疑問に思った人もいるかもしれないが、SNAT/DNAT は普通の場合同時に必要になる。

SNAT の戻り通信は DNAT 的な変換を行わないと得られない。

具体的には、http request は SNAT で相手に届くが、その response は DNAT で自分に戻ってくる。


以上が基礎知識。具体的にどう作るのかは何(router/fw/linux/...)を使うのかによって全然違うが、基本的な動作は変わらない。