VPN : Comment NATer un VPN IPSEC?

Mis a jours le 20 Nov 2020 à 13:19 · 434 mots · Lecture en 3 minutes iptables parketFiter pfSence

Q/A

Est-il possible de faire du NAT sur un firewall

Oui

C’est un peu contre intuitif, mais oui il est possible de faire du NAT de vpn ipsec.

Habituellement un VPN IPSEC est entre @IP-Partener1 et @IP-Partener2. En fait, il est tout à fait possible d’introduire un intermédiaire qui NAT les 2 flux UDP nécessaires au VPN IPSEC 500-dpt:isakmp et 4500-dpt:ipsec-nat-t:

graph LR;
    A["@IP-Partener1"]
    B["@NAT"]
    C["@IP-Partener2"]
    A --> B --> C
    C --> B --> A

Cela à été testé sur de multiples technologies de VPN sans poser de problème d’implémentation.

Est-il possible d’utiliser des FQDN pour mettre en place des VPNs

Oui

Par exemple sur l’interface des PFsence pour la remote gateway il est noté: Enter the public IP address or host name of the remote gateway.

Mettre en place du NAT d’un VPN sur centOS7-iptables.

Step 1 : Installer les softs et paramétrer l’OS

$ package yum install -y iptables tcpdump iptables-services
$ systemctl enable iptables
$ systemctl start iptables
$ echo "1" >  /proc/sys/net/ipv4/ip_forward
$ sysctl -w net.ipv4.ip_forward=1

Step 2 : Valider le routage

Pour que le NAT fonctionne sur la machine il faut que les 2 partenaires soient accessibles. L’utilisation conjointe de 2 commandes permet de valider cela:

  • tcpdump -p -i eth1 port 500 permet de voir les paquets passés
  • telnet $IP-Partener2 500 permet de générer des paquets

Step 3 : Installer les règles de NAT des 2 flux et paramétrer la bonne redirection :

$ iptables -t nat -A PREROUTING -p udp -s $IP-Partener1 --dport 500  -i eth1 -j DNAT --to $IP-Partener2:500
$ iptables -t nat -A PREROUTING -p udp -s $IP-Partener1 --dport 4500 -i eth1 -j DNAT --to $IP-Partener2:4500
$ iptables -t nat -A PREROUTING -p udp -s $IP-Partener2 --dport 500  -i eth1 -j DNAT --to $IP-Partener1:500
$ iptables -t nat -A PREROUTING -p udp -s $IP-Partener2 --dport 4500 -i eth1 -j DNAT --to $IP-Partener1:4500

$ iptables -F FORWARD
$ iptables -t nat -A POSTROUTING -j MASQUERADE

Mettre en place du NAT d’un VPN sur packet filter.

Voila un exemple de règle de nat:

#rdr on vtnet0 inet proto udp from $IP-Partener1 port = isakmp  to $IPInterfaceOne port = isakmp  ->  $IP-Partener2
#rdr on vtnet0 inet proto udp from $IP-Partener2 port = isakmp  to $IPInterfaceOne port = isakmp  ->  $IP-Partener1
#rdr on vtnet0 inet proto udp from $IP-Partener1 port = sae-urn to $IPInterfaceOne port = sae-urn -> $IP-Partener2
#rdr on vtnet0 inet proto udp from $IP-Partener2 port = sae-urn to $IPInterfaceOne port = sae-urn ->  $IP-Partener1

Quelques liens utiles :

Image de l'auteur Guillaume Moulard

L'auteur:  Guillaume Moulard

Mon premier code était sur un ZX81... Mes derniers emois sont le week-end pour mes Raspberrys PI et la semaine pour les techno du Cloud. www.moulard.org

Vous avez vu une erreur ? Quelque chose ne va pas ? Vous pouvez contribuer à cette page sur GitHub ou laisser un commentaire en dessous. Merci d'être passé par là :)