何をやっても怒られないネットワーク環境を構築した話
2023-04-07
azblob://2023/04/06/eyecatch/2023-04-06-making-virtual-network-laboratory-000.jpg

自己紹介

初めまして、2023年にFIXERに入社いたしました、富田大喜と申します。
今回は学生時代にネットワークと戯れていた話を書きますが、
ネットワーク以外にも、興味を持ったら飛びついている人です。
よろしくお願いします。

ネットワークに興味を持ったきっかけは、正直に言うと忘れました。(笑
しかし、物事の仕組みを知るのも、作るのも好きだったので、
仕組みの塊であるネットワークの世界は、自分には非常に魅力的でした。

動機

何をやっても怒られないネットワーク環境が欲しい!
それが、ネットワークに興味を持った自分の悩みでした。
自分は、物事を学ぶ際に、「実際に触れてみて、やってみて理解する」をモットーにしています。
なので、ネットワークも実際に行われているやり取りを見て、おこなって理解したいと思っていました。
見ることは、Wiresharkなどのツールで簡単に行うことができますが、
送る方は他の人の迷惑になる可能性もあったので行い難いと思っていました。
なので、何を送っても誰の迷惑にもならないネットワーク環境が欲しいと思っていました。

また、当時は貧乏学生だったので、ハードウェアを買うお金もありませんでした。
そのため、コンピュータはもちろん、ネットワーク機器も複数台必要になる実際の環境で実験を行うのは、
私にはハードルが高すぎました。

そこで、仮想マシンを複数台使って実験用のネットワークを構築することを思いつきました。
仮想マシンなら、PCが一台あれば複数台のコンピュータもネットワークもエミュレートできるので、
追加でハードウェアを買う必要がありません。
現実だと、ネットワークスイッチやルータ、LANケーブルなどを買う必要がありますが、
仮想マシンならそれすら必要ありません。
そして、お金がかからないということは、試行錯誤しやすいということでもあります。
いろいろ試行錯誤をするためにも、実験用のネットワーク環境の構築を仮想マシンで行うことを考えました。

ネットワーク構成

こんなネットワークを作りました。

ネットワークの構成図

基本的に実験用のネットワークは、外部と隔絶されています。
しかし、ツールのインストールなど、外部と通信したい場合があるので、
設定を自由に切り替えられるファイアウォール付きのルータを一つ置きました。(このルータも仮想マシンです。)
このルータは仮想マシンを動かしている親マシンからのみSSHで操作できます。

ルータに入っているファイアウォールは、
実験用のネットワークを外界から隔絶するためのもので、
設定として3段階のレベルがあります。

  • レベル1:実験用の仮想マシンは外部と通信できる。
  • レベル2:実験用の仮想マシンは親マシンとのみ通信できる。
  • レベル3:実験用の仮想マシンはどことも通信できない。(すでに確立された親マシンとの通信のみ可)

このレベルは、ルータ内に設置したシェルスクリプトから設定できるようになっています。

実際に実験を行う際は、以下の手順で行います。

  1. レベルを2に設定して、実験用の仮想マシンにSSH接続する。
  2. レベルを3に設定して、先に接続したSSHを使って、実験操作をする。

レベル1は、必要なツールをインストールするためだけに用いて、
基本的に、レベルは2か3に設定しておきます。

結論

実験用の仮想マシンが変なパケットを外に送っても、
インターネットには出ていかない実験環境を作りました。
この環境ができてから、自作のパケットを送受信したり、
簡易的な自作のプロトコルを試したりして遊んでいました。
おかげで、ある程度のネットワークの知識が得られたと思います。

今後、この環境でネットワークを学ぶだけでなく、新しいプロトコルなどを試すことができたら、
もっと面白いなぁと思います。