Chez JL

Joliciel Libre

Accueil > Informatique > Haute Disponibilité > Réseau et xen

Réseau et xen

lundi 27 septembre 2010

 infos

When xend starts up, it runs the network-bridge script, which :
- creates a new bridge named xenbr0
- "real" ethernet interface eth0 is brought down
- the IP and MAC addresses of eth0 are copied to virtual network interface veth0
- real interface eth0 is renamed peth0
- virtual interface veth0 is renamed eth0
- peth0 and vif0.0 are attached to bridge xenbr0. Please notice that in xen 3.3, the default bridge name is the same than the interface it is attached to. Eg : bridge name eth0, eth1 or ethX.VlanID
- the bridge, peth0, eth0 and vif0.0 are brought up

It is good to have the physical interface and the dom0 interface separated ; thus you can e.g. setup a firewall on dom0 that does not affect the traffic to the domUs (just for protecting dom0 alone).

 Commandes utiles, en vrac

Enlever network-manager du démarrage, pour gérer manuellement :

update-rc.d network-manager remove
update-rc.d network-manager-dispatcher remove

Voir les fichiers de configuration /etc/resolv.conf et /etc/network/interfaces

Voir que les interfaces physiques sont associés statiquement à des fichiers eth0, eth1...(utile en cas de changement de carte mère, si l’interface réseau est intégrée)
$ cat /etc/udev/rules.d/70-persistent-net.rules

Voir la config réseau, le pont, le routage :

ifconfig
brctl show
route -n

Détacher peth0 du pont eth0 :

brctl delif eth0 peth0

Supprimer une route, exemple :

route del -net 169.254.0.0 gw 0.0.0.0 netmask 255.255.0.0 peth0

Désactiver, réactiver le pont :

rmmod bridge
modprobe bridge

Activer un pont (commutateur). Mettre par exemple ces commandes dans /etc/xen/scripts/network-bridge-perso (ne pas mettre dans /etc/rc.local, car sera créé trop tard, après le démarrage des vms)

brctl addbr sw1
ifconfig up sw1

Voir le module de la carte réseau :

dmesg | grep eth

Désactiver une interface réseau

# ifconfig eth1 down

Supprimer et recharger le module de la carte réseau :

rmmod e1000e
modprobe e1000e

Relancer le réseau, et relancer xen :

/etc/init.d/networking restart
/etc/init.d/xend restart

Arrêter et relancer le script de création network-bridge :

/etc/xen/scripts/network-bridge stop
/etc/xen/scripts/network-bridge start

En gros, pour réinitialisé le réseau

rmmod bridge
rmmod e1000e
modprobe e1000e
/etc/init.d/networking restart
/etc/init.d/xend restart

Déclarer plusieurs pont (commutateur virtuel ?)

# cp /etc/xen/scripts/network-bridge /etc/xen/scripts/network-bridge-custom
# vi /etc/xen/xend-config.sxp
...
       (network-script network-bridge-custom)
       (vif-script vif-script)
...
# vi /etc/xen/scripts/network-bridge-custom
#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=eth0
"$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=eth1
"$dir/network-bridge" "$@" vifnum=2 netdev=eth2 bridge=eth2
"$dir/network-bridge" "$@" vifnum=3 netdev=eth3 bridge=eth3
# chmod u+x /etc/xen/scripts/network-bridge-custom

Pour ajouter un autre commutateur virtuel, non connecté à une interface du serveur physique (pour connecter 2 vms entre elles par exemple), changer le début du fichier etc/xen/scripts/network-bridge-custom :

#!/bin/sh

brctl addbr eth4
ifconfig eth4 up
...

Attention au risque de mélange de nom. Il y a une (ou des) interface eth0 et il y a un commutateur virtuel eth0.

Et pour connecter un domU sur un commutateur virtuel :
- créer un domU (xen-create-image)
- dans son fichier de configuration, par exemple, si on veut que le domU ait 2 interfaces, connectés aux 2 commutateurs virtuels :

vif = [ "mac=00:17:4e:37:f5:47,bridge=eth0",
       "mac=00:17:4e:37:f5:48,bridge=eth1" ]

 Connecté une interface réseau directement à un domU

source
- doc Xen
Il faut que l’interface pci passe à travers le dom0 ("pass-through"). L’idée est que le noyau xen va cacher cette interface au dom0.
- doc un peu vieille

Apparemment le noyau de base à ce qu’il faut( pciback intégré au noyau).

Récupérer l’identifiant de la carte réseau à cacher.

lspci | grep -i ethernet

Noter le code de début, par exemple : 07:00.0 (qui est aussi 0000:07:00.0).

Au passage, noter son adresse MAC. On pourra vérifier qu’elle est bien récupérée dans la vm.

ifconfig -a
...

Pour voir quelle interface "eth" correspond à quel code voir dans dmesg :

# dmesg
...
[    2.346834] sky2 eth0: addr 00:XX:XX:XX:XX:XX
[    2.346834] ACPI: PCI Interrupt 0000:07:00.0[A] -> GSI 19 (level, low) -> IRQ 19
...

Il a 2 manières de faire selon la version du noyau

Binding at Boot-Time with "old-style" Xen 2.6.18 dom0 Linux kernel

title Xen-Linux (2.6.18-xen)
       root (hd0,0)
       kernel /boot/xen.gz iommu=1
       module /boot/vmlinuz-2.6.18.8-xen root=LABEL=/ ro pciback.hide=(01:00.0)
       module /boot/initrd-2.6.18-xen.img

Binding at Boot-Time with pvops dom0 Linux kernel (2.6.31, 2.6.32, and newer)

title Xen-Linux (2.6.32.9)
       root (hd0,0)
       kernel /boot/xen.gz iommu=1
       module /boot/vmlinuz-2.6.32.9 root=LABEL=/ ro xen-pciback.hide=(01:00.0)(00:02.0)
       module /boot/initrd-2.6.32.9.img

La différence est pciback ou xen-pciback.

redémarrer le serveur xen.

(Evenutellement voir dans les logs, s’il y a une erreur sur la commande pciback)

On peut voir que la carte a été ignorée.
Elle apparaît toujours là

lspci | grep -i ether

mais elle n’est plus ici

ifconfig -a

Ajouter dans le config *.cfg du domU :

     pci = [ '01:00.0' ]

Démarrer la vm. Vérifier son adresse mac :

vm$ ifconfig -a
...

Lorsque l’on débranche le câble réseau, le dom0 n’affiche rien dans les logs, par contre la vm connecté en directe affiche cette déconnexion dans ses logs.