家のスマホは同じ番号で外に出る
NAT(ネットワークアドレス変換)は、たくさんの機器が一つのグローバルアドレスを分け合うしくみです。家のスマホもゲーム機も、外から見れば同じアドレスです。
小さな事務所のルーターも同じです。どうして混ざらずに、返事が正しい機器に戻るのか、見てみましょう。
このレッスンのゴール
メモ
事務所をNATでインターネットにつなぐしくみを説明できる。
重要な言葉
| ことば | いみ |
|---|---|
| NAT | 通るパケットの送り主を、ゲートウェイが書き換えるしくみ |
| グローバルアドレス | インターネットで一か所にしか無いアドレス |
| ポート | 一台の中で、どのプログラムの通信かを表す番号 |
| NATテーブル | どの接続が誰のものかを覚えておく表 |
| ポート転送 | 外の一つのポートを、内側の一台に回す決まり |
| ファイアウォール | 通してよい通信を決めて、ほかを止めるルール |
学生が入力するセルは、このプレビューでは空白です。
プライベートアドレスには返事が届かない
事務所の機器は、プライベートアドレスを使います。インターネットのルーターは、そこへの道を知りません。
だから 10.0.0.2 からの頼みはサーバーに届いても、サーバーの返事には行き場がありません。返事は途中で消えます。
三台の機械を見る
netlab statusここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
内側から外のサーバーに頼む
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
出口の機械から同じ頼み
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
返事が来る頼みと来ない頼み
gw には、内側の 10.0.0.1 と外側の 203.0.113.1 の二つのアドレスがあります。内側の lan は 10.0.0.2 です。
lan からの頼みは、三秒待って Connection timed out と出ます。gw からは、すぐに outside-server: you are 203.0.113.1 と返ります。
ゲートウェイが送り主を書き換える
NATでは、ゲートウェイが出ていくパケットの送り主を、自分のグローバルアドレスに書き換えます。ポートの番号は、ぶつからないように選びます。
返事が戻ると、ゲートウェイはNATテーブルをポートで引きます。そして宛先を元の機器に戻して渡します。
例:事務所の三台と一つのアドレス
| 機器 | 機器を出るとき | ゲートウェイを出るとき |
|---|---|---|
| 営業のPC | 192.168.1.20 ポート 40000 | 198.51.100.5 ポート 40000 |
| 制作のPC | 192.168.1.21 ポート 40000 | 198.51.100.5 ポート 40001 |
| プリンター | 192.168.1.30 ポート 52000 | 198.51.100.5 ポート 52000 |
学生が入力するセルは、このプレビューでは空白です。
ゲートウェイの記憶を読む
sudo ip netns exec gw conntrack -Lここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ゲートウェイは接続を一つずつ覚える
一行が、ゲートウェイの見た一つの接続です。lan の頼みには SYN_SENT と [UNREPLIED] が付き、返事が来なかったと分かります。
gw 自身の頼みには TIME_WAIT と [ASSURED] が付き、返事が来て閉じたと分かります。
ポート転送で一つだけ中へ通す
NATは、内側から始まった接続のためのものです。外から始まった頼みは、テーブルのどの行にも合わず、捨てられます。
事務所でサーバーを公開したいときは、ポート転送を足します。たとえば外のポート 8080 を、内側のサーバー一台に回します。
例:ポート転送の決まり
| 外のポート | 内側のアドレス | 内側のポート | 用途 |
|---|---|---|---|
| 8080 | 192.168.1.40 | 80 | 事務所のWebページ |
| 2222 | 192.168.1.41 | 22 | 管理用の接続 |
学生が入力するセルは、このプレビューでは空白です。
ゲートウェイのルールを読む
sudo ip netns exec gw nft list rulesetここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
NATが外からの攻撃を止めている、と思いがちです。NATはアドレスの書き換えだけで、何を通すかはファイアウォールのルールが決めます。このゲートウェイでは、forward チェーンの policy drop が外からの通信を止めています。
さらに挑戦:同じ外のポートを二台に
外のポート 8080 を、サーバー二台の両方に回すことはできるでしょうか。
自分の is_forwarded で、8080 の行を二つ入れて試しましょう。外から来た一つの頼みを、ゲートウェイはどちらに渡せばよいでしょうか。