====== Apporter une IPv4 de datacenter sur un Linux via un VPN ======
L'objectif est de faire descendre une IP de datacenter sur un Linux avec un tunnel OpenVPN et du proxyARP.
Cette documentation existe aussi pour [[kb:linux:pfsense:apporter_une_ip_de_datacenter_sur_un_pfsense_via_un_vpn|pfSense]].
Il vous sera nécessaire :
* un serveur OpenVPN linux avec:
* Une IP fixe pour initier la session VPN
* Une IP supplémentaire (nommé "IP Fail-Over" chez OVH par exemple)
Dans notre exemple, notre IP supplémentaire sera 172.32.0.1
==== Configuration du serveur OpenVPN ====
La configuration d'OpenVPN est classique avec quelques exception, par exemple :
mode server
tls-server
proto udp
port 1194
dev tap0
cipher AES-256-CBC
keepalive 10 30
persist-key
persist-tun
verb 3
status proxyarp_status.log
log-append /var/log/openvpn-proxyarp.log
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh4096.pem
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
auth sha256
keysize 256
comp-lzo no
script-security 2
client-connect /etc/openvpn/proxyarp_up.sh
Vous noterez l'utilisation OBLIGATOIRE d'une interface TAP, l'absence de configuration réseau et l'ajout des deux lignes suivantes :
script-security 2
client-connect /etc/openvpn/proxyarp_up.sh
et d'ajouter dans le dossier ///etc/openvpn// les deux fichiers suivant (en les adaptant) :
#!/bin/bash
echo '1' > /proc/sys/net/ipv4/conf/all/proxy_arp
ip link set up tap0
ip route add 172.32.0.1 dev tap0
et pour finir de le rendre exécutable :
# chmod +x /etc/openvpn/proxyarp_up.sh
==== Configuration du client OpenVPN Linux ====
On va créer un client OpenVPN sur le client Linux, si on suit l'exemple plus haut :
tls-client
proto udp
proto udp6
port 1194
remote XXXXXX
dev tap0
cipher AES-256-CBC
keepalive 10 30
persist-key
persist-tun
verb 3
status proxyarp_status.log
log-append /var/log/openvpn-proxyarp.log
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client.key
tls-crypt /etc/openvpn/keys/ta.key 0
auth sha512
keysize 256
comp-lzo no
script-security 2
up /etc/openvpn/proxyarp-up.sh
down /etc/openvpn/proxyarp-down.sh
Avec pour même spécificité : l'interface TAP et pas de configuration de réseau.
#!/bin/bash
# Configuration de l'interface
ip link set up tap0
ip addr add 172.32.0.1/32 dev tap0
# Ajout des règles dans la table wan_vpn
ip rule add from 172.32.0.1 table wan_vpn
ip rule add fwmark 1 table wan_vpn
# Ajout la passerelle par défaut
ip route add 51.255.37.1 src 172.32.0.1 dev tap0 table wan_vpn
ip route add default via 51.255.37.1 src 172.32.0.1 dev tap0 table wan_vpn
# Ajout règles de firewall pour que le trafic entrant par le tunnel, soit re-routé dans le tunnel
iptables -t mangle -A PREROUTING -i tap0 -j CONNMARK --set-xmark 0x1
iptables -t mangle -A PREROUTING -i eth0 -m connmark --mark 0x1 -j CONNMARK --restore-mark
#!/bin/bash
# Suppression des règles dans la table wan_vpn
ip rule del from 172.32.0.1 table wan_vpn
ip rule del fwmark 1 table wan_vpn
# Suppresion des règles de firewall pour que le trafic entrant par le tunnel, soit re-routé dans le tunnel
iptables -t mangle -D PREROUTING -i tap0 -j CONNMARK --set-xmark 0x1
iptables -t mangle -D PREROUTING -i eth0 -m connmark --mark 0x1 -j CONNMARK --restore-mark
Puis il faudra les rendre exécutable :
# chmod +x /etc/openvpn/proxyarp-up.sh /etc/openvpn/proxyarp-down.sh
et créer la table de routage **wan_vpn**
# echo "1 wan_vpn" >> /etc/iproute2/rt_tables
Et maintenant, ça doit fonctionner !
====Informations optionnelle ====
Si vous souhaitez faire du NAT de port entrant, voici un exemple de règle :
# iptables -t nat -A PREROUTING -i tap0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.10:25
Et si vous voulais faire du NAT sortant, il faut mettre les deux règles suivante :
# iptables -t mangle -A PREROUTING -s 192.168.1.10/32 -j MARK --set-xmark 0x1
# iptables -t nat -A POSTROUTING -s 192.168.1.10/32 -j SNAT --to-source 172.32.0.1