Virt/KVM

De TartareFR
Aller à la navigation Aller à la recherche

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