アドレスを置き換え、通信を許可する
家庭や会社のネットワークからインターネットへ接続する場面で、アドレスの置き換えと通信許可の役割を分けます。
このレッスンのメニュー
家庭のPCには、家庭内で使うIPアドレスが付いています。 インターネットへ接続するときは、家庭用ルーターがそのアドレスを、インターネット側で使うアドレスへ置き換えます。
ルーターは、届いた通信を通すか拒否するかも判断できます。 アドレスを置き換える処理と、通信を許可する処理は別々に設定します。
家庭内とインターネットで使うアドレス
家庭や会社のLANでは、インターネットへ直接流さないプライベートIPアドレスを使えます。
インターネット上で通信相手を識別できるIPアドレスは、グローバルIPアドレスと呼ばれます。 プライベートIPアドレスを送信元にしたパケットは、そのままではインターネットを越えて応答を受け取れません。
LANとインターネットの境界にあるルーターは、内側と外側のアドレスを対応付けます。 そのときに使うのがNATやNAPTです。
NATはIPアドレスを置き換える
NAT(Network Address Translation)は、パケットに書かれた送信元または宛先のIPアドレスを置き換える機能です。
内側の端末がインターネットへ送るときは、送信元のプライベートIPアドレスをルーターのグローバルIPアドレスへ置き換えます。 応答が戻ると、ルーターは宛先を元のプライベートIPアドレスへ戻してから端末へ渡します。
次の図では、一台の端末と一つのグローバルIPアドレスを対応付けています。
この例では、10.0.0.8 と 203.0.113.5 が一対一で対応します。
外部から 203.0.113.5 宛てに届いた応答を、ルーターは 10.0.0.8 宛てへ書き換えます。
送信元を書き換える処理は送信元NAT、宛先を書き換える処理は宛先NATと呼ばれます。 サーバーを別のアドレスで公開する場合には、宛先NATを使うことがあります。
NAPTはポート番号も使って通信を見分ける
一つのグローバルIPアドレスを複数の端末で共有するには、IPアドレスだけでは戻り先を区別できません。 そこで、IPアドレスとポート番号の組み合わせを使います。
NAPT(Network Address Port Translation)は、IPアドレスに加えてTCPまたはUDPのポート番号も置き換える機能です。 家庭用ルーターの設定画面で単に「NAT」と書かれていても、実際にはNAPTを使っていることがよくあります。
図の変換表には、「内側のIPアドレスとポート番号」と「外側で使うIPアドレスとポート番号」の対応が記録されています。
応答が 203.0.113.5:40001 へ戻れば端末Aへ、:40002 へ戻れば端末Bへ渡せます。
この対応は通信を始めたときに作られ、一定時間通信がなければ削除されます。 NAPTは、限られたグローバルIPアドレスを複数の端末で共有するための仕組みです。
ACLは通信を通すか決める
ACL(Access Control List)は、条件に一致する通信を許可するか、拒否するかを並べた規則の一覧です。 NATとNAPTがアドレスやポート番号を置き換えるのに対し、ACLは通信を通すかどうかを決めます。
ACLでは、主に次の情報を条件に使います。
- 通信が入ってくる方向か、出ていく方向か
- 送信元と宛先のIPアドレス
- TCP、UDP、pingなどで使うICMPといったプロトコル
- TCPまたはUDPの送信元と宛先のポート番号
- 許可するか拒否するか
多くのACLは規則を上から順に調べ、最初に一致した動作を使います。 製品によって評価方法は異なるため、設定するときはその製品の仕様も確認します。
| 優先 | 方向 | プロトコル | 送信元 | 宛先 | 動作 | 理由 |
|---|---|---|---|---|---|---|
| 10 | 入ってくる | TCP | 管理用ネットワーク | Webサーバーの22番 | 許可 | 管理用のSSH |
| 20 | 入ってくる | TCP | すべて | Webサーバーの443番 | 許可 | 公開するHTTPS |
| 30 | 出ていく | UDP、TCP | Webサーバー | DNSサーバーの53番 | 許可 | 名前解決 |
| 1000 | 両方向 | すべて | すべて | すべて | 拒否 | ほかの通信を拒否 |
最後に「ほかはすべて拒否」を置き、必要な通信だけ許可する考え方をデフォルト拒否と呼びます。 許可する理由を説明できる通信だけを通すため、不要な入口を減らせます。
入ってくる通信と出ていく通信
サーバーへ届く通信は受信方向(ingress)、サーバーから外へ向かう通信は送信方向(egress)です。 Webサイトを公開するには受信方向のHTTPSが必要です。 WebサーバーがDNSへ問い合わせるには、送信方向のDNS通信も必要です。
片方だけを見ると、接続の開始は通っても応答が戻らないことがあります。
ステートフルとステートレス
ステートフルな制御は、どちら側から始まった通信かを記録します。 外向きに始めたTCP接続を許可すると、その接続に対する応答を自動で戻り通信として扱えます。
ステートレスな制御は、一つひとつのパケットを独立して判定します。 この場合は、応答が戻る方向にも対応する規則が必要です。
NAT、NAPT、ACLの役割を比べる
| 機能 | 何をするか | 何を決めないか |
|---|---|---|
| NAT | IPアドレスを置き換える | 通信を許可するか |
| NAPT | IPアドレスとポート番号を置き換える | 通信を許可するか |
| ACL | 条件に合わせて通信を許可または拒否する | IPアドレスの変換方法 |
NATやNAPTを使うと外側から内側へ直接接続しにくくなる場合がありますが、その効果だけを通信の許可設定として扱うことはできません。 外部へ公開する通信と内部だけで使う通信は、ACLやファイアウォールで分けます。
変換と許可を分けて考える
端末 192.168.1.20 が、家庭用ルーターを通してWebサイトへ接続する場面を考えます。
- NAPTが置き換える送信元IPアドレスとポート番号を挙げてください。
- Webサイトから応答が戻ったとき、ルーターは何を見て端末を選ぶでしょうか。
- ルーターの管理画面をインターネットへ公開しない場合、ACLは何を拒否すればよいでしょうか。
NAPTの変換表とACLの規則は、別々に書いてみましょう。
次は、Linuxで状態を確かめる
ネットワークの三ページでは、データの通り道、宛先の選び方、アドレス変換、通信の許可を外側から見ました。 次のLinuxのきほんでは、サーバーのOSへ入り、ファイル、プロセス、通信の状態を自分で確認する方法を学びます。
このレッスンは完了
このページで扱った流れを確認したら、次の内容へ進みます。