Intitulé du projet / étude
Exemple de création d'un environnent de test réseau, à l'aide de VMs KVM, composé d'un serveur LAC pppoe (ou autre support ppp), d'un serveur LNS et d'un serveur Freeradius.
Cette environnement a été testé sur un OS hôte Debain 6.0.4-amd64 installé sur un Dell R415 avec comme système de fichier LVM.
Configuration minimum de la machine :
Installation des packages:
apt-get install bridge-utils apt-get install qemu-kvm libvirt-bin apt-get install kpartx
Activer IP forward dans /etc/sysctl.conf:
"net.ipv4.ip_forward=1"
Bridger l'interface eth0 (pour que les VM soit accessible de l'extérieur), configuration dans le fichier “/etc/network/interface”:
auto br0 iface br0 inet manual # utiliser static si affectation d'une IP a l'interface bridge #iface br0 inet static # address 192.168.0.254 # netmask 255.255.255.0 # broadcast 192.168.0.255 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
Créer une VM Linux Debian modèle de 10G avec VMM (Virtual Machine Manager, en remote depuis pc client), choisir image type raw. (Exemple : /var/lib/libvirt/images/vm_modele.img).Choisir “Interface réseau virtuelle/Spécifiez le nom du périphérique partagé/Nom du pont = br0”. Lors de l'installation activer OpenSSH et configurer l’environnement selon ses préférences.
installer le package VLAN:
vmmodele:~# apt-get install vlan
La VM peut ensuite être supprimé mais il faut conserver une copie de l'image (vm_modele.img) et du fichier xml (/etc/libvirt/qemu/vmmodele.xml) qui nous servira a créer les VM suivantes a base de Linux Debian.
Création d'un LV pour la VM FreeBSD
:~# lvcreate -n lvfrbsd -L 10g h415
Télécharger la dernière version iso de FreeBSD (ex: FreeBSD-9.0-RELEASE-amd64-….iso).
Utiliser virsh ou VMM pour créer la VM en utilisant le LV “/dev/h415/lvfrbsd”. Ne pas utiliser les drivers Virtio lors de l'installation car il ne sont pas disponibles par défaut dans FreeBSD.
Lors de l'installation activer OpenSSH et configurer l’environnement selon ses préférences.
Installer les applications:
[root@freebsblac /root]# pkg_add -r wget [root@freebsblac /root]# pkg_add -r mpd5 [root@freebsblac /root]# wget http://people.freebsd.org/~kuriyama/virtio/9.0/virtio-kmod-0.228301.tbz [root@freebsblac /root]# pkg_add virtio-kmod-0.228301.tbz
Editer/Crèer le fichier “/boot/loader.conf” et ajouter ces lignes:
virtio_load="YES" virtio_pci_load="YES" virtio_blk_load="YES" if_vtnet_load="YES" virtio_balloon_load="YES"
Modifier “fstab” et “rc.conf” pout utilisation de virtio:
[root@freebsblac /etc]# sed -i.bak -Ee 's|/dev/ada?|/dev/vtbd|' /etc/fstab [root@freebsblac /etc]# sed -i.bak -e 's|em0|vtnet0|' /etc/rc.conf
configuration réseau et MPD dans fichier “/etc/rc.conf”
hostname="freebsblac" keymap="fr.iso.acc.kbd" # LAN Interface get ip by DHCP ifconfig_vtnet0="DHCP promisc" # VLAN11 LAC <--> LNS cloned_interfaces="vlan11" ifconfig_vlan11="inet 10.0.11.253 netmask 255.255.255.0 vlan 11 vlandev vtnet0" ifconfig_vlan11_alias0="ether 52:54:00:79:11:27" # Static route to the tun l2tpns static_routes="l2tpns" route_l2tpns="-net 62.5.16.41/32 10.0.11.252" sshd_enable="YES" ntpd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" # Set MPD mpd_enable="YES" mpd_flags="-b -s ppp"
Configuration de MPD5 en LAC pppoe:
[root@freebsblac /root]# cat /usr/local/etc/mpd5/mpd.conf default: create link template PPPX pppoe set pppoe iface vtnet0 set link action forward L2TPNS set link enable incoming create link template L2TPNS l2tp set l2tp peer 62.5.16.41 set l2tp secret totolns
Arrêter la VM et modifier la configuration (à l'aide de VMM ou manuellement dans fichier xml) pour utiliser les drivers virtio (disque et réseau).
root@hote:/etc/libvirt/qemu# cat vmfrbsd.xml <domain type='kvm'> <name>vmfrbsd</name> <uuid>ffa8bf7b-e39f-4988-9783-2eb95de017ca</uuid> <memory>1048576</memory> <currentMemory>1048576</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='pc-0.12'>hvm</type> <boot dev='hd'/> <bootmenu enable='no'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/h415/lvfrbsd'/> <target dev='hda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' unit='0'/> </disk> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:79:11:26'/> <source bridge='br1'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes'/> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> </devices> </domain>
Création de la VM LNS à partir de vmmodele.img:
<code>
root@hote:~# lvcreate -n lvlns -L 10g h415
root@hote:~# dd if=/var/lib/libvirt/images/vmmodele.img of=/dev/h415/lvlns
</code>
Monter la partition root de la VM LNS
<code>
root@hote:~# kpartx -av /dev/hote/lvlns
root@hote:~# mount /dev/mapper/hote-lvlns1 /mnt/vm
</code>
Modifier le fichier “/home/mnt/etc/hosts” et “/home/mnt/etc/hostname” pour qu'ils reflétent le nom de la nouvelle VM.
Editer le fichier “/home/mnt/etc/network/interfaces”:
<code>
# The loopback network interface
auto lo
iface lo inet loopback
# LNS ←–> INTERNET
auto eth0
iface eth0 inet dhcp
# VLAN LNS ←–> RADIUS
auto eth0.10
iface eth0.10 inet static
address 10.0.10.252
netmask 255.255.255.0
broadcast 10.0.10.255
network 10.0.10.0
hwaddress ether 52:54:00:91:0e:0f
# VLAN LNS ←–> LAC
auto eth0.11
iface eth0.11 inet static
address 10.0.11.252
netmask 255.255.255.0
broadcast 10.0.11.255
network 10.0.11.0
hwaddress ether 52:54:00:91:0e:10
</code>
Démonter la partition root de la VM LNS
<code>
root@hote:~# umount /mnt/vm
root@hote:~# kpartx -dv /dev/hote/lvlns
</code>
Copier vmmodele.xml
<code>
root@hote:~# cp /etc/libvirt/qemu/vmmodele.xml /etc/libvirt/qemu/vmlns.xml
</code>
Générer un UUID,Editer et modifier le fichier vmlns.xml_
<code>
root@hote:~# uuidgen
342b0a43-c872-4fc6-aadb-222d654e411d
</code>
Modifier name, uuid, disk (device, source..) et interface (type, mac address, source bridge)
<code>
<domain type='kvm'>
<name>vmlns</name>
<uuid>342b0a43-c872-4fc6-aadb-222d654e411d</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x8664' machine='pc-0.12'>hvm</type>
<boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/hote/lvlns'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <interface type='bridge'> <mac address='52:54:00:91:eb:e0'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes'/> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices>
</domain> </code>