Certains diront que j'aime me compliquer la vie...
Le contexte est assez particulier :
- n serveurs accessibles via une adresse publique.
- un bridge OpenVPN est mis en place afin de permettre une communication privée ; il s'agit d'émuler l'existence d'une DMZ virtuelle.
- ces serveurs seront des serveurs de virtualisation.
- les hôtes virtualisés doivent pouvoir communiquer sans restriction, comme dans une DMZ.
Bref, une bonne grosse accumulation de couche avec une accumulation de 2 bridges : le premier pour l'interface réel, le second sur l'interface sur le tunnel OpenVPN.
Mais finalement, avec les bons outils on arrive relativement aisément au résultat attendu.
Tout d'abord, on définit le bridge sur l'interface réel afin de pouvoir utiliser OpenVPN en mode bridge. Pour cela, rendez-vous dans /etc/network/interfaces:
... iface eth0 inet manual auto www iface www inet static bridge_ports eth0 address x.x.x.x netmask x.x.x.x network x.x.x.x broadcast x.x.x.x gateway x.x.x.x
Ensuite, placez le script suivant dans le répertoire /etc/openvpn/.
#!/bin/sh BRIDGE_NAME=`basename ${config} | cut -d "." -f 1` SCRIPT_NAME=$0 case ${script_type} in "up") logger -p daemon.notice -i ${SCRIPT_NAME} "Bridging up ${dev} into ${BRIDGE_NAME}" brctl addbr ${BRIDGE_NAME} brctl addif ${BRIDGE_NAME} ${dev} /sbin/ifconfig ${dev} 0.0.0.0 promisc up /sbin/ifconfig ${BRIDGE_NAME} ${ifconfig_local} ${ifconfig_netmask} up exit 0 ;; "down") logger -p daemon.notice -i ${SCRIPT_NAME} "Destroying ${BRIDGE_NAME} bridge" /sbin/ifconfig ${BRIDGE_NAME} down brctl delbr ${BRIDGE_NAME} exit 0 ;; *) logger -p daemon.notice -i ${SCRIPT_NAME} "WARN : Script of type ${script_type} is not supported. If VPN ${config} does not work please restart" exit 1 ;; esac
Ce script va monter un bridge au dessus du tunnel OpenVPN courant. Pas besoin de configuration, le nom et les paramètres réseaux sont recopiés entre le tunnel et le bridge. Il ne reste plus que la configuration du tunnel. Dans mon exemple il s'agit du fichier /etc/openvpn/backbone.conf :
remote x.x.x.x port 1294 client dev tap fast-io up handle-bridge down handle-bridge ca backbone-pki/cacert.pem cert backbone-pki/gaia.pem key backbone-pki/gaia.insecure.key dh backbone-pki/dh1024.pem keepalive 10 60 persist-tun persist-key server 192.168.200.0 255.255.255.0 client-to-client
Voilà!
