Virt/KVM
Etat des lieux initial
- On dispose d'une interface réseau réelle p128p1 (Interface nVidia gigabit intégrée à la carte mère).
- Notre login habituel est didier
Fichier <path>/etc/sysconfig/network-scripts/ifcfg-p128p1</path>
UUID="6f08e7f7-8bd9-423c-92a5-6dfa08c0986d" NM_CONTROLLED="yes" HWADDR="A4:BA:DB:FB:F0:78" BOOTPROTO="dhcp" DEVICE="p128p1" ONBOOT="yes"
Connexion au réseau via un TAP
Mise en place du bridge
On commence par générer un uuid pour notre bridge
uuidgen a0744d19-f4a3-47a7-af7a-ab2db84b2d80
On configure notre bridge (br0) et on intègre notre interface réseau réelle dans ce bridge. Fichier <path>/etc/sysconfig/network-scripts/ifcfg-br0</path>
DEVICE=br0 NAME="bridge0" TYPE=Bridge STP=yes BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_PEERDNS=yes IPV6_PEERROUTES=yes UUID=a0744d19-f4a3-47a7-af7a-ab2db84b2d80 ONBOOT=yes BRIDGING_OPTS=priority=128
Fichier <path>/etc/sysconfig/network-scripts/ifcfg-p128p1</path>
UUID="6f08e7f7-8bd9-423c-92a5-6dfa08c0986d" #NM_CONTROLLED="yes" HWADDR="A4:BA:DB:FB:F0:78" #BOOTPROTO="dhcp" DEVICE="p128p1" ONBOOT="yes" BRIDGE="a0744d19-f4a3-47a7-af7a-ab2db84b2d80"
On redémarre le réseau
systemctl restart NetworkManager
On peut vérifier le résultat avec la commande <app>ip addr</app>
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: p128p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
link/ether a4:ba:db:fb:f0:78 brd ff:ff:ff:ff:ff:ff
inet6 fe80::a6ba:dbff:fefb:f078/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether a4:ba:db:fb:f0:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.148/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::a6ba:dbff:fefb:f078/64 scope link
valid_lft forever preferred_lft forever
Ajout d'un TAP
L'ajout d'un TAP à notre bridge se passe en trois étapes
- Création d'un TAP dont nous serons propriétaire avec notre login habituel ( user= didier )
tunctl -u didier -t tap0
- Ajout de notre TAP au brige
brctl addif br0 tap0
- Démarrage de notre TAP
ifconfig tap0 up
Ce n'est pas vraiment compliqué, mais pour automatiser le processus, on va créer un fichier unit: <path>/usr/local/lib/systemd/system/tap@.service</path>
- L'identifiant de l'interface n'est pas stocké en dur, mais prendra la partie entre l'arobase et l'extension de notre nom de fichier
[Unit] Description=Virtual Network Device After=syslog.target network.target [Service] Type=oneshot RemainAfterExit=yes Environment=TAPUSER=didier Environment=TAPGROUP=kvm ExecStartPre=-/usr/sbin/tunctl -u $TAPUSER -g $TAPGROUP -t tap%i ExecStartPre=-/usr/sbin/brctl addif br0 tap%i ExecStart=-/usr/sbin/ifconfig tap%i up ExecStop=-/usr/sbin/ifconfig tap%i down ExecStop=-/usr/sbin/brctl delif br0 tap%i ExecStop=-/usr/sbin/tunctl -d tap%i [Install] WantedBy=multi-user.target
Puis on va créer un lien symbolique pour que systemd gère notre fichier
ln -s /usr/local/lib/systemd/system/tap@.service tap@0.service
Pour créer un autre TAP, il suffira de créer un autre lien symbolique ( en incrémentant le numéro après l'arobase )
ln -s /usr/local/lib/systemd/system/tap@.service tap@1.service
On peut maintenant gérer nos TAP avec Systemd:
- Ajout/Démarrage
systemctl start tap@0.service
- Arrêt/Suppression
systemctl stop tap@0.service
- Démarrage automatique
systemctl enable tap@0.service
Installation
- Installation des RPM
yum install qemu-kvm qemu-kvm-tools
- Ajout de notre utilisateur au groupe kvm
usermod -a -G kvm didier
On peut maintenant tester l'installation d'une CentOS
- Création d'un disque virtuel
qemu-img create -f qcow2 /virt/centos.qcow2 10G
qemu-kvm -m 1024 -display sdl -usb -k fr -vga std \ -drive file=/virt/centos.qcow2,media=disk -drive file=/virt/iso/CentOS-6.3-x86_64-core.iso,media=cdrom \ -net nic,macaddr=52:54:00:12:34:D7,model=virtio,vlan=0 -net tap,ifname=tap0,script=no,vlan=0 \
-boot once=d