NAT, etc.
NAT,総合演習

講義

PC とインターネットの爆発的な普及により 32 ビットしかない IP アドレス(バージョン 4) が枯渇している.解決法として

という方法が挙げられる.IPv6 に移行するほうが抜本的解決になるが, セキュリティ上内部ホストは外に出さないほうがかえって良いなどの 理由から現在は IPv4 に NAT, NAPT を組み合わせて解決している.

NAT, NAPT はルータが行う処理である. ルータはグローバル IP アドレスが 割り当てられているインターネット側と インターネットとは分離された内部ネットワーク側の両方に接続されている. 図. 14.1 は破線内が内部ネットワークであり, ルータ A が NAT を行う例である. ルータ A の外部ネットワーク側のグローバル IP アドレスが 150.7.136.61 であり, 内部ネットワーク側の IP アドレスが 192.168.1.1 だったとする. 内部ネットワークにある,IP アドレスが 192.168.1.3 のホスト B からインターネット上の IP アドレス 210.230.223.119 (グローバル IP のはずである)のホスト D へパケットを送信したい時,まず内部ネットワークを使ってルータへ 送信元が 192.168.1.3,宛先が 210.230.223.119 のパケットとして送信する. ルータはパケットの発信元のIPアドレスを自身のグローバルIPアドレスに書き換えて ホスト D に向けて発信する.ホスト D からは ルータ A から来たパケットに見える.HTTP のリクエストなどであった場合は 返答のパケットを宛先をルータ A として送る. パケットがルータに外部ネットワークを使って 到達すると,変換表に従って内部ネットワークを使い,宛先をホスト B に書き換えてホスト B に送る.

NAT

図. 14.1 NAT

上記のアドレスの書き換えにより内部から外部への通信を可能にすることが NAT の機能である.しかし,これでは読み替えが 1 対 1 であり, 同時に接続できるホスト数は増やせない.NAPT では, これにポート番号の割り当てをあわせることで複数の内部の IP アドレスの ホストを同時に外部へ接続することを可能にしている.

NAPT

図. 14.2 NAPT

NAPT ではルータから外部へ出た後のパケットの発信元 IP アドレスは 単純な NAT を同じでルータ A のグローバル側のアドレスだけであるが, 内部のホストの IP アドレスごとに異なるポート番号を割り与えて 送信パケットに追加し,表に記録しておく. 戻って来た返信も A 宛になるが, パケットに書かれているポート番号を読むことで内部の発信元が どのホストだったかを知り, 本来の発信元だった内部ホストに送信先を読み替えて返す.

TCP, UDP を使用した通信の場合,

の 5 つが一つでも異なる通信は異なる通信であると扱う. NAPT ではこれを利用し,ルータのグローバル IP アドレス がこちら側のアドレスとなっているパケットを分類する.

図 14.2 のパケットがホスト D への HTTP リクエストであった 場合,ホスト D からの返信パケットはどちらもルータ A の グローバルIPアドレス宛になるが,ポート番号 1025 のリクエスト に対しては同じ 1025 番を記載して返信し,1026 番のリクエスト には 1026 番を記載する.ルータ A はこれを読み取って ホスト B への返信とホスト C への返信を区別し,  変換テーブルを参照して正しいホストへ送る.

これにより同時に接続できるホスト数を増やすことができる.

具体例を使って必要性を説明する.IP アドレスが足りない例として, 使用可能な IP アドレスとして 150.7.136.61 を 1 個だけ研究室に割り当てられているとする. この条件で複数台のホストを研究室で 同時にインターネットに接続するために NAPT を利用する.

ルータに使用するホストにネットワーク機器を 2 個導入する. 片方のネットワーク機器にグローバル IP アドレスの 150.7.136.61 を設定する.

次に研究室内に閉じた内部ネットワークを作成する. 内部ネットワークの全てのホストにも IP アドレスが必要であるが, 外部と接続しないという条件で使うことが許されている IP アドレスが予約されている. これをプライベートIP アドレスと言う.具体的には 外部と接続しないネットワークに使うための IP アドレスが予約されている. プライベート IP アドレスは以下の範囲のアドレスである

10.0.0.0 10.255.255.255
172.16.0.0 172.31.255.255
192.168.0.0 192.168.255.255

