Xen: NAT and Bridging

Because dom0 was running NAT, and I needed bridging;

Debian network file (/etc/network/interfaces):

iface eth3 inet manual

auto xenbr0
iface xenbr0 inet static
        bridge_ports eth3
        address 10.19.86.1
        broadcast 10.19.86.255
        netmask 255.255.255.0

NAT is running on eth2, bridging on eth3 (/etc/xen/xend-config.sxp):

(network-script 'network-nat netdev=eth2')

Now, for the VM configs:

NAT:

vif         = [ 'ip=172.16.1.12,mac=00:16:3E:5E:0D:1A' ]

Bridge:

vif         = [ 'ip=85.12.6.178,mac=00:16:3E:1D:F5:6C,script=vif-bridge,bridge=xenbr0' ]

It’s magic and it works! 😉

Xen: iptables issue

vm3:/# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 85.12.6.173:8180
WARNING: Could not open 'kernel/net/netfilter/x_tables.ko': No such file or directory
FATAL: Could not open 'kernel/net/ipv4/netfilter/ip_tables.ko': No such file or directory
iptables v1.4.2: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Solution:

vm3:/# depmod
vm3:/# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 85.12.6.173:8180

All ok 🙂

Xen: PTY allocation request failed

$ ssh vm3.rootspirit.com -l root
root@vm3.rootspirit.com's password:
PTY allocation request failed on channel 0
stdin: is not a tty
Solution:

Kill the DomU (xm console *might* work, but somehow rarely works for me).

mkdir /tmp/disk
mount /path/to/disk.img /tmp/disk
chroot /tmp/disk /bin/bash

=> in chroot env

nano -w /etc/fstab

And add (though this is probably not needed):

none            /dev/pts      devpts    defaults        0   0

And install udev:

apt-get install udev

Clean up, and restart DomU

exit
umount /tmp/disk
xm create /path/to/xen/vm.cfg

Should do the trick. 🙂

Xen: Failed to find an unused loop device

I had to start a new Xen domU this afternoon,

xm create vm#.domain

But this resulted in following error:

Error: Device 5632 (vbd) could not be connected.
Failed to find an unused loop device

Solution:

Create /etc/modprobe.d/local-loop.conf with this content:

options loop max_loop=64

Turn off all DomUs, yes, bummer. You’ll need to reload the loop module which won’t work if Xen is still using them. xm list should only display Domain-0.

modprobe -r loop && modprobe loop

And restart all DomUs. You can now create 32 (64/2 ~= # of DomUs; increase if you need more) DomUs.

You can check (before & after) the difference in loop back devices: ls -ls /dev | grep loop | wc -l