コンテンツにスキップ

5. NAT・DHCP・DNS

5.1. NAT

5.1.1. NATとは

NATはIPヘッダ内のIPアドレスを変換する技術。 当初NATはIPv4の枯渇問題の対応法の1つとして考案された。

NATはインターネットへの接続の際にプライベートIPアドレスをグローバルIPアドレスに変換する際に使用される。

NATの用語

NATを考えるうえでいくつかの用語がある。

アドレス 意味
内部ローカルアドレス 内部ネットワークからみたIPアドレス(プライベートIPアドレスを指す)
内部グローバルアドレス 外部ネットワークからみたIPアドレス(グローバルIPアドレスを指す)
外部ローカルアドレス 内部ネットワークから見た外部のIPアドレス
外部グローバルアドレス 外部ネットワークからみた外部のIPアドレス(通常NATでは外部の2つアドレスは同じ意味)

内部・外部

5.1.2. NATの通信フロー

グローバルIPアドレスはISPから割り当てられたものを使用する必要がある。また、ルータはNAT変換用のNATテーブルを持ち、そこにアドレスが登録される。

NAT

変換後が内部ローカルアドレス、変換前が外部ローカルアドレスを指す。

5.1.2.1. 一方向NAT

一方向NAT(Unidirectional NAT)は内部から通信を始め外部とのやりとりが可能で、外部から始めて内部と通信できないNATを指す。

このタイプのNATは外部から内部へアクセスできないため内部ネットワークを保護することが可能。 一般的なインターネット接続の場合はこの一方向NATとなる。

また一方向NATはTraditional NATOutbound NATと呼ばれる。

5.1.2.2. 双方向NAT

双方向NAT(Bi-directional NAT)は内部からも外部からも通信を始めてそれぞれやり取りすることができるNATを指す。

Two-Way NATとも呼ばれる。

5.1.3. NATの種類

NATにはいくつか種類があり、代表的なものにはStatic NAT, Dynamic NAT, NAPT等がある。

5.1.3.1. Static NAT

Static NATは一対一のアドレス変換技術を指す。

Static NATではネットワーク管理者が手動でNATテーブルにグローバルIPアドレスと内部ローカルアドレスの変換組み合わせを登録する。この場合内部ローカルアドレスは外部ネットワークに送信される際に常に同じIPアドレスに変換される。

またStatic NATでは双方向NATの動作も可能となる、しかしStatic NATでは1つの内部ローカルアドレスに対して1つのグローバルアドレスという1対1の関係になるため用意された内部グローバルアドレスの数だけしか同時に外部通信ができない

5.1.3.2. Dynamic NAT

Dynamic NATでは複数の内部グローバルIPアドレスをプールとして設定する。 内部のクライアントが外部と通信する際にアドレスプールから選択されたIPアドレスに変換される。 Static NATと異なる点は常に同じ内部グローバルアドレスに変換されるわけではない所にある。

Dynamic NATでは外部から通信する際にリアルタイムに自動でNATテーブルに登録されるので内部から通信を行うまで内部ローカルアドレスがどの内部グローバルアドレスに変換されるかわからない。 そのため動作としては一方向NATとなる。

また1対1の割り当て関係となるためアドレスプールに用意されている内部グローバルアドレスの数だけしか外部と通信ができない。

5.1.3.3. NAPT(PAT)

NAPT(PAT,オーバーロードとも呼ばれる)では1つの内部グローバルアドレスに対し複数の内部ローカルアドレスを対応付ける1対多の変換が行えるためアドレス節約が可能となる。 またNAPTはIPマスカレードとも呼ばれる。

またNAPTではTCPまたはUDPのポート番号も変換しNATテーブルに登録する。

NAPT

NAPTでは1つの内部グローバルアドレスで複数のクライアントが外部通信することができるためIPアドレスの消費を削減できる。

5.2. DHCP

DHCPはPCなどにネットワーク接続をできるようにするためにIPアドレスやサブネットマスクを自動で割り当てるためのプロトコルである。

サーバやルータなどには手動でIPアドレスを設定するのが一般的だが、ユーザが使用するクライアントPCに手動で設定するのは手間がかかる。そこでDHCPを利用してネットワーク接続を簡単にできるようにしている。

DHCPの設定は以下2つのパターンのいずれかで行える。

  • DHCPサーバを用意する
  • ルータ自身にDHCPサーバ機能を持たせる

5.2.1. DHCPサーバの動作

