04janv. 2012

Xen vif-route and private lan

Xen_logo.png
J'utilisais depuis quelques années un lan privé entre mes DomU et le Dom0 (le Dom0 génère les graphs Munin) qui fonctionnait sans problème en bridge mais suite à l'allocation de ma plage IPv6 routé, j'ai du modifier ma configuration Xen en mode routé (vif-route).

En mode routé je devais exécuter des commandes manuellement sur le Dom0 afin de modifier le routage de l'interface eth1.

ip route del 10.41.233.XXX dev blog.1  scope link  src 78.41.233.XXX
ip route add 10.41.233.XXX dev blog.1  scope link  src 10.41.233.XXX

Ce fonctionnement me permettait des communications DomU <=> Dom0 mais pas DomU <=> DomU (perte de paquet aléatoire).

Suite à la réinstallation de mon hyperviseur Xen en 64Bits (ca m'aura pris du temps pour trouver la motivation), je me suis décidé à tout remettre au propre. (je traine des patchs homemade depuis Xen-3.2.1)

Voici donc ma nouvelle configuration permettant l'utilisation du vif-route et du vif-bridge simultanément, pour éviter d'éventuel bug j'ai préféré créer une interface dummy plutôt que d'ajouter un alias à l'interface loopback.

  • /etc/conf.d/net
config_dummy0=( "10.41.233.1/24" )
  • /etc/xen/scripts/network-custom
#!/bin/sh
dir=$(dirname "$0")
"$dir/network-route" "$@" netdev=eth0
"$dir/network-bridge" "$@" netdev=dummy0 bridge=private
  • /etc/xen/scripts/vif-custom
#!/bin/sh
dir=$(dirname "$0")
IFNUM=$(echo ${vif}|> | cut -d. -f2)
 
if [ "$IFNUM" = "0" ] ; then
	# Interface 0 = public lan
	"$dir/vif-route" "$@"
else
	# Sinon private lan
	"$dir/vif-bridge" "$@"
fi
  • /etc/xen/xend-config.sxp

On commente l'ensemble des autres scripts réseaux (bridge, route, nat)

(network-script network-custom)
(vif-script     vif-custom)

On relance xend

/etc/init.d/xend restart

A ce stade vous devriez avoir une interface nommée private disposant de l'IP privée assignée.

15: private: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 16:c7:56:f6:4d:3c brd ff:ff:ff:ff:ff:ff
    inet 10.41.233.1/24 brd 10.41.233.255 scope global private
    inet6 fe80::14c7:56ff:fef6:4d3c/64 scope link 
       valid_lft forever preferred_lft forever

Il vous suffit à présent d'adopter cette configuration sur vos DomU.

vif = [ 'mac=XX:XX:XX:XX:XX:XX, ip=78.41.233.XXX', 'mac=XX:XX:XX:XX:XX:XX, ip=10.41.233.XXX, bridge=private' ]


Liens utiles :
- Xen Networking Examples