Dans cet article, s’intégrant dans la série Tuto Virtualisation V 2022 : Debian 11, KVM et Openvswitch, nous allons mettre en place notre service de proxies.
I – Présentation
Pour rappel, nous mettons en place cette infrastructure :
Maintenant, imaginons notre VM BackWeb1 par ex, qui souhaite récupérer une ressource sur le net.
Par où va t’elle passer ?
Pour elle, sa gateway sera défini sur notre IP virtuelle INTROUT : 10.100.0.254. Mais une fois sur le routeur interne, comment aller sur le net ? Comment passer du Vlan 20 au Vlan10 ?
Et bien, avec une/plusieurs VMs qui feront office de passerelles/proxies, nommées Proxy1 et Proxy2 sur le shéma.
Et bien sur, ce service sera en haute dispo !
Les routeurs internes (introut1 et introut2) auront alors comme gateway l’IP virtuelle du service proxy : 10.20.1.90
II – Mise en place des VMs
Je me sers de mon script fait maison (Tuto Virtualisation avec KVM, partie VIII : Scripts d’automatisation).
Au niveau de la configuration :
# Options size_swap=1 size_var=3 size=3 ram=256 cpu=1
A – Création des VMs
hyperV# ./create.sh -n proxy1 -i 91 -s 1 hyperV# ./create.sh -n proxy2 -i 92 -s 0
B – Ajout des interfaces réseaux
On va attacher le port trunk vlansext (vlans 10 et 20) à ces VMs fraichement crées.
Créez un fichier : networkproxy1.xml
<interface type='network'> <source network='intern-vlans' portgroup='vlansext'/> <target dev='proxy1.1'/> <model type='virtio'/> <driver name='vhost'/> </interface>
et un fichier : networkproxy2.xml
<interface type='network'> <source network='intern-vlans' portgroup='vlansext'/> <target dev='proxy2.1'/> <model type='virtio'/> <driver name='vhost'/> </interface>
On ajoute :
hyperV# virsh attach-device proxy1 networkproxy1.xml --config hyperV# virsh attach-device proxy2 networkproxy2.xml --config
C – Configuration réseaux
On va éditer les fichiers d’interfaces avant de démarrer :
hyperV# mount /dev/mapper/vg1-proxy1p1 /root/mountlvm/
On édite le fichier /root/mountlvm/etc/network/interfaces pour y ajouter les interfaces eth1.10 et eth1.20 :
auto lo iface lo inet loopback auto eth0.99 iface eth0.99 inet static address 10.99.1.91 netmask 255.255.255.0 auto eth0.250 iface eth0.250 inet static address 10.250.1.91 netmask 255.255.255.0 auto eth1.10 iface eth1.10 inet static address 10.10.1.91 netmask 255.255.255.0 gateway 10.10.1.254 auto eth1.20 iface eth1.20 inet static address 10.20.1.91 netmask 255.255.255.0
On démonte :
hyperV# umount /root/mountlvm
La même chose pour le Frontweb2 :
hyperV# mount /dev/mapper/vg0-proxy2p1 /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.92 netmask 255.255.255.0 auto eth0.250 iface eth0.250 inet static address 10.250.1.92 netmask 255.255.255.0 auto eth1.10 iface eth1.10 inet static address 10.10.1.92 netmask 255.255.255.0 gateway 10.10.1.254 auto eth1.20 iface eth1.20 inet static address 10.20.1.92 netmask 255.255.255.0
On démonte :
hyperV# umount /root/mountlvm
On peut démarrer les VMS :
hyperV# virsh start proxy1 hyperV# virsh start proxy2
Puis se connecter dessus :
hyperV# ssh user@proxy1 hyperV# ssh user@proxy2
III – Haute Disponibilité
A – Keepalived
Sur les deux proxys, on installe Keepalived :
proxyX# apt install keepalived
A la différence de nos Keepalived sur les routeurs externes et ceux sur nos Frontaux Web, ici, nous allons avoir deux IP virtuelles à gérer.
- une côté Vlan 10 : 10.10.1.90
- une côté Vlan 20 : 10.20.1.90
Sur Proxy1, on édite le fichier /etc/keepalived/keepalived.conf :
vrrp_instance PROXY_20 { state MASTER preempt 1 interface eth1.20 virtual_router_id 3 priority 200 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.20.1.91 unicast_peer { 10.20.1.92 } virtual_ipaddress { 10.20.1.90 } notify /srv/keep.sh } vrrp_instance PROXY_10 { state MASTER preempt 1 interface eth1.10 virtual_router_id 4 priority 200 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.10.1.91 unicast_peer { 10.10.1.92 } virtual_ipaddress { 10.10.1.90 } }
Sur Proxy2, on édite le fichier /etc/keepalived/keepalived.conf :
vrrp_instance PROXY_20 { state BACKUP interface eth1.20 virtual_router_id 3 priority 50 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.20.1.92 unicast_peer { 10.20.1.91 } virtual_ipaddress { 10.20.1.90 } notify /srv/keep.sh } vrrp_instance PROXY_10 { state BACKUP interface eth1.10 virtual_router_id 4 priority 50 advert_int 1 authentication { auth_type PASS auth_pass password } unicast_src_ip 10.10.1.92 unicast_peer { 10.10.1.91 } virtual_ipaddress { 10.10.1.90 } }
B – Script Keep.sh
Sur les deux proxys, 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
C – Keepup.sh
Toujours sur les deux proxys, un fichier /srv/keepup.sh :
#!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ping -c 1 10.10.1.254
Le proxy qui est actif voit le forward activé sur ses interfaces.
D – Keepdown.sh
Sur les deux proxys, un fichier /srv/keepdown.sh :
#!/bin/bash echo 0 > /proc/sys/net/ipv4/ip_forward
Quand un proxy est passif, nul besoin d’avoir le forward activé.
On termine en chmodant le tout, sur les deux proxys :
proxyX# chmod +x /srv/keep*
On peut lancer Keelalived sur les deux proxies :
proxyX# service keepalived stop proxyX# service keepalived start
IV – Conclusion
Le service proxy est en place. Cela dit, il y aura encore de la configuration réseau à faire par la suite, mais j’en parlerais le moment venu !
En attendant, revenons à la feuille de route et continuons !