研究室内の計算機が高々 100 程度であればホストアドレスは 8 ビットあれば十分である. この場合,内部ネットワークをネットワークアドレスとして, 例えば 192.168.0/24 を使って構築し,ルータの内部ネットワーク側の機器を この 192.168.0/24 に属する IP アドレスに設定して接続し,ルータで NAPT を動作させる.

NAPT を行わない NAT は実際には使われることはほとんどないので 実際の計算機管理の場面で NAT という言葉は NAPT までを含んだ 意味合いで使われることが多い. Linux では多くの場合 NAPT を IP マスカレードと呼ぶ.

実習

今回の実習で構成するネットワークは以下のものである.

NAT実習

図. 14.3 ネットワーク設計図

実習0

まずハードウェアの準備を行う. 各班の代表者が後ろの棚よりハブ,USB イーサーネットデバイスなどの入った ボックスを受け取る.

1 号機 の USB ポートに USB イーサネットデバイスを接続せよ. USB イーサネットでバイスを接続する PC は 1 号機だけである. 図 14.3 ではこれを USB LAN ポートと記述している. 1 号機の USB LAN ポート以外の接続はすべて内蔵 LAN ポートを 使用する.図 14.3 に従ってケーブル,ハブを配線せよ.

接続が終ったら Ubuntu の自分のパーティションを起動し 各デバイスの IP アドレス関連の設定を行う.

今回の実習も 1 号機についてだけ経路制御の有効化が必要である. 第 6 回実験で有効化を行っているはずであるが確認する. 1 号機にログインし,gedit などで /etc/sysctl.conf ファイルを開き,

net.ipv4.ip_forward=1

と書かれた行の先頭に # 記号が無いことを確認せよ. 無ければ有効化された状態なのでそのまま実験を進め.

#net.ipv4.ip_forward=1

のように # 記号があれば有効化されていない. 第6回実験の経路制御機能の有効化 を参考に有効化の作業を行って次に進め.

実習 1

各 PC の ホスト名と IP アドレスを図 14.3 に従って設定する.

1号機

ホスト名を今回は再起動しても変わらないように設定する. まずターミナルから hostname コマンドを引数なしで実行し, 現在設定されているホスト名を確認する.

変更するファイルは /etc/hostname と /etc/hosts の 2 個である. 両方のファイルのうち上で調べた現在設定されているホスト名が 書かれている部分を表 14.1 のホスト名に書き換えればよい gedit など(管理者権限が必要)で書き換えを行え.

1 号機には IP アドレスを 2 個設定する必要がある. 内蔵 LAN ポートに外側のネットワーク, USB LAN ポートに内側のネットワークを 接続する.デバイスの名前は通常は 内蔵 LAN ポートが eth1, USB LAN ポートが eth2 になっているが,これまでの作業で 変わっている班もある.ifconfig などで MAC アドレスを 調べることで確認せよ.MAC アドレスが d8:d3:85 で始まるものが内蔵 LAN ポート,00:24:a5 で始まるものが USB LAN ポートである.説明は内蔵 LAN を eth1, USB LAN を eth2 として行う異なる場合は適宜読み替えよ.

図 14.3 は 1 班の例であるが,この場合は 内蔵 LAN ポートである eth1 に 172.17.2.1/16 を を設定し,USB LAN ポートにあたる eht2 に 192.168.1.1/24 設定する.サブネットマスクが異なるので注意せよ. デフォルトゲートウェイは 172.17.254.254 を DNSサーバは 172.17.2.60 を 設定せよ.各班の 1 号機の 内蔵 LAN ポート の IP アドレス,ホスト名を表 14.1 に示す. 各班に割り当てられた値を設定せよ. USB LAN ポートの IP アドレス, デフォルトゲートウェイとDNSサーバは全班共通である.

表 14.1 1 号機の設定表

USB LANホスト名
1 班 172.17.2.1/16pc011
2 班 172.17.2.2/16pc021
3 班 172.17.2.3/16pc031
4 班 172.17.2.4/16pc041
5 班 172.17.2.5/16pc051
6 班 172.17.2.6/16pc061
7 班 172.17.2.7/16pc071
8 班 172.17.2.29/16pc081
9 班 172.17.2.30/16pc091
10 班 172.17.2.31/16pc101
11 班 172.17.2.32/16pc111
12 班 172.17.2.33/16pc121
13 班 172.17.2.34/16pc131
14 班 172.17.2.35/16pc141

