DHCP と DNS のラボ:小さなネットワークの dnsmasq をブラウザーで設定

このラボでは、各生徒が自分の Ubuntu VM の中に小さなネットワークを持ちます。サーバー1台と、アドレスを持たずに始まるコンピューター2台、pc1 と pc2 です。サーバーでは何も設定されていない dnsmasq が動いていて、生徒はそれにアドレスを配らせ、ラボの名前に答えさせる設定ファイルを1つ書きます。生徒のコンピューターには何もインストールされず、結果はスクリプトが採点するので、先生が1台ずつ確認する必要はありません。

生徒が学ぶこと

コンピューターがどのようにアドレスを得て、名前を見つけるか。DHCP では、リースするアドレスの範囲、リースの期間、サーバーがすべてのクライアントに伝えるルーターと DNS サーバー、そしてハードウェア(MAC)アドレスで選んだ1台に固定のアドレスを与える方法です。DNS では、サーバー自身の設定にあるレコードから名前に答え、サーバーには転送先がないので、それ以外の名前はすべて拒否することです。本物のツールも使います。サーバーでは dnsmasq、クライアントでは dhclient と dig、結果を読むには ip、やり取りを見るには tcpdump です。

ネットワークとタスク

サーバーは 10.0.10.1 にあり、pc1 と pc2 は同じスイッチにつながっていて、それぞれ README に書かれた固定のハードウェアアドレスを持ちます。生徒は /etc/dnsmasq.d/lab.conf を書き、サーバーが決められた範囲から12時間のリースでアドレスを配り、クライアントに決められたルーターと DNS サーバーを伝え、pc2 には常に決められた1つのアドレスを与え、files.lab と printer.lab に決められたアドレスで答え、それ以外には答えないようにします。README には各数値が書かれていますが、オプション名や設定の行は書かれていません。

ブラウザーで動かす

VM ラボはモジュールのラボ課題として出し、サンプルはラボのページにあります。マシンは小さく、CPU は1つ、メモリは 1 GB、ディスクは 10 GB です。

  1. ラボを追加する. 自分が教えるモジュールで課題を追加し、「Ubuntu VM ラボ」のカードを選びます。ページにはcompose ファイルの代わりにマシンの短い記述が表示されます。
  2. サンプルから始める. ページには、そこから始められるサンプルのラボが用意されています。DHCP and DNS with dnsmasq を選びます。サンプルを使うとテキストが置き換わりますが、「元に戻す」で自分のテキストに戻せます。
  3. 公開して自分のコピーを起動する. 「公開」してから「起動」を押します。VM の初回起動時に、ラボ自身の setup スクリプトが Ubuntu のアーカイブから dnsmasq、DHCP クライアント、dig、tcpdump をインストールし、3台のマシンを作ります。所要時間は数秒です。
  4. ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。サーバーがすべきことが書かれていて、答えは書かれていません。

このラボの基本レッスン

DHCP and DNS Basics は、このラボ(Ubuntu VM)で行う小さなレッスンです。各ステップに説明と「実行」ボタンがあり、押すとそのコマンドがマシンのターミナルに入力されて、出力が表示されます。生徒は3台のマシンを確認してクライアントにアドレスがないことを見て、pc1 にアドレスを求めても何も得られず、サーバーに名前を尋ねると拒否され、空の設定ファイルを読みます。

レッスンは見て回るだけで、ラボ自体の課題である設定の記述は生徒に残すので、答えは出てきません。意図的に小さくしてあり、ラボで行うレッスンがどんなものかを先生に見せるもので、残りはラボが担います。変更したい場合は、自分のモジュールにコピーしてください。

採点の仕組み

ラボにはチェックがあります。保存されたマシンのコピーを新しく起動して実行するので、生徒が保存したものだけが見えます。動いていた dnsmasq を止め、/etc/dnsmasq.d の保存されたファイルから新しく起動し、2台のクライアントを消去して、本物の DHCP クライアントでもう一度アドレスを求めさせます。そのうえで結果を読みます。各クライアントが範囲内のアドレスと、課題が求めるルーター、DNS サーバー、12時間のリースを持っていること、pc2 が固定アドレスを持っていること、2つの名前が正しいアドレスに解決され、ほかの名前は拒否されるか見つからないことです。クライアントに手で入力したアドレス、すべての名前に答えるワイルドカード、/etc/hosts に書いた名前、保存していないファイルで手で起動した dnsmasq は合格せず、チェックが出力した最初の行にどの部分がなぜかが書かれます。

  1. 配布する. ほかの課題と同じようにラボを配布します。期限を付けることもできます。各生徒には専用の VM が渡され、セッションをまたいで保持されます。
  2. チェックを実行する. クラス一覧の生徒の行で「チェックを実行」を押します。保存されたマシンのコピーが(元には保存されない形で)起動し、ラボのチェックスクリプトが root で実行されて、合格したか、何を出力したか、いつかが表示されます。結果は生徒には知らされません。
  3. 採点する. チェックが出力した最初の行を読みます。正しくない最初の点とその理由が書かれています。足りない場合は理由を書いて差し戻します。

GitHub の定義ファイル

このファイルはラボの定義そのもので、プラットフォームが実行するのと同じテキストです。サイズ、setup スクリプト、README、チェックが入っています。コピーして、setup とチェックの両方でアドレスと名前を変えれば、自分のラボになります。

よくある質問

このラボには2台目の DHCP サーバーや本物のルーターが必要ですか?
いいえ。サーバーとクライアントは生徒の VM の中で仮想スイッチでつながれたネットワーク名前空間で、クライアントに伝えられるルーターはリースの中のアドレスにすぎません。競合する別の DHCP サーバーはありません。
ラボの外の名前を引くことはできますか?
いいえ。VM が届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけで、ラボの DNS サーバーには名前を転送する先がないため、ラボは自分の2つの名前以外を拒否するか見つからないことを求めます。
DHCP と DNS のラボでは何がチェックされますか?
チェックは保存されたファイルから dnsmasq を起動し、2台のクライアントにアドレスを取り直させて結果を読みます。各クライアントが範囲内のアドレス、ルーター、DNS サーバー、12時間のリースを持ち、pc2 が固定アドレスを持ち、ラボの2つの名前が解決でき、それ以外の名前は拒否されることが条件です。