VLAN のラボ:VLAN と VLAN 間ルーティングをブラウザーの Ubuntu VM で
このラボは、生徒に分割するための小さなオフィスのネットワークを渡します。生徒の1台の Ubuntu VM の中に5台のマシンが作られます。スイッチ、ルーター、同じ VLAN に属するホストとサーバー、別の VLAN に属するもう1台のホストです。始めはすべてがつながっていて何も設定されていないので、全体が1つのネットワークです。生徒はスイッチに2つの VLAN を作り、1本のケーブルでルーターを通して再びつなぎ、ある VLAN をサーバーに近づけないルールを1つ足します。
生徒のコンピューターには何もインストールせず、スイッチやルーターの機器も要りません。どのマシンもネットワーク名前空間で、スイッチは VLAN フィルタリング付きの Linux ブリッジであり、コマンドは bridge vlan、ip link、nft という本物です。
生徒が学ぶこと
VLAN とは何か、なぜスイッチに必要なのか。bridge vlan コマンドで、スイッチの各ポートに VLAN を割り当て、ホスト用にはタグなしのアクセスポート、ルーターへは2つの VLAN をタグ付きで運ぶトランクポートにすること。ルーターに ip link で VLAN ごとの802.1Qサブインターフェースを作り、ホストが期待するゲートウェイのアドレスを付け、フォワーディングを有効にすること。これが1本のケーブルのルーターによる VLAN 間ルーティングです。そして、ルーターに nft のルールを1つ書いて、ある VLAN をサーバーに近づけず、そのほかはすべて動かし続けること。ping、arping、traceroute、tcpdump で確かめ、すべてを2つのファイルに書いて、再起動後も元に戻るようにします。
トポロジー
スイッチ sw には4つのポートがあります。ホスト h10 とサーバー srv は 10.10.0.0/24 の VLAN 10 に、ホスト h20 は 10.20.0.0/24 の VLAN 20 に属します。ルーター r1 のケーブルは4番目のポートへの1本だけで、まだアドレスがありません。始めはすべてのポートが既定の VLAN 1 にあるので、h20 はスイッチをそのまま通って srv に届き、ゲートウェイには誰も届きません。生徒の作業は2つのファイルに書きます。1つはスイッチの中で、もう1つはルーターの中で、ラボが起動するたびに実行されます。アドレスは、ラボがホームフォルダーに置く README にあります。README には何をするかが書かれていて、答えは書かれていません。
ブラウザーで動かす
VM ラボはモジュールのラボ課題として設定し、サンプルはラボのページにあります。マシンは小さく、CPU 1つ、メモリ 1 GB、ディスク 10 GB です。
- ラボを追加する. 自分が教えるモジュールで課題を追加し、「Ubuntu VM ラボ」のカードを選びます。ページにはcompose ファイルの代わりにマシンの短い記述が表示されます。
- サンプルから始める. ページには、そこから始められるサンプルのラボが用意されています。VLANs and inter-VLAN routing を選びます。サンプルを使うとテキストが置き換わりますが、「元に戻す」で自分のテキストに戻せます。
- 公開して自分のコピーを起動する. 「公開」してから「起動」を押します。VM の初回起動時に、ラボ自身の setup スクリプトが Ubuntu のアーカイブから iproute2、nftables といくつかの小さなネットワークツールをインストールし、vlanlab コマンド、空の設定ファイル2つ、README を書きます。所要時間は数秒です。
- ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。何を作るかが書かれていて、答えは書かれていません。
このラボの基本レッスン
VLAN Basics は、Ubuntu VM であるこのラボで行う小さなレッスンです。各ステップに説明と「実行」ボタンがあり、コマンドをマシンのターミナルに入力して、出力を表示します。生徒は、マシンを確かめてスイッチのすべてのポートが VLAN 1 にあることを見て、h20 から srv を arping で尋ねるとスイッチをそのまま通って返事が来ることを確かめ、別のネットワークに ping を送っても何も返らないことを見て、ルーターにはまだアドレスがないことを知ります。
レッスンは見て回るだけで、VLAN を作るというラボ自身の課題は生徒に任せるので、答えは示しません。レッスンはわざと小さくしてあります。ラボで行うレッスンがどういうものかを教師に見せるためのもので、残りはラボが担います。変更したいときは、自分のモジュールにコピーしてください。
採点の仕組み
このラボにはチェックがあります。保存されたマシンのコピーを再起動したあとに実行し、起動と同じように生徒の2つのファイルを読み込んでから、マシンの間で実際に起きることを調べます。同じ VLAN のホストは直接答え合い、別の VLAN のホストは答えないこと、ルーターに VLAN ごとの802.1Qサブインターフェースとゲートウェイのアドレスがあってフォワーディングすること、h10 と h20 がルーターを通して届き合うこと、h20 はどのポートでもどのプロトコルでも srv に届かず、h10 は届くことです。VLAN 20 をすべてから切り離すルールは合格せず、サーバーに置いたルール、アドレス変換、オフにした VLAN フィルタリング、手で打ってファイルに保存していないコマンドも合格しません。チェックが出力した最初の行に理由が書かれます。
- 配布する. ほかの課題と同じようにラボを配布します。期限を付けることもできます。各生徒には専用の VM が渡され、セッションをまたいで保持されます。
- チェックを実行する. クラス一覧の生徒の行で「チェックを実行」を押します。その生徒の保存済みマシンのコピーを起動し(あとで保存されることはありません)、ラボのチェックスクリプトを root で実行して、合格したか、何を出力したか、いつ実行したかを表示します。結果は生徒には伝わりません。
- 採点する. チェックが出力した最初の行を読みます。何が正しくないかが書かれています。たとえば、スイッチをそのまま通ってほかの VLAN に届いてしまうホストや、ルーターを通らなかった ping などです。足りないときは理由を付けて課題を差し戻します。
GitHub の定義ファイル
このファイルはラボの定義のすべてで、プラットフォームが実行するものと同じテキストです。サイズ、setup スクリプト、トポロジーのツール、README、チェックが入っています。コピーして、アドレスを変えたり VLAN を足したりすれば、もっと長いラボになります。
よくある質問
- このラボにはマネージドスイッチやルーター、ライセンスが必要ですか?
- いいえ。スイッチは VLAN フィルタリング付きの Linux ブリッジ、ルーターはパケットを転送する Linux で、どちらも Ubuntu 自身のカーネルの機能です。ツールは生徒の VM の起動時に Ubuntu のアーカイブからインストールされ、当社が配布するものはありません。
- 生徒はラボから本物のインターネットに出られますか?
- いいえ。VM が届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけで、それ以外には届きません。5台のマシンの間のネットワークは仮想のもので VM の中にあります。マシンは別々のコンピューターではなく、ネットワーク名前空間です。
- VLAN のラボで生徒は何を作りますか?
- スイッチ上に2つの VLAN を作り、各ホストにはタグなしのアクセスポートを、ルーターにはタグ付きのトランクを用意します。次にルーター上に VLAN ごとの 802.1Q サブインターフェースを作ります。これがルーター・オン・ア・スティックによる VLAN 間ルーティングです。最後に、ルーターの nft ルール1つで VLAN 20 をサーバーから遠ざけます。