以上の設定が終了したら再起動させよ. 起動後にターミナルから以下の確認を行え.

  1. hostname コマンドでホスト名が正しく設定されていることを 確認(引数なしで hostname コマンドを実行すると現在設定されているホスト名が表示される)
  2. インターフェースの名前(eth1, eth2 など) が変わっている場合があるので ifconfig で確認. 2 つの IP アドレス,サブネットマスク が正しく設定されていることを確認.
  3. route -n ででフォルトゲートウェイが正しく設定されていることを 確認(「受信先サイト」0.0.0.0 がデフォルトゲートウェイを示す. この行の「ゲートウェイ」欄に書かれているのが設定されているデフォルトゲートウェイ)
  4. cat /etc/resolv.conf で DNS サーバのが正しく設定されていることを確認 (nameserver の後が設定されている DNS サーバ)

2号機

2 号機のホスト名は自班の 1 号機の名前の末尾を2 にしたものとする. 1 号機と同様に /etc/hostname と /etc/hosts を書き換えよ.

2 号機の内蔵LANポート(eth1) に自班の 1 号機の外部ネットワーク側の IP アドレス(172.17/16 のほう)に 7 加えたもの を設定せよ. デフォルトゲートウェイ,DNS サーバは 1 号機と同じとする.

2 号機も設定終了後再起動し,1 号機と同じ方法で ホスト名,IP アドレス,サブネットマスク, デフォルトゲートウェイ,DNS サーバの確認を行え.

3,4 号機

3,4 号機のホスト名は自班の 1 号機の名前の末尾をそれぞれ 3,4 にしたものとする.1 号機と同様に /etc/hostname と /etc/hosts を書き換えよ.

3 号機の内蔵LANポート(eth1) には 192.168.1.2/24 を, 4 号機の内蔵LANポート には 192.168.1.3/24 を 設定せよ.3, 4 号機のデフォルトゲートウェイは自班の 1 号機の内部ネットワーク側の IP アドレスである 192.168.1.1/24 を指定し, DNS サーバは 172.17.2.60 を指定せよ.

設定が終了したら再起動し,1 号機と同じ方法で ホスト名,IP アドレス,サブネットマスク, デフォルトゲートウェイ,DNS サーバの確認を行え.

実習1.1

1 号機の内部側 IP アドレスと 3,4 号機は互いに ping が通るはずである. 確認せよ.

実習1.2

1,2 号機からインターネット上のホスト antares.yamamotolab.jt.u-tokai.ac.jp への ping は通るが 3,4 号機から同ホストへの ping は通らないはずである.確認せよ.

実習 2

ここまでの実習で,外部ネットワークと内部のネットワークは 独立して設置済みで,1 号機の USB LAN は外部ネットワークへ, 内蔵 LAN は内部ネットワークへ接続されている状態である.(図14.1 参照) この時点では内部ネットワークと外部ネットワークは通信できない.(実習1.2) 1 号機で NAPT サービスを行うことで内部ネットワークに所属する複数の ホストが外部ネットワークに同時に接続できる.

ファイアウォールサービスである iptables で NAPT を行うことができる. Linux ではこれを IP マスカレードと呼ぶことが多い. NAPT を作動させるためには以下の一行の iptables コマンドを 管理者権限で実行するだけでよい.1 号機で実行せよ.

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE

iptables で間違ったルールを登録してしまった場合,登録したコマンドの "-A" の部分を "-D" に変えたコマンドを入力することで該当する ルールを消すことができる.

これで NAPT が実行され,3,4 号機も外部ネットワークに接続できる はずである.ブラウザから適当なウェブサイトを表示し,確認せよ.

今回はファイアウォールの設定を再起動後も有効にする方法を説明する. iptables は現在の設定状態をファイルに書き出したり, 逆にファイルから設定すべき状態を読み取り, その設定になる,という機能があるのでそれを利用する. 以下が一般的な手順である.

  1. 第 12 回実験のように設定スクリプトを作成し, 管理者がわかりやすい所に保存する. 設定スクリプトは iptable コマンドを繰り返し実行し, 望みの設定にするシェルスクリプトである.
  2. 作成したシェルスクリプトを実行する. このとき,iptables は管理者が設計した状態になる.
  3. 今の iptables の状態をファイルに書き出すコマンド を実行する.
  4. 起動時に iptables が自動的にそのファイルを読み込む ように設定する.