DHCPはDHCPサーバとDHCPクライアントから成り立つ。

クライアント端末から要求があるとDHCPサーバからIPアドレス、サブネットマスク、デフォルトゲートウェイ、DNS等の情報をが返送される。

DHCP

  1. DHCPクライアントからネットワーク全体にDHCP DISCOVERをブロードキャスト(IPv4の場合255.255.255.255)に送信
  2. DHCP DISCOVERを受け取ったDHCPサーバはクライアントに対しDHCP OFFERを送信し貸出予定のIPアドレスと関連するネットワークの情報を伝達する
  3. クライアントはDHCPサーバから送信されたDHCP OFFERの情報をに問題がなければDHCP REQUESTをブロードキャスト(IPv4の場合255.255.255.255)で送信し正式なリクエストを送る
  4. DHCPサーバはDHCP REQUESTに応答する場合、DHCP ACKを送信し、それをクライアントは受け取りネットワークの設定を行う

5.2.2. Gratuitous ARP

Gratuitous ARPはDHCPサーバからクライアントにIPアドレスを割り当てる際にDHCPクライアントが他ホストにすでに同じIPアドレスが割り振られていないか確認するために使用される機能である。

主にIPアドレスの重複検知のために行われる。

5.2.3. DHCPリレーエージェント

DHCPリレーエージェントはブロードキャストされたDHCP要求をユニキャストで転送する機能

DHCPクライアントはIPアドレスを取得するためにDHCP-DISCOVERメッセージをブロードキャスト送信する。 しかしルータのデフォルト動作ではブロードキャストを転送しないためルータに届いたDHCP-DISCOVERは破棄されてしまう。 そのためDHCPサーバとDHCPクライアントは同一セグメント内に置く必要がある

DHCPリレーエージェントを設定することで異なるセグメントのDHCPサーバが使用できるようになる

DHCPリレー

5.3. DNS

DNSはドメイン名とIPアドレスの対応情報を管理するシステムである。 TCP/IPではIPアドレスでサーバへアクセスを行うが、使い手の人間からすればわかりづらい。 そこでドメインという者を定義し、ドメイン名とそれに対応するIPアドレスを管理するサーバを用意することで、 ドメイン名とIPアドレスを解決する仕組みを提供します。

ドメイン名からIPアドレスを解決する、もしくはその逆は名前解決と呼ばれる。

なお1つのドメインに対するIPアドレスへの対応は、「1対1」 「多対1」 「1対多」のいずれも設定ができる。

5.3.1. DNSの構造

DNSはドメイン名とIPアドレスのデータを分散して管理が行われている。 ドメインの範囲を分けて分散管理するためにDNSは階層構造を取っている。

一番上の階層には「.」であらわされるルートドメインというものがあり、その下に「jp」「com」などのトップレベルドメイン、さらにその下に「co」「ne」などの第2レベルドメイン、その下に第3レベルドメインと続く構造となる。

ドメインレベル

ドメイン名

ドメイン情報を保持しているサーバは権威サーバと呼ばれる。 各DNSサーバは自分の階層を管理している1つ下の階層のサーバのIPアドレスを把握し、それ以外は把握していない。

5.3.2. DNSの動作

クライアントが名前解決を行う際に基本フローは以下の通り。

  1. クライアントはまずLAN内のDNSキャッシュサーバに問合せる。キャッシュとして対象の情報があればクライアントにIPアドレスを教える、ない場合はルートサーバに問合せる
  2. ドメイン名から各DNS権威サーバにLANのDNSサーバが問い合わせて最終的に名前解決を行う
  3. その後LAN内のDNSキャッシュサーバはIPアドレスのキャッシュを行う

5.3.3. DNSルックアップ

DNSルックアップはドメイン名からIPアドレスをと求める、またはその逆を行うこと。これによりホスト名でのTelnet接続などを可能にする。 DNSルックアップにおいてDNSサーバへIPアドレスを問い合わせ、ホスト名を得る方法はリバースルックアップ(逆引き)と呼ばれる。

  • DNSルックアップ:「ドメイン名→IPアドレス」or「IPアドレス→ドメイン名」
  • フォワードルックアップ:「ドメイン名→IPアドレス」
  • リバースルックアップ:「IPアドレス→ドメイン名」

5.3.4. ネームリゾルバ

ネームリゾルバとは名前解決を行うソフトウェアのこと。 ネームリゾルバはDNSクライアントの要求に応じてDNSサーバに名前解決の問い合わせを行う。