Heute habe ich nach etlichen Stunden herausgefunden, wie ich KVM-Gäste an VDE-Switches hängen kann. Das Resultat sieht gut aus. Ich verwende Ubuntu Intrepid und installierte vde2 und kvm.

Es gibt auch ppa.launchpad-Repositorien, die neuere KVM-Versionen (zu diesem Zeitpunkt Version 74) zur Verfügung stellen. Diese Version hat bereits VDE im KVM-Binary integriert. Aber nach unzähligen Stunden konnte ich diese Version nicht an 2! Switches anschlieesen. Siehe hierzu:

http://ubuntuforums.org/showthread.php?p=6294558#post6294558

Im Endeffekt nutze ich nun das Wrapperskript vdekvm. Hier beispielhaft eine Konfigurationsdatei:


#!/bin/bash

vdekvm -m 256 -smp 2 \
  -name db \
  -boot c \
  -drive file=/dev/mapper/vg01-kvm2--disk,if=virtio,boot=on \
  -net nic,vlan=0,macaddr=00:16:3e:bf:e6:bc,model=virtio \
  -net nic,vlan=1,macaddr=00:16:3e:bf:e6:bb,model=virtio \
  -net vde,vlan=0,sock=/var/run/vde2/vde0.ctl \
  -net vde,vlan=1,sock=/var/run/vde2/vde1.ctl \
  -k de \
  -vnc 127.0.0.1:1 \
  -daemonize

exit 0

Diese verwendet vde0 als internen Switch und vde1 als externen. Die Konfiguration hierfür sieht bei mir wie folgt aus:


# Intranet
auto vde0
iface vde0 inet static
  address 10.1.0.1
  netmask 255.255.255.0
  broadcast 10.1.0.255
  vde2-switch -
  post-up /sbin/iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 10.1.0.0/24 \
    --to-source 85.10.196.195
  pre-down /sbin/iptables -t nat -D POSTROUTING -j SNAT -o eth0 -s 10.1.0.0/24 \
    --to-source 85.10.196.195

# External net
auto vde1
iface vde1 inet static
  address 78.46.253.225
  netmask 255.255.255.248
  broadcast 78.46.253.231
  vde2-switch -

Vielleicht werde ich den externen Switch noch etwas modifizieren, um eine weitere IP-Adresse gewinnen zu können.

[Update]
Ich hätte gerne mal slirpvde getestet, aber es ist fehlerhaft. Schade. So gesehen kann ich vorerst leider nicht auf eine weitere freiwerdende IP-Adresse hoffen.

[Update-1]
slirpvde funktioniert nun. Ich denke aber, dass es noch etwas Zeit dauert, bis es ausgereift ist. Näher möchte ich jetzt nicht darauf eingehen. Evtl. einfach mal selbst ausprobieren.

[Update-2]
Auf Wunsch stelle ich hier _kurz_ meine aktuelle Konfiguration vor:

Als erstes definiere ich einen internen Switch:


# Intranet switch
auto vde0
iface vde0 inet manual
  pre-up mkdir -p /var/run/vde2
  up /usr/bin/vde_switch -s /var/run/vde2/vde0.ctl -m 660 -g vde2-net \
    -p /var/run/vde2/vde0.pid -M /var/run/vde2/vde0.mgmt --mgmtmode 660 -d
  down kill -TERM $(cat /var/run/vde2/vde0.pid)

Nun verbinde ich den Gastgeber mit dem Switch


# Intranet cable to switch
auto vtap0
iface vtap0 inet static
  address 10.1.0.1
  netmask 255.255.255.0
  pre-up vde_tunctl -u vde2-net -t vtap0
  up vde_plug2tap -s /var/run/vde2/vde0.ctl --port=1 -g vde2-net \
    -P /var/run/vde2/vtap0.pid -d vtap0
  down kill -TERM $(cat /var/run/vde2/vtap0.pid)
  post-down vde_tunctl -d vtap0

Und das Gleiche noch mal mit einem Switch für das externe Netz und der dazugehörigen Verbindung


# External switch
auto vde1
iface vde1 inet manual
  pre-up mkdir -p /var/run/vde2
  up /usr/bin/vde_switch -s /var/run/vde2/vde1.ctl -m 660 -g vde2-net \
    -p /var/run/vde2/vde1.pid -M /var/run/vde2/vde1.mgmt --mgmtmode 660 -d
  down kill -TERM $(cat /var/run/vde2/vde1.pid)

# External cable to switch
auto vtap1
iface vtap1 inet static
  address 78.46.253.225
  netmask 255.255.255.248
  broadcast 78.46.253.231
  pre-up vde_tunctl -u vde2-net -t vtap1
  up vde_plug2tap -s /var/run/vde2/vde1.ctl --port=1 -g vde2-net \
    -P /var/run/vde2/vtap1.pid -d vtap1
  down kill -TERM $(cat /var/run/vde2/vtap1.pid)
  post-down vde_tunctl -d vtap1

Da hier nun eine Trennung von Switch und Kabel vorliegt, können die Gäste gezielt auf festgelegt Ports gesteckt werden. Beispiel:


-net vde,vlan=0,sock=/var/run/vde2/vde0.ctl,port=11 \

Ich finde diese Trennung sinnvoller, als die Konfiguration innerhalb Debians (Ubuntu auch), weil hier der Unterschied zwischen den Switches und den dazugehörigen Switches klarer ist. Außerdem kann ich auch mal eine Verbindung zum Switch kappen, ohne das davon gleich die Gäste betroffen sind.

Wenn man dann will, kann man das vtap1-Device zusammen mit eth0 in eine Bridge packen. Dann gewinnt man noch die IP-Adresse für die Verbindung zum Switch. Aber bitte nicht fragen, ob dann noch irgendwelche weiteren Einstellungen notwendig sind. :-) Ich weiß es im Moment nicht. Getestet habe ich das einmal und es ging. Aber mir ist ein sauberes Setup lieber und da spendiere ich dann auch gerne noch mal eine weitere IP.