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

無料レッスン

NAT の基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

仮想マシンラボ読了目安 7分コマンド4個

このレッスンですること

10.0.0.0/24 のようなプライベートネットワークの中のマシンには、インターネット側から返事を届ける道がありません。NAT(ナット、network address translation、アドレス変換)は、ゲートウェイがその代わりに通信してくれるしくみです。このレッスンでは、小さなネットワークを見て、答えの返ってこない要求を送り、なぜ返ってこないのかを調べます。直すことはしません。それはラボ自身の課題です。

始める前に

メモ

このレッスンの上のバーにある ラボを起動 を押してください。このラボは、あなた専用の Ubuntu マシン まるごとで、中に小さなマシンが3台作られています。コンテナより起動に少し時間がかかります。下の 実行 ボタンは、マシンのターミナルにコマンドを順番に入力します。「マシンはまだ起動中です」と出たら、数秒待ってからもう一度押してください。実行の様子を見たり、自分でコマンドを打ったりするときは、バーの ターミナルを開く(新しいタブ) を押します。

1. マシンを確かめる

マシンはそれぞれ別々の ネットワーク名前空間(network namespace、1台の中に作った独立したネットワークの部屋)で、自分のアドレスを持っています。lan はプライベート側のマシン、srv は外側にあるサーバー、gw は両方にケーブルがつながったゲートウェイです。gw のアドレスは、LAN 側が 10.0.0.1、外側が 203.0.113.1 です。最後の3行は、どのマシンが Web ページを出しているかを示します。

コマンド
netlab status

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

2. 外のサーバーにページを頼む

sudo ip netns exec lan は、後ろに続くコマンドを lan の中で実行します。curl は外のサーバーにページを頼み、3秒待って諦めます。結果は Connection timed out(接続がタイムアウトしました)です。要求は lan を出ましたが、何も返ってきませんでした。--noproxy '*' は、この VM 自身が使っている Web プロキシ(代わりに通信する中継役)を curl が使わないようにします。ここにあるマシンからは、そのプロキシに届かないからです。

コマンド
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/

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

3. 外のサーバーが何を知っているか調べる

ルート(route、経路)は表の1行で、「このネットワークに行くには、こちらへ」と書いてあります。外のサーバーにあるのは、自分のケーブル用の 203.0.113.0/24 の1行だけです。10.0.0.0/24 への行はありません。そのため、要求が届いたとしても、答えはプライベートアドレスに戻る道を持っていません。

コマンド
sudo ip netns exec srv ip route

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

4. ゲートウェイが何をしているか調べる

ゲートウェイのルールは nftables で書かれています。ここに出るのが全部です。LAN から始めた通信は通し、それ以外は捨てるチェーン(ルールの並び)が1つだけあります。アドレスを 変換(translate)するルールはありません。足りないのは、それです。

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

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

ラボに進みましょう

ヒント

要求に答えが返らない理由が分かりました。通るようにするのが、このラボの課題です。ターミナルで cat README.md と打って、ホームフォルダの README.md を開いてください。何をするかが書いてありますが、答えは書いてありません。

先生へ

ヒント

このレッスンは ラボで進めるレッスン の小さな例です。手順と 実行 ボタンがレッスンで、ラボは生徒一人ひとりのコピーです。このレッスンは VM ラボで進めます。生徒それぞれが、中にネットワークが入った自分専用の Ubuntu マシンを持ち、実行ボタンはそのターミナルに入力して、出力を表示します。ラボには、完成したゲートウェイを、そのあとネットワークがどう動くかで採点する確認があります。自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューから一から作ってください。

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

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。