This document will explain how to use Open Source Software Switch, called as Open vSwitch for providing network connection between Virtual Machine inside the VirtualBox virtualization platform.


Component Used

1. Ubuntu Linux 12.04 LTS (Precise Pangolin)

2. VirtualBox Software 4.2 (downloaded from Ubuntu Repository Server)

3. Open vSwitch Software Switch 1.4 (Installed from Ubuntu Repository Server)


Installation VirtualBox

VirtualBox can be installed very easy using aptitude tool from Ubuntu Repository Server.

aris@djogja:/opt$ sudo apt-get update
aris@djogja:/opt$ sudo apt-get install dkms
aris@djogja:/opt$ sudo apt-get install virtualbox-4.2

If there is any error because of signatures error from VirtualBox website

W: GPG error: precise InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 54422A4B98AB5139

So, the key need to be install manually using this command below.

aris@djogja:/opt$ wget -q -O- | sudo apt-key add –

After key installation success, please repeat DKMS and VirtualBox installing command


Installation of Open vSwitch

Open vSwitch also can be installed very easily through Ubuntu Repository Server using aptitude tools. There are some mandatory packages need to be install but there are some additional fitur which can be installed to utilize the Open vSwitch. The mandatory package such as Open vSwitch datapath can be installed using this following command.

aris@djogja:/opt$ sudo apt-get install openvswitch-datapath-source bridge-utils
aris@djogja:/opt$ sudo module-assistant auto-install openvswitch-datapath

In order to enhance the functionality of the Open vSwitch some additional packages can be installed such as “openvswitch-brcompat” for linux bridge compatibility configuration and “openvswitch-controller” for adding controller function in the same hosts.

aris@djogja:/opt$ sudo apt-get install openvswitch-brcompat openvswitch-common openvswitch-controller

After the installation finish, the controller will be automatically run using default TCP port number and certificate.


Open vSwitch (Bridge) Configuration

The first step to configure the switch is preparing the datapath or bridge for virtual interfaces from the virtual machines. These following commands will create datapath or bridge called as “br1” and virtual interface called as “vnet0”.

aris@djogja:/opt$ sudo ovs-vsctl add-br br1
aris@djogja:/opt$ sudo ip tuntap add mode tap vnet0
aris@djogja:/opt$ sudo ip link set vnet0 up
aris@djogja:/opt$ sudo ovs-vsctl add-port br0 vnet0
aris@djogja:/opt$ sudo ifconfig br1 up

Make sure the datapath or bridge and interfaces are up using these following commands.

aris@djogja:/opt$ sudo ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:26:6c:85:d6:e1 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether e8:39:df:c5:ae:e0 brd ff:ff:ff:ff:ff:ff
15: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 92:91:cd:57:bc:4f brd ff:ff:ff:ff:ff:ff
16: vnet0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 500
link/ether 76:94:b8:8e:e1:da brd ff:ff:ff:ff:ff:ff
aris@djogja:/opt$ ifconfig
br1 Link encap:Ethernet HWaddr 92:91:cd:57:bc:4f
inet6 addr: fe80::9091:cdff:fe57:bc4f/64 Scope:Link
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:4694 (4.6 KB)
eth0 Link encap:Ethernet HWaddr 00:26:6c:85:d6:e1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr: Mask:
inet6 addr: ::1/128 Scope:Host
RX packets:407456 errors:0 dropped:0 overruns:0 frame:0
TX packets:407456 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:846803394 (846.8 MB) TX bytes:846803394 (846.8 MB)
vnet0 Link encap:Ethernet HWaddr 76:94:b8:8e:e1:da
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr e8:39:df:c5:ae:e0
inet addr: Bcast: Mask:
inet6 addr: fe80::ea39:dfff:fec5:aee0/64 Scope:Link
RX packets:636440 errors:0 dropped:0 overruns:0 frame:0
TX packets:613058 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:712913720 (712.9 MB) TX bytes:93192778 (93.1 MB)
aris@djogja:/opt$ sudo ovs-vsctl show
Bridge “br1”
Port “br1”
Interface “br1”
type: internal
Port “vnet0”
Interface “vnet0”
Port “eth0”
Interface “eth0”
ovs_version: “1.4.0+build0”

In order to test connectivity between the virtual switch with the virtual machine, put IP address on the datapath or bridge interfaces (acting as management IP address)

aris@djogja:/opt$ sudo ifconfig br1 netmask up


Virtual Machine Configuration

