VPN : Comment NATer un VPN IPSEC?
Published: 2021-12-27 15:27:03

---
title: VPN : Comment NATer un VPN IPSEC?
published: true
date: 2020-11-20 12:19:36 UTC
tags: 
canonical_url: https://blog.moulard.org/nat-vpn/
---

# 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`:

<script src="https://unpkg.com/mermaid@8.8.0/dist/mermaid.min.js" type="text/javascript"></script><script type="text/javascript">
    
    mermaid.initialize({ startOnLoad:true });
</script>
```

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 :

- Le livre : [https://inetdoc.net/pdf/iptables-tutorial.pdf](https://inetdoc.net/pdf/iptables-tutorial.pdf)
- La doc CentOS pour mettre en place du NAT : [http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-fr-4/s1-firewall-ipt-fwd.html](http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-fr-4/s1-firewall-ipt-fwd.html)