Réseau virtuel de VM unifié entre plusieurs serveurs physiques KVM connectés par Internet avec openvpn et 802.1q

Ayant 2 serveurs SOYOUSTART (OVH), et n’ayant pas de patte LAN pour les faire communiquer ensemble, j’ai du recourir à openvpn pour faire dialoguer les VM du serveur A avec les VM du serveur B.

 

  • conf server
 cat /etc/openvpn/server.conf
local IP_PUB_SERVER
port PORT_SERVER
proto tcp
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh4096.pem
server-bridge 192.168.11.1 255.255.255.0 192.168.11.100 192.168.11.200
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0 # This file is secret
comp-lzo
max-clients 4
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mode server
tls-server
script-security 2
up "/etc/openvpn/up.sh"
down "/etc/openvpn/down.sh"

  • conf client

 

 cat /etc/openvpn/client.conf
client
dev tap1
proto tcp
remote IP_SERVER PORT_SERVER
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert clientPrincipal.crt
key clientPrincipal.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3
log-append openvpnclient.log
script-security 2
up "/etc/openvpn/upclient.sh"
down "/etc/openvpn/downclient.sh"
keepalive 30 120
float
status openvpn-status.log

  • Démarrer le serveur et le client VPN:

 

 
server A # systemctl start openvpn@server
server B # systemctl start openvpn@client
  • Créer l’interface br1_lan_hyp
  cat /etc/sysconfig/network-scripts/ifcfg-br1_lan_hyp
DEVICE=br1_lan_hyp
TYPE=Bridge
IPADDR=192.168.11.1
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
  • Créer le bridge
 /sbin/brctl addbr br1_lan_hyp

ifconfig br1_lan_hyp 192.168.11.1 netmask 255.255.255.0

Ajouter l’interface VPN tap0 dans le bridge

 /sbin/ifconfig br1_lan_hyp promisc
/sbin/ifconfig tap0 up promisc
/sbin/brctl addif br1_lan_hyp tap0

  • Faire la meme chose sur le 2eme serveur en prenant 11.2

 

  • Ajouter le module 802.1q en créant le fichier suivant:
 cat /etc/modules-load.d/8021q.conf
8021q

  • Ajouter des vlan

dans cet exemple; j’ajoute VLAN10 avec l’ip 10.1 et VLAN20 avec l’ip 20.1

 vconfig add tap1 10
vconfig add tap1 20 brctl addbr br10 brctl addbr br20 brctl addif br10 tap1.10 brctl addif br20 tap1.20 ifconfig tap1.10 promisc ifconfig tap1.20 promisc ifconfig tap1.10 up ifconfig tap1.20 up ifconfig br10 192.168.10.1 ifconfig br20 192.168.20.1
  • Effectuer la meme manipulation sur le node2.

 

  • Automatiser la mise en bridge de tout ca dans up.sh et upclient.sh

pour le Premier serveur:

  cat /etc/openvpn/up.sh
#!/bin/bash

# CONF LAN NORMAL (GLUSTERFS)
/sbin/ifconfig br1_lan_hyp promisc
/sbin/ifconfig tap0 up promisc
/sbin/brctl addif br1_lan_hyp tap0

# CONF VLAN (VM)
vconfig add tap0 10
vconfig add tap0 20
brctl addbr br10
brctl addbr br20
brctl addif br10 tap0.10
brctl addif br20 tap0.20
ifconfig tap0.10 promisc
ifconfig tap0.20 promisc
ifconfig tap0.10 up
ifconfig tap0.20 up
ifconfig br10 192.168.10.1
ifconfig br20 192.168.20.1

exit 0

 

  • Pour le 2eme serveur:

 

 cat upclient.sh
#!/bin/bash
/sbin/ifconfig br1_lan_hyp promisc
/sbin/ifconfig tap1 up promisc
/sbin/brctl addif br1_lan_hyp tap1
/sbin/ifconfig tap1 0

sleep 4

vconfig add tap1 10
vconfig add tap1 20
brctl addbr br10
brctl addbr br20
brctl addif br10 tap1.10
brctl addif br20 tap1.20
ifconfig tap1.10 promisc
ifconfig tap1.20 promisc
ifconfig tap1.10 up
ifconfig tap1.20 up
ifconfig br10 192.168.10.2
ifconfig br20 192.168.20.2

exit 0

 

  • Dans la conf des VM, ajouter br10 ou br20 pour le bridge
  • Vérifier que les bridges contiennent bien les interfaces tap.X et vnetX:
 brctl show br10
bridge name bridge id STP enabled interfaces
br10 8000.9e56d684d75c no 
tap0.10
vnet2
vnet3
vnet5
vnet7
vnet8
vnet9

 

  • Pour finir; une VM PFSENSE (FreeBSD) qui effectue le routage, FW, NAT pour les VMs.

PFSENSE a une patte sur chaque réseau :

 

  • br0 pour le WAN
  • br1 pour le LAN hyperviseur
  • br10 pour  VLAN10; LAN étanche pour VMs
  • br20 pour VLAN20, LAN étanche pour VMS

Et ca tourne nikel.

 

Leave a Reply

Your email address will not be published. Required fields are marked *


6 − = four