There is no special configuration for the virtualbox virtual machine, except selecting the proper interface for “Bridged Adapter” for Virtual Machine “Network Adapter”. For selecting the interface, use the virtual machine “Settings” and choose the “Network” in the left pane. Then give check mark on the “Enable Network Adapter”, select “Attached to : Bridged Adapter” and then select the name which already defined in the previous section “vnet0”.


Network Adapter Configuration on the VirtualBox

Click “OK” and the run the virtual machine. In order to test the connection give the IP address on the network interface of the virtual machine with the IP address from the same segment (

aris@djogja:/opt$ sudo ifconfig eth4 netmask up


Connectivity Testing

Testing can be done by sending ICMP packet (Pinging) from the Open vSwitch to the Virtual Machine or vice versa.

Ping Result between Virtual Switch and Virtual Machine

Ping Result between Virtual Switch and Virtual Machine



1.  Open vSwitch on Virtual Box 


Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license. It is designed to enable massive network automation through programmatic extension, while still supporting standard management interfaces and protocols.


Components Used

1. Ubuntu Linux 12.04 LTS (Precise Pangolin) with kernel 3.2.0-26

2. Open vSwitch Packages 1.4.0-1 version from Ubuntu Repositories

3. Open vSwitch Datapath Module Source (DKMS) 1.4.0-1 version


Open vSwitch Packages Installation

These following commands are used to install base packages of Open vSwitch from Ubuntu Repositories.

$ sudo apt-get update
$ sudo apt-get install openvswitch-switch
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
dkms openvswitch-common openvswitch-datapath-dkms
Suggested packages:
The following NEW packages will be installed:
dkms openvswitch-common openvswitch-datapath-dkms openvswitch-switch
0 upgraded, 4 newly installed, 0 to remove and 4 not upgraded.
Need to get 3,918 kB of archives.
After this operation, 16.9 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 precise/main dkms all [73.1 kB]
Get:2 precise/universe openvswitch-common i386 1.4.0-1ubuntu1
[551 kB]
Get:3 precise/universe openvswitch-common i386 1.4.0-1ubuntu1
DKMS: install completed.
Setting up openvswitch-switch (1.4.0-1ubuntu1) …
* Inserting openvswitch module
* /etc/openvswitch/conf.db does not exist
* Creating empty database /etc/openvswitch/conf.db
* Starting ovsdb-server
* Configuring Open vSwitch system IDs
* Starting ovs-vswitchd
* Enabling gre with iptables


Open vSwitch Configuration

Before configuration can be done, there are some status need to be verified. First, Open vSwitch kernel module already load in the operating system or not. Second is process that running related with Open vSwitch.

$ lsmod | grep open
openvswitch_mod                    72898 0
$ ps -aux | grep ovs
Warning: bad ps syntax, perhaps a bogus ‘-‘? See
root   8956   0.0   0.0   4756   416 ?   S< 14:29  0:00 ovsdb-server: monitoring pid 8957 (healthy)
root   8957   0.0   0.0   4764   1464 ? S<s 14:29 0:00 ovsdb-server /etc/openvswitch/conf.db -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO –remote=punix:/var/run/openvswitch/db.sock –remote=db:Open_vSwitch,manager_options –private-key=db:SSL,private_key –certificate=db:SSL,certificate –bootstrap-ca-cert=db:SSL,ca_cert –no-chdir –log-file=/var/log/openvswitch/ovsdb-server.log –pidfile=/var/run/openvswitch/ –detach –monitor
root   8965   0.0   0.0   5440   692 ? S< 14:29  0:00 ovs-vswitchd: monitoring pid 8966 (healthy)
root   8966   0.2   0.0  5444 1468 ? S<s 14:29 0:02 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO –mlockall –no-chdir –log-file=/var/log/openvswitch/ovs-vswitchd.log –pidfile=/var/run/openvswitch/ –detach –monitor
aris   9271   0.0   0.0   4372   828 pts/0 S+ 14:49 0:00 grep –color=auto ovs

If the module active and Open vSwitch process are running, virtual switch can be configured. This command are used to create new bridge or OpenFlow Datapath called as “br0”.

$ sudo ovs-vsctl add-br br0

And then for showing the list of bridges and datapaths that already configure, used this command.

$ sudo ovs-vsctl list-br

Bridge and datapaths are required an virtual ports which can used to connect to the hosts. Adding interface into bridge and datapath by using command below.

$ sudo ovs-vsctl add-port br0 eth0

In order to see the list of the port, use this command.

$ sudo ovs-vsctl list-ports br0

Check the status and statistic of the port use this command.

$ sudo ovs-ofctl show br0
OFPT_FEATURES_REPLY (xid=0x1): ver:0x1, dpid:000000266c85d6e1
n_tables:255, n_buffers:256
features: capabilities:0xc7, actions:0xfff
1(eth0): addr:00:26:6c:85:d6:e1
config: 0
state: LINK_DOWN
advertised: COPPER AUTO_NEG
supported: 10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
LOCAL(br0): addr:00:26:6c:85:d6:e1
config: PORT_DOWN
state: LINK_DOWN
OFPT_GET_CONFIG_REPLY (xid=0x3): frags=normal miss_send_len=0
$ sudo ovs-dpctl show br0
lookups: hit:0 missed:0 lost:0
flows: 0
port 0: br0 (internal)
port 1: eth0

This article will explain how to provide virtual desktop using remote display technology on Oracle VirtualBox. The server will gives every user their own desktop by assigning dedicated virtual machine for them. But for reducing the load on the server, the VirtualBox should be able to run every virtual machine without loading the GUI (Headless Mode).


Components used

1. Ubuntu Linux 12.04 (Precise Pangolin) for host OS and Ubuntu Linux 10.04 (Lucid) for guest OS.

2. Oracle VirtualBox 4.1 (including extension pack 4.1.14 from Oracle) 


VirtualBox Installation

There are two types components to be installed which are VirtualBox Base Packages and VirtualBox Extension Packs (VRDP, virtual USB, Intel PXE Boot, and PCI Passthrough). Base packages installation can be done using aptitude tools from the Ubuntu repository.

$ sudo apt-get update
$ sudo apt-get install dkms virtualbox

Sometimes we need to install manually DKMS module using this command.

$ sudo /etc/init.d/vboxdrv setup

If the installation still failed, please try to update kernel utilities (kernel header and kbuild) before run the command above.

$ sudo apt-get install linux-headers linux-kbuild

The next step is VirtualBox extension pack installation which already downloaded from Oracle websites. Install by executed the file or by double click the file until the VirtualBox installation window appear, and klik “Install”.


VirtualBox Extension Pack Installation Window

But, installation also can be done by selecting this following menu File > Preference > Extensions on the Main window of VirtualBox.

Virtual Box Extension Pack Installation from Main Menu

Virtual Box Extension Pack Installation from Main Menu


Configuring Virtual Desktop for Remote Display Support

In order to support remote display, some configuration need to be changed on the specific virtual desktop (virtual machine). Select one of the virtual machine and then select “Settings” menu. There is menu “Displays” on the right window and then click “Remote Display”. Remote display “Enable Server” is disabled by default, and to active just give check mark on the box.


Enabling VRDP Server on the Virtual Desktop (Virtual Machine)

This task also can be done using this below CLI (Command Line Interface)

$ sudo VBoxManage modifyvm Ubuntu-10.04 –vrde on


Running Virtual Desktop on Headless Mode

Sometimes the virtual desktop GUI no required to be ran in the server, because it is only required enable VRDP and the GUI will be accessed through the client terminal. VirtualBox can be run without GUI by running specific virtual desktop at VirtualBox Server on the Headless Mode.

$ sudo VBoxHeadless –startvm Ubuntu-10.04
[sudo] password for virtual:
Oracle VM VirtualBox Headless Interface 4.1.12_Ubuntu
(C) 2008-2012 Oracle Corporation
All rights reserved.


Accessing Virtual Desktop using RDP Client

Virtual Machine on the VirtualBox Server can be accessed using any RDP client software such as “rdesktop” which already included in the Ubuntu Linux distribution.

$ rdesktop
Autoselected keyboard map en-us

If the connection is successful, the GUI from the virtual machine will appear.

Virtual Desktop GUI form one Virtual Machine in the Virtual Box Server

Virtual Desktop GUI form one Virtual Machine in the VirtualBox Server

Google Chrome OS is web based open source operating systems which developed from web browser called “Chrome”. This OS can be used as one of desktop virtualization solution to access all cloud services from Google or private services from some corporate.

Component Used

1. Laptop with Intel based Processor

2. Chromium Image OS from Dell ChromiumOS_x86_April15_2012.img.gz


Chrome OS Bootable USB creation

The file image need to be uncompressed before the raw image can be transferred to USB disk (recommended using 4 GBytes).

$ gzip -d ChromiumOS_x86_April15_2012.img.gz
$ dd if=ChromiusOS_x86_April15_2012.img of=/dev/sdb bs=4096
500740+1 records in
500740+1 records out
2051032576 bytes (2.1 GB) copied, 495.458 s, 4.1 MB/s


Chrome OS boot from USB

After the raw file copied to the USB disk, by default the disk will be flagged as bootable. USB disk can be used for booting, by changing the boot order on the laptop depends on the type and brand. The main important thing that the OS image will detect the wireless card driver in order to build connection through wireless network before the OS can continue to boot. If there is any problem, it seems that the laptop wireless card is not supported by the OS image and need the other source of OS file images.


Chrome OS Installation

Instead of boot from the USB, Chromium OS also possible to be installed on the laptop’s hardisk. The installation can be done by two different option of installation. Option number one is to install Chromium OS on the entire hardrive and option number two is install side-by-side with another operating systems (Dual-Boot).

Option One, the installation will be very simple by booting the Chromium OS through the USB and then open the CLI (command line terminal) with Ctrl+Alt+T key. On the CLI, type install to start the Chromium OS installation. If the installation required a password, based on the file image documentation the password is “dell1234”.

Note: It will erase all the files inside the hardisk before the installation.


Chromium OS CLI Display


Option Two, the installation will be more difficult because there are some steps need to be done before the installation. This following steps are required for installing the Chromium OS image into hardisk.

  1. Hardisk partition, it can be done using many type of software such as GParted for Linux and Partition Magic for Windows. Two new partition need to be created for C-ROOT with linux ext2 filesystem and C-STATE with linux ext3 filesystem. xxxxxxxxxxxxxxxx


    GParted Windows Display for Hardisk Partition

  2. Copying Chromium OS files, all files inside the USB disk will be transferred into hardisk based on partition size and filesystem type. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    $ sudo dd if=/dev/sdb1 of=/dev/sda8 bs=4096
    262144+0 records in
    262144+0 records out
    1073741824 bytes (1.1 GB) copied, 50.4898 s, 21.3 MB/s
    $ sudo dd if=/dev/sdb3 of=/dev/sda7 bs=4096
    219648+0 records in
    219648+0 records out
    899678208 bytes (900 MB) copied, 43.2256 s, 20.8 MB/s

  3. Editing Boot Loader, linux operating system already boot loader utility called as “grub”. Insert the entry for Chromium OS loader in the grub configuration file (boot/grub/grub.cfg) and then don’t forget to save it. You must have superuser password to do it.  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
   $ sudo vi /boot/grub/grub.cfg
   menuentry “Chromium OS” {
   insmod ext2
   set root=(hd0,x)
   linux /boot/vmlinuz root=/dev/sda7 rw noresume noswap i915.modeset=1 loglevel=1
   $ sudo update-grub

After all steps finished, reboot the system and select option “Chromium OS” on the grub boot loader menu, and it will show the Chromium OS logo while booting the operating systems.


Chromium OS Logo shows when Booting


Connect to the Internet and Accessing Google Services

Before Chromium OS can be used, the operating system need to be connected to the internet using wireless network which can be configured when the operating system boot for the first time.


Keyboard and Wireless Connection Settings


Then Chromium OS will ask for Google account which can be used for operating system authentication.


Google Account for Operating System Authentication


If the Chromium OS succeed to make connection to the Google server, it will show desktop display from Chromium OS.

Chromium OS Desktop Display

Chromium OS Desktop Display



1. How to turn your netbook into a Chromebook with Chromium OS

Components used

1. Ubuntu Linux 12.04 (Precise Pangolin) 64-bit with kernel 3.2.0-24-generic version

2. LXC Ubuntu software 0.7.5-3 version

3. CGroup-lite 1.1 version for activating CGroup File Systems and Debootstrap 1.0.39 version for helping guest OS installation


LXC Software Installation

The easiest way to install the software is using Ubuntu repository through aptitude command.

$ sudo apt-get update
$ sudo apt-get install lxc lxctl
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
cgroup-lite debootstrap libapparmor1 libipc-system-simple-perl
liblinux-lvm-perl libnet-ssh2-perl libossp-uuid-perl libossp-uuid16
libssh2-1 lvm2 perl-doc watershed
Suggested packages:
uuid btrfs-tools qemu-user-static groff
The following NEW packages will be installed:
cgroup-lite debootstrap libapparmor1 libipc-system-simple-perl
liblinux-lvm-perl libnet-ssh2-perl libossp-uuid-perl libossp-uuid16
libssh2-1 lvm2 lxc lxctl perl-doc watershed
0 upgraded, 14 newly installed, 0 to remove and 6 not upgraded.
Need to get 8,790 kB/9,032 kB of archives.
After this operation, 16.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 precise/universe libipc-system-simple-perl all 1.21-1 [27.7 kB]
Get:2 precise/universe liblinux-lvm-perl all 0.15.01-1 [12.4 kB]
. . . .
. . . .
cgroup-lite start/running
Setting up debootstrap (1.0.39) …
Processing triggers for libc-bin …
ldconfig deferred processing now taking place
Processing triggers for initramfs-tools …
update-initramfs: Generating /boot/initrd.img-3.2.0-24-generic


The installation can be verified using this command.

$ sudo lxc-checkconfig
Kernel config /proc/config.gz not found, looking in other places…
Found kernel config file /boot/config-3.2.0-24-generic
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
— Control groups —
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Creating and Running Virtual Machine

Before VM can be created, VM directory need to be provided (usually on /var/lib/lxc/<name_of_vm>).

$ sudo mkdir /var/lib/lxc/vm

Create VM using LXC script with specify the name of VM, tipe of linux distribution, machine architecture and release. It will required the internet connection to download packages for installing VM.

$ sudo lxc-create -n vm -t ubuntu –- -a i386 -r precise

After installation finished, change the password of the virtual machine.

$ sudo chroot /var/lib/lxc/vm/rootfs passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Virtual machine can be running using LXC command-line utility with specify name of VM and the file configuration.

$ sudo lxc-start -n vm -f /var/lib/lxc/vm/config -d

After the virtual machine start, it can be accessed through the LXC command-line utility with specify name of VM.

$ sudo lxc-console -n vm




1. LXC Ubuntu Official Documentation

Component Used

1. Intel Processor for PC with Intel VT-x support

2. Ubuntu Linux 12.04 (Precise Pangolin) 64-bit with 3.2.0-24-generic kernel for Host

3. QEMU/KVM 1.0 version and KVM module 1.84 version


Virtualization Support Verification

This verification ensures that PC/Host already support virtualization technology, especially for processor.

$ more /proc/cpuinfo | grep “vmx”
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
$ sudo kvm-ok
[sudo] password for virtual:
INFO: /dev/kvm exists
KVM acceleration can be used


QEMU/KVM Software Installation

The easiest way for installing the software is through the Ubuntu repository with aptitude tools.

$ sudo apt-get update
$ sudo apt-get install kvm qemu-kvm
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
kvm-ipxe libaio1 librados2 librbd1 qemu-common qemu-utils seabios vgabios
Suggested packages:
mol-drivers-macosx openbios-sparc ubuntu-vm-builder uml-utilities
The following NEW packages will be installed:
kvm kvm-ipxe libaio1 librados2 librbd1 qemu-common qemu-kvm qemu-utils seabios vgabios
0 upgraded, 10 newly installed, 0 to remove and 60 not upgraded.
Need to get 0 B/5,296 kB of archives.
After this operation, 17.6 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Selecting previously unselected package libaio1.
(Reading database … 168635 files and directories currently installed.)
Unpacking libaio1 (from …/libaio1_0.3.109-2ubuntu1_amd64.deb) …
Selecting previously unselected package seabios.
Unpacking seabios (from …/seabios_0.6.2-0ubuntu2_all.deb) …
Setting up kvm (1:84+dfsg-0ubuntu16+1.0+noroms+0ubuntu13) …
Setting up kvm-ipxe (1.0.0+git-3.55f6c88-0ubuntu1) …
Processing triggers for libc-bin …
ldconfig deferred processing now taking place
$ sudo dpkg -l | grep kvm
ii kvm 1:84+dfsg-0ubuntu16+1.0+noroms+0ubuntu13 dummy transitional package from kvm to qemu-kvm
ii kvm-ipxe 1.0.0+git-3.55f6c88-0ubuntu1 PXE ROM’s for KVM
ii qemu-kvm 1.0+noroms-0ubuntu13 Full virtualization on i386 and amd64 hardware


Creating and Running Virtual Machine

The steps for creating virtual machine including preparing the space or virtual disk, installing guest OS, and running the virtual guest OS.

$ sudo mkdir /media/DATA/kvm
$ cd /media/DATA/kvm
$ sudo qemu-img create -f vdi vm.vdi 4G
Formatting ‘vm.vdi’, fmt=vdi size=4294967296 static=off

This command will create virtual disk “vm.vdi” with size 4 GBytes, and the size is dynamic (based on file inside the virtual disk).

Run the the virtual machine with 2 GB RAM and hardisk “vm.vdi” and install guest OS from the Ubuntu ISO CD (Ubuntu 10.04 Lucid alternate CD).

$ sudo kvm -m 2000 -localtime -hda vm.vdi -cdrom ubuntu-10.04.3-alternate-i386.iso -boot\ once=d

It will open QEMU windows, and Ubuntu welcome screen for guest OS installation.



After change the command line to run guest OS from the virtual disk.

$ sudo kvm -m 2000 -localtime -hda vm.vdi -net \ nic,model=rtl8139,vlan=1,macaddr=00:01:F0:45:00:10 -net \ tap,vlan=1,ifname=vm1.0,script=no

That command will run guest OS from the hardisk include virtual interface and MAC address which will be bridge with the host OS for creating the connectivity between the guest and host OS machine.




1. KVM/Installation

2. QEMU/Images


Some facts that drive network virtualization are outlined as follow. First, Infrastructure Usage Utilization is not cost effective, usage of one physical infrastructure for one specific network or specific services is not cost effective, because it will increase cost investment (CapEx) for the network or service provider. On the contrary, a usage of shared physical infrastructure will increase the efficiency of the usage without sacrifice quality of services or performance caused by interference between services. Second, Cloud Solutions (Cloud Computing, etc) do not concern on the infrastructure, service or application developers always assume that network resources always available for their application and services, and do not consider any QoS approach from the services for transmitting through the network. And third, Requirement of connection respect all service requirements, connectivity between components within virtualized service platform must be respecting all service requirements, e.g. as expressed by interactive real-time services, on transport layer.


There are some definitions for network virtualization and most of them have the same approach. Oberle and his team define it as ”A promising approach to cover individual and dynamic resource provision while keeping strong individual QoS requirements and optimizing the overall resource usage”. Nakao and his team regards network virtualization as “A technique for isolating computational and network resources through virtualization to allocate them to a logical (virtual) network for accommodating multiple independent and programmable virtual networks”. Lastly, Miyamura and his team delineate it as “A mechanism for running multiple networks, which are customized to a specific purpose, over the shared infrastructure”.

Moreover, there are several differences when comparing traditional concept of legacy VPNs and network virtualization. While VPNs only offer apparent and dedicated connectivity in the current network architecture, network virtualization aims to achieve the additional features: (1) Programmability: a virtual network may be equipped with programmable control plane, (2) Topology awareness: a virtual network may be topology aware rather than offering only connectivity, (3) Quick reconfigurability: a virtual network may be quickly provisioned and reconfigured, (4) Resource isolation: a virtual network may be allocated a set of computational and network resources, and (5) Network abstraction: a virtual network may accommodate a new architecture different from the current Internet architecture.

Key Features

According to the definition of network virtualization, there are two benefit based on the purposes by implementing multiple network architectures and services in isolated logical networks on top of a single shared physical infrastructure. First, in the long run, we can define a meta-architecture to accommodate multiple architectures concurrently. Secondly, in the short term, we can construct testbeds to experiment with multiple disruptive network architectures and services concurrently without interference among those experiments.

From another point of view, there are several important features in the respect to network virtualization which are segmentation, isolation, and encapsulation. Segmentation allows several different services to share a physical link with given specific QoS properties. Encapsulation enables services developers to design service specific on the overlay networks at a high level of abstraction, and then disburden them from dealing with highly complex physical network infrastructures. Finally, means for isolation are imperatively needed to suppress any unwanted cross-talk between the services which run on shared physical links.


[1] Karsten Oberle, Marcus Kessler, Manuel Stein, Thomas Voith, Dominik Lamp, Sören Berger, “Network Virtualization: The missing piece”, ICIN, 2009.
[2] Akihiro NAKAO, “Network Virtualization as Foundation for Enabling New Network Architectures and Applications”, IEICE, March 2010.
[3] Takashi Miyamura, Yuichi Ohsita, Shin’ichi Arakawa, Yuki Koizumi, Akeo Masuda, Kohei Shiomoto, and Masayuki Murata, “Network Virtualization Server for Adaptive Network Control”, ITC Specialist Seminar, Hanoi, 2009.