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 です。
- ラボを追加する. 自分が教えるモジュールで課題を追加し、「Ubuntu VM ラボ」のカードを選びます。ページにはcompose ファイルの代わりにマシンの短い記述が表示されます。
- サンプルから始める. ページには、そこから始められるサンプルのラボが用意されています。DHCP and DNS with dnsmasq を選びます。サンプルを使うとテキストが置き換わりますが、「元に戻す」で自分のテキストに戻せます。
- 公開して自分のコピーを起動する. 「公開」してから「起動」を押します。VM の初回起動時に、ラボ自身の setup スクリプトが Ubuntu のアーカイブから dnsmasq、DHCP クライアント、dig、tcpdump をインストールし、3台のマシンを作ります。所要時間は数秒です。
- ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。サーバーがすべきことが書かれていて、答えは書かれていません。
このラボの基本レッスン
DHCP and DNS Basics は、このラボ(Ubuntu VM)で行う小さなレッスンです。各ステップに説明と「実行」ボタンがあり、押すとそのコマンドがマシンのターミナルに入力されて、出力が表示されます。生徒は3台のマシンを確認してクライアントにアドレスがないことを見て、pc1 にアドレスを求めても何も得られず、サーバーに名前を尋ねると拒否され、空の設定ファイルを読みます。
レッスンは見て回るだけで、ラボ自体の課題である設定の記述は生徒に残すので、答えは出てきません。意図的に小さくしてあり、ラボで行うレッスンがどんなものかを先生に見せるもので、残りはラボが担います。変更したい場合は、自分のモジュールにコピーしてください。
採点の仕組み
ラボにはチェックがあります。保存されたマシンのコピーを新しく起動して実行するので、生徒が保存したものだけが見えます。動いていた dnsmasq を止め、/etc/dnsmasq.d の保存されたファイルから新しく起動し、2台のクライアントを消去して、本物の DHCP クライアントでもう一度アドレスを求めさせます。そのうえで結果を読みます。各クライアントが範囲内のアドレスと、課題が求めるルーター、DNS サーバー、12時間のリースを持っていること、pc2 が固定アドレスを持っていること、2つの名前が正しいアドレスに解決され、ほかの名前は拒否されるか見つからないことです。クライアントに手で入力したアドレス、すべての名前に答えるワイルドカード、/etc/hosts に書いた名前、保存していないファイルで手で起動した dnsmasq は合格せず、チェックが出力した最初の行にどの部分がなぜかが書かれます。
- 配布する. ほかの課題と同じようにラボを配布します。期限を付けることもできます。各生徒には専用の VM が渡され、セッションをまたいで保持されます。
- チェックを実行する. クラス一覧の生徒の行で「チェックを実行」を押します。保存されたマシンのコピーが(元には保存されない形で)起動し、ラボのチェックスクリプトが root で実行されて、合格したか、何を出力したか、いつかが表示されます。結果は生徒には知らされません。
- 採点する. チェックが出力した最初の行を読みます。正しくない最初の点とその理由が書かれています。足りない場合は理由を書いて差し戻します。
GitHub の定義ファイル
このファイルはラボの定義そのもので、プラットフォームが実行するのと同じテキストです。サイズ、setup スクリプト、README、チェックが入っています。コピーして、setup とチェックの両方でアドレスと名前を変えれば、自分のラボになります。
よくある質問
- このラボには2台目の DHCP サーバーや本物のルーターが必要ですか?
- いいえ。サーバーとクライアントは生徒の VM の中で仮想スイッチでつながれたネットワーク名前空間で、クライアントに伝えられるルーターはリースの中のアドレスにすぎません。競合する別の DHCP サーバーはありません。
- ラボの外の名前を引くことはできますか?
- いいえ。VM が届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけで、ラボの DNS サーバーには名前を転送する先がないため、ラボは自分の2つの名前以外を拒否するか見つからないことを求めます。
- DHCP と DNS のラボでは何がチェックされますか?
- チェックは保存されたファイルから dnsmasq を起動し、2台のクライアントにアドレスを取り直させて結果を読みます。各クライアントが範囲内のアドレス、ルーター、DNS サーバー、12時間のリースを持ち、pc2 が固定アドレスを持ち、ラボの2つの名前が解決でき、それ以外の名前は拒否されることが条件です。