このレッスンですること
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 マシンを持ち、実行ボタンはそのターミナルに入力して、出力を表示します。ラボには、完成したゲートウェイを、そのあとネットワークがどう動くかで採点する確認があります。自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューから一から作ってください。