Routeur Nat et OpenVPN

Cet article a pour but d’expliquer de façon synthétique comment réaliser un routeur relativement simple d’emploi présentant les fonctionnalité suivante:

  • Routage NAT (Network Address Translation) entre une ip publique et un sous réseau privé
  • Possibilité de ce connecter en VPN au sous réseau privé, mais aussi de surfer sur le net via ce réseau privé (pour outrepasser les limites de hot-spot par exemple)
  • Possibilité d’ouvrir un port sur l’ip externe et le rediriger sur un autre port sur l’une des machines du réseau privé.
    Pourquoi ne pas utiliser IPCOP ou autres ? Parce qu’IPCOP ne supporte pas nativement les réglages quelques peut « spéciaux » des IP FAIL OVER d’OVH.
    Certes, il existe des scripts qui permettent de modifier les configuration de passerelles, mais cela est trop hasardeux sur un système en production car il faut être sur que le routeur redémarre sans intervention en cas de coupure.

Le routage NAT, est nommé MASQUERADE dans les firewall linux, correspond a masquer les IP des postes du réseau privé derrière l’unique adresse ip publique.
Par exemple, c’est ce que font les box internet pour permettre l’usage de plusieurs ordinateurs derrière une seule connexion.
Plus d’info ici: https://fr.wikipedia.org/wiki/Network_address_translation

 

1ère étape, installer Ubuntu (non décrit car ce n’est pas le but de ce tutoriel).

=> Installez le module ssh durant l’installation car en console hyper-v, pas de copier coller possible avec votre poste local.
=> Installez au minimum la 14.04.2 lts car le noyau 3.16 offre une meilleur compatibilité hyper-v.

 

2ème étape installer openVPN (voir tutoriel sur le sujet).

Si vous avez suivi le tutoriel sur OpenVPN le routage est déjà activé par l’activation de net.ipv4.ip_forward=1 dans sysctl.conf

=> une fois redémarré, le routage est activé. mais il n’y pas encore de NAT entre eth0 (le wan) et eth1 (le lan)

3ème étape, la mise en place du routage NAT.
Pour cela, on utilisera le firewall le plus simple, c’est UFW.

On activera également cette translation entre l’interface VPN (tun0) et le WAN (interface eth0) pour permettre aux usagers du VPN de pouvoir naviguer sur le net via le VPN.

Avant de commencer a activer un pare-feu, il est très important de ne pas perdre la main en bloquant l’interface SSH.

Si vous l’avez laisser par défaut sur le port 22,

la commande

sudo ufw allow ssh

si vous l’avez modifié (ce qui est une sécurité contre les scripts d’attaques):

sudo ufw allow votre_port_ssh/tcp

exemple: si vous avez déplacé votre port ssh en 1234

sudo ufw allow 1234/tcp

 

Pour activer le transfert des paquets entre les interfaces, il faut active le parametre DEFAULT_FORWARD_POLICY.
Dans le fichier /etc/default/ufw, changez le ce paramètre comme suit:

DEFAULT_FORWARD_POLICY="ACCEPT"

L'activation du routage nat ce fera dans le fichier before.rules situé dans /etc/ufw on ajoutera juste après les premier commentaires:
#règles pour la table NAT
*nat
:PREROUTING - [0:0]
:POSTROUTING ACCEPT \[0:0]

#on efface les règle precedentes (flush)
-F
# transmission du trafic provenant de eth1 (reseau prive) vers eth0
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# transmission du trafic provenant de tun0 (VPN) vers eth0
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

# Ouverture des ports
#-A PREROUTING -i <iface> -p tcp --dport <port public> -j DNAT --to-destination <adr lan>:<port prive>
# exemple d'ouverture de port  port public 8080 vers port prive 80 d'un poste:
#-A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

# ne pas oublier le 'COMMIT' sinon ces lignes ne seront pas traitée
COMMIT

puis activer UFW avec la commande

sudo UFW enable

=> La translation NAT est alors activée pour votre réseau privé mais aussi pour vos utilisateurs VPN.

=> il est possible d’ajouter d’autres ouvertures de port. aussi bien en tcp qu’en udp. Si le port privé est identique au port public, il n’est pas nécessaire de le mentionner:
exemple:

-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10

Dans cet exemple j’ai pris comme principe:

le wan est sur eth0
le lan est sur eth1 en 192.168.1.0/24
le vpn est sur tun0 en 10.10.10.0/24

Il convient, bien évidement d’adapter cet exemple a votre cas.

A bientôt.

Laisser un commentaire