qemu-kvm/libvirt virtual network
This page doesn't aim to be a full fledged tutorial on how to build a virtual network using open source tools; it is more like a todo with a bit of extra wording to keep the pieces together.
Be sure to have the relevant tools installed and read on.
Lan Gateway configuration
Supposing 192.168.1.16
is the IP address of the virtual host, the
first step is to instruct the LAN gateway on how to reach virtual
guests. This actually means that all relevant packets should be routed
through the virtual host.
This is done by setting up a static route in the LAN gateway:
#> ip route add 192.168.11.0/24 via 192.168.1.16 dev eth0
Virtual network configuration
On the virtual host, define a routed virtual network. Create the XML file first:
#> vi /tmp/deepblue.xml
<network> <name>deepblue</name> <bridge name="virbr1" /> <forward mode="route" /> <dns> <forwarder addr='192.168.1.35'/> </dns> <ip address="192.168.11.1" netmask="255.255.255.0"></ip> </network>
then instruct libvirt
to define the network, mark it for autostart
and start it:
#> virsh net-define /tmp/deepblue.xml #> virsh net-autostart deepblue #> virsh net-start deepblue
Enabling NAT
In case the new virtual network is behind a firewall, we need to add at least a rule to enable virtual guests to reach the Internet:
#> iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o <extif> -j MASQUERADE
Create a virtual guest
Now create a disk pool to store the virtual guest hard disks and mark it for autostart:
#> virsh pool-define-as <pool_name> dir --target <pool_directory> #> virsh pool-autostart <pool_name>
Virtual disks will be stored inside the <pool_directory>
.
Then perform the actual installation:
#> virt-install -n debian-testing \ --memory 2048 --vcpus=2 \ --cpu host \ -c ./netinst/debian-6.0.7-amd64-netinst.iso \ --os-type=linux --os-variant=debiansqueeze \ --disk pool=<pool_name>,size=2,format=qcow2 \ -w network=<virtual_network>
To connect to the virtual guest from a remote host (provided
virt-viewer
is installed):
$> virt-viewer -c qemu+ssh://<server>/system <guest>
where guest
is the name specified with the -n
option at installation time and server
is the virtual host.
Note: since libvirt
relies on dnsmasq
with a configuration created
at runtime, set the virtual host as the DNS for the virtual guest.