Thursday, September 24, 2009

The Virtual Problem

Problem Description

This is the current state of the networking class.
  • A classroom of about 40 students.
  • 12 dedicated servers used for lab assignments.
    • 512 MB RAM each
    • Host to 3 virtual machines: 2 linux (knoppix) and 1 windows XP
    • VMs are connected by a virtual network
Because of the limited availability of servers, students are required to get into groups and select one of the 12 available servers to work on. They use VMWare Server Console to connect to a server and control the virtual machines.

This setup might work well for small classes, where mostly groups of 2 can be formed. When we start getting into groups of 3 and 4, something interesting happens. One student, usually the one with most networking experience, takes control of the server and finishes the lab as fast as possible. The other group members don't follow the procedure, don't understand what just happened, and hope for the best when they turn in their answers. This makes the lab useless for the experienced ones who already knew the outcome of the lab. It also makes it useless for the ones who didn't get to control the server and didn't get to learn anything.

The Proposed Solution

I am looking for a way to provide each student a complete, portable lab environment that can be used anywhere. Ideally this lab environment would be carried on a USB stick and used wherever and whenever the student wishes.

Here are the requirements:

  • 3 Virtual Machines (I'm leaning towards all 3 being Linux because of licensing issues)
  • (monitor) The first VM is the router/monitor and has 3 network interfaces:
    • eth0: connects to the outside world
    • eth1: connects to network 1
    • eth2: connects to network 2
  • (labmachine1) The second VM is a workstation on network 1 and has 1 network interface:
    • eth0: connects to network 1
  • (labmachine2) The third VM is a workstation on network 2 and has 1 network interface:
    • eth0: connects to network 2
The router/monitor VM is what connects networks 1 and 2 so that labmachine1 and labmachine2 can communicate. This is also where we run tcpdump to monitor the network traffic and analyze it later. The connection to the outside world is used to transfer the capture files to the host computer, or any other location.

So the first idea was to find a way to make a portable virtual machine. I know there are projects out there such as Portable Apps that specialize in making software that would otherwise be run on your computer, completely portable. I imagined that by now there would be some kind of virtualization software available. I was right, well, sort of. While I did find a Portable Virtualbox, it didn't work as expected and turned out to be buggy and impossible to configure. Plus, it was Windows only and a lot of students these days are running Mac OS X or Ubuntu, so I needed to be flexible.

At this point I would be happy if I could package all the VMs and installation files on a USB stick and have some installation script setup all the virtual machines automatically. I was between two programs:
VMWare is a long time player in the virtualization arena. Its standards are supported by almost every other virtualization application out there and it has a solid presence in the enterprise.
Virtualbox is relatively new in the game but it has grown significantly, especially after it was acquired by Sun. With every release it has become more flexible and robust. It has great scripting abilities and it's free.

And the winner is: VirtualBox!

The fact that VirtualBox is free and open source makes it an easy choice for large distributions. VirtualBox also has great command line control and scripting capabilities. The vboxmanage command allows me to configure every aspect of the virtual machines i'm deploying.

So the choice is made. Next we will see how the search for the VM operating systems and their configuration took place.

Here we go...

In a short while I will be sharing my crazy experiences with virtual machines. The goal was to setup a virtual lab environment for an introductory course in computer networking. Many tools and configurations were tested, most failed miserably, but some progress has been made and things look quite promising. Stay tuned for more.