クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

NATでインターネットを共有する

このレッスンのあとで: 事務所をNATでインターネットにつなぐしくみを説明できる。

45分のレッスンコマンド5件NAT ゲートウェイのラボ:nftables でマスカレードとポート転送をブラウザーで学ぶ

家のスマホは同じ番号で外に出る

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テーブルをポートで引きます。そして宛先を元の機器に戻して渡します。

例:事務所の三台と一つのアドレス

機器機器を出るときゲートウェイを出るとき
営業のPC192.168.1.20 ポート 40000198.51.100.5 ポート 40000
制作のPC192.168.1.21 ポート 40000198.51.100.5 ポート 40001
プリンター192.168.1.30 ポート 52000198.51.100.5 ポート 52000

学生が入力するセルは、このプレビューでは空白です。

ゲートウェイの記憶を読む

コマンド
sudo ip netns exec gw conntrack -L

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ゲートウェイは接続を一つずつ覚える

一行が、ゲートウェイの見た一つの接続です。lan の頼みには SYN_SENT と [UNREPLIED] が付き、返事が来なかったと分かります。

gw 自身の頼みには TIME_WAIT と [ASSURED] が付き、返事が来て閉じたと分かります。

ポート転送で一つだけ中へ通す

NATは、内側から始まった接続のためのものです。外から始まった頼みは、テーブルのどの行にも合わず、捨てられます。

事務所でサーバーを公開したいときは、ポート転送を足します。たとえば外のポート 8080 を、内側のサーバー一台に回します。

例:ポート転送の決まり

外のポート内側のアドレス内側のポート用途
8080192.168.1.4080事務所のWebページ
2222192.168.1.4122管理用の接続

学生が入力するセルは、このプレビューでは空白です。

ゲートウェイのルールを読む

コマンド
sudo ip netns exec gw nft list ruleset

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

NATが外からの攻撃を止めている、と思いがちです。NATはアドレスの書き換えだけで、何を通すかはファイアウォールのルールが決めます。このゲートウェイでは、forward チェーンの policy drop が外からの通信を止めています。

さらに挑戦:同じ外のポートを二台に

外のポート 8080 を、サーバー二台の両方に回すことはできるでしょうか。

自分の is_forwarded で、8080 の行を二つ入れて試しましょう。外から来た一つの頼みを、ゲートウェイはどちらに渡せばよいでしょうか。

このラボとソースについて: NAT ゲートウェイのラボ:nftables でマスカレードとポート転送をブラウザーで学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。