各手順を順番に行え.作業はすべて管理者権限で行う.

手順 1

今回は NAPT だけを行う以下のスクリプトを作成する. su - コマンドで root になり root のホームディレクトリ /root 直下に set_iptables.sh という名前で保存し, ファイルに実行権限を与えよ.(chmod 755 set_iptables.sh)

#!/bin/sh

iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE

図 14.4 set_iptables.sh

最初のコマンドでnat テーブルを初期化し, 次のコマンドで NAPT を設定する単純なスクリプトである.

手順 2

まず,確認の為に以下のコマンドで nat テーブルを初期化せよ.

iptables -t nat -F

iptables -t nat -nL を行い,現在の iptables の nat テーブルの設定を確認せよ.

作成した set_iptables.sh を実行し, その後 iptables -t nat -nL を行え.変化があったところを記録せよ.

手順 3

iptables の今の状況をファイルに書き出すコマンドは 「iptables-save > ファイル名 」である. 保存場所とファイル名はここでは /etc/iptables-rules とする. 以下のコマンドを入力せよ.

iptables-save -c > /etc/iptables-rules

手順 4

/etc/network/if-pre-up.d というディレクトリに 保存してあるコマンドはネットワークの起動の前に 自動的に実行される.この機能を利用し, このディレクトリに iptables の設定をファイルから 読み込むコマンドを書けばいい. 具体的には以下の手順を行え.

cd /etc/network/if-pre-up.d を行い, ls を実行してどんなファイルがあるか確認する. これから iptables-start というファイルを作るので 同じ名前のファイルが無い事を確認する.

gedit iptables-start としてファイルを開き, 以下のシェルスクリプトを書き込み,保存する.

#!/bin/sh

/sbin/iptables-restore < /etc/iptables-rules
exit 0

iptables-start に実行権限を付ける.(chmod 755 iptables-start)

これで起動時から NAT が動作するはずである.再起動し, iptables -t nat -nL を実行して確認せよ.3, 4 号機からブラウザで 外部ネットワークのサイトを閲覧し,動作していることを確認せよ.

今回作成した set_iptables.sh スクリプトは NAPT を実行するだけのものでファイアウォールは全てのパケットを 通す設定である. 実用として運用する場合はファイアウォールの設計を熟慮して set_iptables.sh に各種パケットフィルタリングを記述する.

実習 3

内部ネットワークで DHCP を作動させる. 1 号機を DHCP サーバとして設定する.

DHCP サーバを第7回でインストールしていても アップデートを行う.管理者権限で apt-get update コマンドを実行した後, apt-get install dhcp3-server を実行し,アップデートを行え.

第 7 回実験「DHCP」 を参考に自分で手順を考えて設定せよ.

DHCP で貸し出す IP アドレスの範囲は 192.168.1.101 から 192.168.1.200 まで とする.今回は option のデータである,

という設定も DHCP サーバからから供給されるように 設定できる.結局,dhcpd.conf への追加は以下のものとなる.

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.101 192.168.1.200;
  option routers 192.168.1.1;
  option domain-name-servers 172.17.2.60;
}

図14.5 dhcpd.conf への追加分

3, 4 号機のネットワーク接続の設定を自動にし, ifconfig 等で DHCP から得た情報が得られていることを 確認し,実際に外部ネットワークのウェブサイトが閲覧できることを 確認せよ.

実習 4

第 8 回実験「ウェブ」 を参考に 2 号機にウェブサーバを設置せよ. userdir を有効にし,班員のだれかの ユーザのホームディレクトリの public_html にウェブページを作成し,3,4 号機から閲覧せよ. IP アドレスでもアクセスできるが, 教卓サーバで DNS が設定されているので pcA2.1b202.jt.u-tokai.ac.jp でもアクセスできる.(Aは班番号の 2 桁表記)

課題

第 13 回課題「NAT」 を提出せよ.


Updated in July 4, 2010, index.html, Yamamoto Hiroshi