Saturday, January 16, 2016

struggling with qemu bridging

I think I almost have this figured out.

I read these two blogs:
https://shanetomlinson.com/2009/bridging-a-wireless-card-in-kvmqemu/
and
http://blog.bodhizazen.net/linux/bridge-wireless-cards/

Basically I'm creating a new route on a new interface (tap*) and connecting through that.


router=192.168.200.1
Host=192.168.200.100

So, I install everything I need and might need

sudo apt-get install uml-utils bridge-utils

from bodhi's blog;
C : Tap. We do not assign a ip address to the tap, rather we assign a route on the host. This route will become the ip address of the guest.
route = 192.168.0.20
This is important to note.
So far it seems that what that means is that for each virtual machine you want to make, you'll need to make a new tun device and add it's IP to the host machine's routing table.

On the host after each reboot the tun device(s) ..one for each vm.. need to be remade.

So, the important numbers for my configuration;
router: 192.168.200.1
host:192.168.200.100
tap0:192.168.200.20
tap1:192.168.200.21
and so on (tap2 .22;tap3 .23 etc)

So we take the following steps to make a tap device
sudo -s
tunctl -u $USERNAME (note; use your actual username, not "$USERNAME")
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
ip link set tap0 up
route add -host 192.168.200.20 dev tap0

Then in the virtual machine you can use 192.168.200.20 as the IP, 192.168.200.100 as the gateway and 192.168.200.1 as the nameserver.

For example, I have an openbsd/sparc64 VM I've configured thusly;
/etc/hostname.ne0 contains:
inet 192.168.200.20 255.255.255.0
/etc/mygate contains:
192.168.200.100
/etc/resolv.conf contains:
lookup file bind
nameserver 192.168.200.1 (note, on netbsd I had to change this to 8.8.8.8 in order to work)


to make additional tap interfaces you simply re-run the tunctl command, echo 1 to a new /proc.../tapX/proxy_arp, ip link set tapX up and then add the IP you want the new interface to have to the routing table.

For instance, assuming you've already set up tap0, to set up tap1 to have the IP of 192.168.200.30 you'd run the following commands;

sudo -s
tunctl -u $USERNAME
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
ip link set tap1 up
route add -host 192.168.200.30 dev tap1

...and bob's your uncle; your tap1 is ready to use.

After you've set up your interface you can invoke it in qemu by adding the following to your qemu invocation;

-net nic -net  tap,ifname=tap0,script=no


No comments:

automating zfs mounts -a quick and very dirty script

 #!/bin/sh for x in obj xsrc src pkgsrc pkgsrc/distfiles pkgsrc/packages pkg         do zfs create ext/$x zfs set mountpoint=/usr/$x ext/$x ...