Simple KVM Bridging
Following on from my post yesterday on "Basic KVM on CentOS 5", here's how to setup simple bridging to allow incoming network connections to your VM (and to get other standard network functionality like pings working). This is a simplified/tweaked version of Hadyn Solomon's bridging instructions.
Note this this is all done on your HOST machine, not your guest.
For CentOS:
# Install bridge-utils yum install bridge-utils # Add a bridge interface config file vi /etc/sysconfig/network-scripts/ifcfg-br0 # DHCP version ONBOOT=yes TYPE=Bridge DEVICE=br0 BOOTPROTO=dhcp # OR, static version ONBOOT=yes TYPE=Bridge DEVICE=br0 BOOTPROTO=static IPADDR=xx.xx.xx.xx NETMASK=255.255.255.0 # Make your primary interface part of this bridge e.g. vi /etc/sysconfig/network-scripts/ifcfg-eth0 # Add: BRIDGE=br0 # Optional: comment out BOOTPROTO/IPADDR lines, since they're # no longer being used (the br0 takes precedence) # Add a script to connect your guest instance to the bridge on guest boot vi /etc/qemu-ifup #!/bin/bash BRIDGE=$(/sbin/ip route list | awk '/^default / { print $NF }') /sbin/ifconfig $1 0.0.0.0 up /usr/sbin/brctl addif $BRIDGE $1 # END OF SCRIPT # Silence a qemu warning by creating a noop qemu-ifdown script vi /etc/qemu-ifdown #!/bin/bash # END OF SCRIPT chmod +x /etc/qemu-if* # Test - bridged networking uses a 'tap' networking device NAME=c5-1 qemu-kvm -hda $NAME.img -name $NAME -m ${MEM:-512} -net nic -net tap &
Done. This should give you VMs that are full network members, able to be pinged and accessed just like a regular host. Bear in mind that this means you'll want to setup firewalls etc. if you're not in a controlled environment.
Notes:
- If you want to run more than one VM on your LAN, you need to set the guest MAC address explicitly, since otherwise qemu uses a static default that will conflict with any other similar VM on the LAN. e.g. do something like:
# HOST_ID, identifying your host machine (2-digit hex) HOST_ID=91 # INSTANCE, identifying the guest on this host (2-digit hex) INSTANCE=01 # Startup, but with explicit macaddr NAME=c5-1 qemu-kvm -hda $NAME.img -name $NAME -m ${MEM:-512} \ -net nic,macaddr=00:16:3e:${HOST_ID}:${INSTANCE}:00 -net tap &
- This doesn't use the paravirtual ('virtio') drivers that Hadyn mentions, as these aren't available until kernel 2.6.25, so they're not available to CentOS linux guests without a kernel upgrade.