qemu notes

I’ve been using qemu lately to test kernel changes. In particular I’m using qemu-0.7.2 running x86 virtual machines on an amd64. This configuration seems to work really well, particularly once I remembered to “echo 1 >/proc/sys/kernel/sysrq” in the host OS’s rc.local (doh!)

Today I switched from using qemu’s user mode network stack to using the tun/tap interface with masquerading. To that end, my qemu startup script now looks like this:

#!/bin/bash
# qemu.sh
sudo bash -c 'echo 1024 > /proc/sys/dev/rtc/max-user-freq'
#sudo modprobe kqemu
qemu \
    -kernel linux-2.6-qemu/arch/i386/boot/bzImage \
    -append 'console=ttyS0 root=/dev/hda ro clock=pit' \
    -hda root_fs.fc-4-base.pristine.20051026 \
    -nographic \
    -n $PWD/qemu-ifup \
    "$@"

and qemu-ifup looks like this:

#!/usr/bin/sudo bash
/sbin/ifconfig $1 172.20.0.1
iptables --table nat --flush
iptables --table nat --append POSTROUTING \
    --source 172.20.0.0/16 --destination ! 172.20.0.0/16 \
    --jump MASQUERADE
[[ -e /proc/sys/net/ipv4/ip_forward ]] && \
    echo 1 > /proc/sys/net/ipv4/ip_forward

This gives me outgoing networking from the virtual machine, plus incoming networking from the host OS. The virtual OS uses 172.20.0.2 on its virtual adapter.