Tunnel GRE entre Mikrotik et Debian

Pour mon infra en datacenter, j'ai décidé de mettre un monitoring externe (hébergé en dehors de mon infrastructure). Mon Observium ainsi que mes différents services SNMP était exposé sur mes IPs publique, et cela pose quelques problèmes de sécurité, notamment de l'UDP spoofing.

J'ai donc un jour (ou plutôt une nuit) reçu ce mail, ce qui ma motivée à retravailler mon monitoring, et ne plus le faire passer par mes IPs publiques.

L'infrastructure est actuellement la suivante:

Toutes les machines communiquent via les IP publiques en SNMP avec la VM Observium.

L'infrastructure finale ressemble à ça:

La VM Observium sera relié via un tunnel GRE au Mikrotik, qui permettra d'accéder au reste du réseau privé de l'infrastructure.

Passons donc à la configuration du tunnel !

Prérequis:

  • Un réseau privé ou toutes vos VM et le Mikrotik pourront communiquer ensemble (Dans mon cas, 10.20.1.0/24)
  • Un réseau privé pour les endpoint du tunnel GRE (dans mon cas, 10.99.99.0/24
  • Et bien sur, le Mikrotik et une VM sous Debian que vous voulez interconnecter !

Configuration du Mikrotik

En GUI (via winbox):


Tout d'abord, on va créer le range pour le réseau privé des VMs. Pour cela, il faut aller dans IP -> Addresses

Cliquez sur le +, et un pop-up va vous demander quelques informations:

Dans address, mettez l'IP du range que vous souhaitez utiliser sur le Mikrotik et le CIDR, puis choisissez l'interface ou vous voulez appliquer l'IP (Dans mon cas, cluster est un bridge composé de plusieurs ports du Mikrotik).
Une fois les paramètres rentrés, cliquez sur Apply.

Nous allons maintenant créer le tunnel GRE. Pour cela, allez dans Interface, cliquez sur le +, puis choisissez GRE Tunnel.

La configuration doit ressembler à ceci:

Il vous faut remplir "Name", "Local Address", qui correspond à l'adresse IP public de votre Mikrotik, et "Remote Address", qui correspond à l'IP public de votre VM. Vous pouvez laisser tous les autres paramètres par défaut.
Une fois les paramètres rentrés, cliquez sur Apply.

Ensuite, on va retourner de nouveau dans IP -> Address, pour créer le range pour le tunnel GRE. Voici la configuration dans mon cas:

N'oubliez pas de choisir l'interface qui correspond au tunnel GRE que vous venez de créer.
C'est fini pour la configuration du Mikrotik, il ne vous reste plus qu'à configurer la VM !

En CLI:

Voici la même configuration que ci-dessus, mais en ligne de commande. Pensez à changer les différentes IPs et le nom de vos interfaces.

interface gre add local-address=185.119.X.X name=to-observium remote-address=44.151.X.X
/ip address
add address=10.20.1.254/24 interface=Cluster network=10.20.1.0
add address=10.99.99.1/24 interface=to-observium network=10.99.99.0

Configuration de la VM

Pour la partie VM, voici les commandes à appliquer:

ip tunnel add infra mode gre remote 185.119.X.X local 44.151.X.X
ip tunnel change infra ttl 64
ip link set infra up
ip addr add 10.99.99.2 dev infra
ip route add 10.20.1.0/24 dev infra

N'ayez pas peur, je vais vous expliquer !

ip tunnel add infra mode gre remote 185.119.X.X local 44.151.X.X
On crée le tunnel GRE qui s'appelle infra, avec l'IP remote du Mikrotik et l'IP locale de la VM
ip tunnel change infra ttl 64
On change le TTL du tunnel
ip link set infra up
On active le tunnel
ip addr add 10.99.99.2 dev infra
On ajoute l'adresse au tunnel
ip route add 10.20.1.0/24 dev infra
On ajoute la route vers le range privé de l'infra

Et voilà, votre tunnel est monté !
Vous devriez pouvoir ping depuis la VM toutes les IP privés de votre infra:

cecile@Observium:~$ ping 10.20.1.254
PING 10.20.1.254 (10.20.1.254) 56(84) bytes of data.
64 bytes from 10.20.1.254: icmp_seq=1 ttl=64 time=1.45 ms
64 bytes from 10.20.1.254: icmp_seq=2 ttl=64 time=1.48 ms
64 bytes from 10.20.1.254: icmp_seq=3 ttl=64 time=1.63 ms
^C
--- 10.20.1.254 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 1.451/1.520/1.627/0.082 ms
cecile@Observium:~$ ping 10.20.1.1
PING 10.20.1.1 (10.20.1.1) 56(84) bytes of data.
64 bytes from 10.20.1.1: icmp_seq=1 ttl=63 time=26.1 ms
64 bytes from 10.20.1.1: icmp_seq=2 ttl=63 time=1.60 ms
^C
--- 10.20.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 1.598/13.851/26.105/12.254 ms

Votre VM communique désormais avec votre infrastructure en privé !

Aller plus loin

Maintenant que nous avons vu que la configuration de notre tunnel fonctionne, nous allons la rendre persistante. En effet, avec les commandes 'ip', le tunnel n'est pas persistant et disparaîtra au redémarrage
Nous allons donc éditer le fichier /etc/network/interfaces :

iface infra inet static
address 10.99.99.2/24
pre-up ip tunnel add infra mode gre remote 185.119.X.X local 44.151.X.X ttl 64
up ip route add 10.20.1.0/24 dev infra
post-down ip tunnel del infra

Alternativement et plus proprement, vous pouvez aussi utiliser cette configuration:

auto infra
iface infra inet tunnel
  mode gre
  local 44.151.X.X
  endpoint 185.119.X.X
  up ip route add 10.20.1.0/24 dev infra
  down ip route delete 10.20.1.0/24
  ttl 64
  address 10.99.99.2
  netmask 255.255.255.0

Votre tunnel est désormais persistant !

Afficher les commentaires