Dans cet article, partie intégrante de la série Tuto Virtualisation V 2022 : Debian 11, KVM et Openvswitch, nous allons mettre en place le service de routage interne.
I – Présentation
Pour rappel, voila l’infrastructure en cours de réalisation :
Nous allons mettre en œuvre IntRout1 et IntRout2.
II – Mise en place des VMs
A – Création des VMs
Création des VMS, toujours à l’aide du script disponible ici.
Au niveau ressource (configuration dans le script) :
size_swap=1 size_var=3 size=3 ram=256 cpu=1
Création des VMs :
hyperV# ./create.sh -n introut1 -s 1 -i 5 hyperV# ./create.sh -n introut2 -s 0 -i 6
B – Ajout des interfaces réseaux
Il va falloir ajouter deux interfaces réseaux :
- une interface sur le VLAN 20
- une interface sur les VLANs 100-109 via le trunk vlansint
On va créer plusieurs fichiers qu’on injectera.
Pour le VLAN 20 :
Fichier net-20-introut1.xml :
<interface type='network'> <source network='intern-vlans' portgroup='vlan20'/> <target dev='introut1.1'/> <model type='virtio'/> <driver name='vhost'/> </interface>
Fichier net-20-introut2.xml :
<interface type='network'> <source network='intern-vlans' portgroup='vlan20'/> <target dev='introut2.1'/> <model type='virtio'/> <driver name='vhost'/> </interface>
On injecte :
hyperV# virsh attach-device introut1 net-20-int-introut1.xml --config hyperV# virsh attach-device introut2 net-20-int-introut2.xml --config
Puis pour les VLANs internes :
Fichier net-vlans-int-introut1.xml :
<interface type='network'> <source network='intern-vlans' portgroup='vlansint'/> <target dev='introut1.2'/> <model type='virtio'/> <driver name='vhost'/> </interface>
Fichier net-vlans-int-introut2.xml :
<interface type='network'> <source network='intern-vlans' portgroup='vlansint'/> <target dev='introut2.2'/> <model type='virtio'/> <driver name='vhost'/> </interface>
On injecte :
hyperV# virsh attach-device introut1 net-vlans-int-introut1.xml --config hyperV# virsh attach-device introut2 net-vlans-int-introut2.xml --config
C – Configuration Réseaux
Passons maintenant à la configuration côté VM.
On monte :
hyperV# mount /dev/mapper/vg1-introut1p1 /root/mountlvm/
On édite le fichier /root/mountlvm/etc/network/interfaces :
auto lo iface lo inet loopback auto eth0.99 iface eth0.99 inet static address 10.99.1.5 netmask 255.255.255.0 auto eth0.250 iface eth0.250 inet static address 10.250.1.5 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 10.20.1.5 netmask 255.255.255.0 gateway 10.20.1.90 auto eth2.100 iface eth2.100 inet static address 10.100.0.5 netmask 255.255.255.0
On démonte :
hyperV# umount /root/mountlvm
Puis, pour introut 2 :
On monte :
hyperV# mount /dev/mapper/vg0-introut2p1 /root/mountlvm/
On édite le fichier /root/mountlvm/etc/network/interfaces :
auto lo iface lo inet loopback auto eth0.99 iface eth0.99 inet static address 10.99.1.6 netmask 255.255.255.0 auto eth0.250 iface eth0.250 inet static address 10.250.1.6 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 10.20.1.6 netmask 255.255.255.0 gateway 10.20.1.90 auto eth2.100 iface eth2.100 inet static address 10.100.0.6 netmask 255.255.255.0
On démonte :
hyperV# umount /root/mountlvm
Ces deux VMs ont pour gateway l’IP virtuelle des proxies : 10.20.1.90
III – Accès au net
Avant de passer à la suite avec l’installation de Keepalived, on va donner accès au net à ces VMs.
On test d’abord un ping vers la passerelle :
introutX# ping 10.20.1.90
Ça, c’est OK.
Maintenant, tentons un ping avec un ‘saut’ de plus, vers la Gateway de notre Gateway, donc vers 10.10.1.254 :
introutX# ping 10.10.1.254
Et… rien.
En effet, si on effectue un tcpdump sur le routeur, on va voir le paquet arriver, la réponse générée, mais walou…
Problème de route : extrout1 et extrout2 ne connaissent pas le réseau 10.20.1.0/24.
On va donc y remédier.
ajout de la route coté extrout1 et 2
extrout1# ip route add 10.20.1.0/24 via 10.10.1.90
Et maintenant, le ping depuis introut1 ou introut2 vers extrout est OK :
introutX# ping 10.10.1.254
On va inscrire ces routes dans le marbre. Au passage, on sait également qu’un routeur externe n’aura à communiquer avec le réseau 10.20.1.0/24 que s’il est en mode Master.
Sur les deux VMs extrout1 et extrout2, on va donc éditer :
le fichier /srv/keepup.sh
#!/bin/bash ip addr add 123.123.123.123 dev eth2 ip link set eth2 up ip route add IP.GATEWAY.ONLINE dev eth2 ip route del default ip route add 0.0.0.0/0 via 62.210.0.1 dev eth2 ip route add 10.20.1.0/24 via 10.10.1.90 echo 1 > /proc/sys/net/ipv4/ip_forward /srv/firewallup.sh sleep 1 ping -c 1 IP.GATEWAY.ONLINE
Puis, le fichier /srv/keepdown.sh :
Sur extrout1 :
#!/bin/bash ip link set eth2 down ip addr del 51.159.92.81/32 dev eth2 ip route add 0.0.0.0/0 via 10.10.1.2 dev eth1 src 10.10.1.1 ip route del 10.20.1.0/24 via 10.10.1.90 /srv/firewalldown.sh
Sur extrout2 :
#!/bin/bash ip link set eth2 down ip addr del 51.159.92.81/32 dev eth2 ip route add 0.0.0.0/0 via 10.10.1.1 dev eth1 src 10.10.1.2 ip route del 10.20.1.0/24 via 10.10.1.90 /srv/firewalldown.sh
Et voila.
IV – Keepalived
Maintenant que nos VMs ont accès au net, on va pouvoir installer keepalived.
Sur les deux VMs :
introutX# apt install keepalived
Puis, la configuration, dans le fichier /etc/keepalived/keepalived.conf :
Sur introut1 :
vrrp_instance INTROUT_20 { state MASTER preempt 1 interface eth1 virtual_router_id 20 priority 200 advert_int 1 authentication { auth_type PASS auth_pass password } notify /srv/keep.sh unicast_src_ip 10.20.1.5 unicast_peer { 10.20.1.6 } virtual_ipaddress { 10.20.1.254 } } vrrp_instance INTROUT_100 { state MASTER preempt 1 interface eth2.100 virtual_router_id 100 priority 200 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.100.0.5 unicast_peer { 10.100.0.6 } virtual_ipaddress { 10.100.0.254 } }
Sur introut2 :
vrrp_instance INTROUT_20 { state BACKUP interface eth1 virtual_router_id 20 priority 50 advert_int 1 authentication { auth_type PASS auth_pass password } notify /srv/keep.sh unicast_src_ip 10.20.1.6 unicast_peer { 10.20.1.5 } virtual_ipaddress { 10.20.1.254 } } vrrp_instance INTROUT_100 { state BACKUP interface eth2.100 virtual_router_id 100 priority 50 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.100.0.6 unicast_peer { 10.100.0.5 } virtual_ipaddress { 10.100.0.254 } }
Sur les deux routeurs, on créé un fichier /srv/keep.sh :
#!/bin/bash TYPE=$1 NAME=$2 STATE=$3 case $STATE in "MASTER") /srv/keepup.sh exit 0 ;; "BACKUP") /srv/keepdown.sh exit 0 ;; "FAULT") /srv/keepdown.sh exit 0 ;; *) echo "unknown state" exit 1 ;; esac
Puis un fichier /srv/keepup.sh :
#!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward
Et un fichier /srv/keepdown.sh :
#!/bin/bash echo 0 > /proc/sys/net/ipv4/ip_forward
On active le forward que si le routeur est en action.
On termine en chmodant :
introutx# chmod +x /srv/keep*
On peut démarrer Keepalived sur les deux routeurs internes :
introutx# service keepalived start
Et un :
introut1# ip a
sur le routeur interne principale (introut1) nous affiche bien les IP virtuelles attachées :
- 10.20.1.254 sur le vlan 20
- 10.100.0.254 sur le Vlan 100
V – Conclusion
Voila, nos routeurs internes sont prêts !
On peut revenir à la feuille de route et continuer notre bonhomme de chemin.