Créer un réseau interne avec une gateway

network admin linux

J’ai récemment fais le test de mettre en place une passerelle réseau avec des machines virtuelle. Pour rappel, une passerelle réseau est un équipement qui permet d’isoler un réseau interne d’un réseau externe. Vous en avez sûrement une chez vous: votre box internet. Je ne vais pas vous faire un cours sur le fonctionnement, d’autres l’on déjà très bien fait.

Pour mes tests, j’ai choisi d’utiliser des machines virtuelles Debian sous Virtual Box. Nous allons donc utiliser deux machines virtuelles:

  • l’une sera la passerelle
  • l’autre sera un serveur web

Le schéma est donc le suivant:

Exterieur
    +------------+
                 |
                 +
          +--------------------+
+---------+ Gateway            +-------+
          +--------------------+
                 +
                 |
                 +
          +--------------------+
          |Apache              |
          +--------------------+

Création de la Gateway

La gateway fait passerelle entre deux réseaux:

  • le réseau publique connecté à internet
  • le réseau privé qui englobe toutes les autres machines virtuelles

Logiquement, si elle est connectée à deux réseaux, elle doit posséder deux cartes réseaux. La première étapes, avant même de démarrer la VM, est de créer ces deux cartes réseaux sur Virtual Box. On se rend donc donc la configuration du réseau de la machine virtuelle et on active deux cartes:

  • un réseau bridge qui a accès à internet mais pas aux autres VM
  • un réseau interne (intnet) qui a accès aux autres machines virtuelles

On démarre ensuite la machine virtuelle.

Une fois connecté sur la machine virtuelle, on utilise la commande ip a (pour les anciens ifconfig est deprecated :) ). On voit qu’une seule des deux cartes est configurée. Il faut donc configurer la deuxième. On rajoute cette configuration au fichier /etc/network/interfaces.

allow-hotplug enp0s8
iface enp0s8 inet static
  address 192.168.1.254
  netmask 255.255.255.255

Plus d’infos sur comment mettre une IP statique sur Debian

Par défaut, Debian accepte uniquement les paquets réseaux qui lui sont destiné et il “jette” les autres. Il faut donc activer une option qui permet de transmettre ces paquets s’ils ne lui sont pas adressé. Pour cela, on dé-commente la ligne suivante dans /etc/sysctl.conf.

net.ipv4.ip_forward=1

Il ne nous reste plus qu’a indiquer comment rediriger ces paquets avec une règle iptables:

$ iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

Pour que ces modifications soient actives au démarrage, il faut les enregistrer dans un fichier avec la commande iptables-save:

$ iptables-save > /etc/iptables_rules.save

Et on rajoute cette configuration dans le fichier /etc/network/interfaces afin que les modifications soient apportées lors du prochaine redémarrage:

allow-hotplug enp0s8
iface enp0s8 inet static
  address 192.168.1.254
  netmask 255.255.255.255

Pour terminer on active l’interface réseau:

$ sudo ifup enp0s8

Si tout c’est bien passé, on doit être capable de réaliser un ping sur une machine connecté au réseau intnet.

Création d’un serveur Apache Basique

Sur notre deuxième machine virtuelle, on va simplement associer un réseau interne (accessible uniquement par les VM qui sont sur réseau).

La première chose à faire est de lui attribuer une IP statique et de spécifier la gateway via le fichier /etc/network/interfaces.

allow-hotplug enp0s3
iface enp0s3 inet static
  address 169.254.1.50
  netmask 255.255.255.255
  gateway 192.168.1.254

on rédmarre ensuite l’interface

$ sudo ifdown enp0s3
$ sudo /etc/init.d/networking restart
$ sudo ifup enp0s3

A partir de maintenant, on doit avoir accès à internet à travers la gateway:

$ ping 8.8.8.8 # le DNS de google
$ ping google.fr

si vous pouvez pinger 8.8.8.8 mais pas google.fr, c’est très probablement un problème de DNS. il suffit d’éditer le fichier /etc/resolv.conf et mettre un DNS à la main comme 8.8.8.8. Redémarrez votre carte et vérifier que ça fonctionne.

Vue que l’on accès à internet, nous pouvons maintenant installer un serveur Apache

$ sudo apt install apache2

Mettre en place une redirection sur la Gateway

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 169.254.1.50:80

On n’oublie pas d’enregistrer les modifications pour qu’elles soient actives au prochain démarrage:

$ sudo iptables-save | sudo tee /etc/iptables_rules.save

Et voilà

Conclusion

Nous arrivons donc à cette installation:

Exterieur
    +------------+
                 |
                 |
                 +
          10.0.0.1
          255.255.255.255
          +--------------------+
          | Gateway            |
+---------+ - enp0s3: bridge   +-------+
          | - enp0s8: internal |
          |                    |
          +--------------------+
          192.168.1.254
          255.255.255.255
                 +
                 |
                 +
          169.254.1.50
          255.255.255.255
          +--------------------+
          |M02 Apache          |
          | - enp0s3: internal |
          |                    |
          +--------------------+

Nous pouvons donc facilement réaliser des logs sur les paquets qui transite ou bien les filtrer selon certaines règles définies.

Licence Creative Commons
Cet article de Alexandre Rousseau est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.