Tunnel L3 - GRE
1. Introduction : Pourquoi utiliser GRE ?
1.1. À quoi sert un tunnel GRE ?
Un tunnel GRE (Generic Routing Encapsulation) permet de créer un lien direct et sécurisé entre deux réseaux distants, comme si ils étaient connectés localement. Exemple concret :
-
Vous avez un réseau local derrière une box opérateur standard.
-
Vous voulez une IP publique sur une ou des machines sur votre réseau local
1.2. Avantages de GRE
-
Simple à configurer.
-
Protocole léger
-
Compatible avec presque tous les routeurs.
1.3. Inconvénients
-
Pas de chiffrement natif.
-
Nécessite une configuration manuelle du routage.
2. Prérequis
2.1. Ce dont vous avez besoin
-
Une IP publique (ou une redirection de port si derrière une box).
-
Un routeur compatible GRE (Linux, MikroTik, Cisco, etc.).
-
Un service Tunnel-IP.
2.2. Ports et NAT
-
GRE n'est ni UDP, ni TCP (protocole 47).
-
Si le routeur final est derrière une box / NAT, il faut rediriger le GRE vers le routeur final, certaines box ont des ALG automatiques, mais il est souvent préférable de configurer une DMZ.
3. Étape 1 : Créer le tunnel sur Tunnel-IP.com
3.1. Accéder au tableau de bord
-
Connectez-vous à panel.tunnel-ip.com
-
Allez dans "Tunnels" > "GRE".
-
Remplissez les informations :
-
Validez. La plateforme s'occupera de choisir les IPs et de configurer le tunnel côté Tunnel-IP.com.
-
Cliquez sur "Accéder" pour récupérer les détails du tunnel
3.2. Créer le subnet (Route côté plateforme)
1. Allez dans "Subnets"
2. Copiez le bloc d'IP publique et collez le dans le formulaire
3. Cliquez sur Créer
4. Une fois son statut à "Actif", la route est correctement installée sur les routeurs de la plateforme, il ne vous reste plus qu'à configurer le tunnel
4. Étape 2 : Configurer le tunnel
4.1. Exemple pour Linux (Ubuntu/Debian)
Étapes :
- Activer le forwarding IP (pour permettre le routage) :
**(Pour rendre permanent, ajoutez* `*net.ipv4.ip_forward=1*
*dans*/etc/sysctl.conf
`.)*
- Créer l’interface tunnel :
- `tunnel0
` : Nom de l’interface tunnel.
- `remote 172.16.126.33
` : IP distante (Tunnel-IP.com).
- Assigner une IP au tunnel :
- `100.64.0.6/30
: IP locale du tunnel (ex :100.64.0.5/30
` est côté plateforme).
- `fd00:42:cafe:1::2/64
` : IPv6 Interne client
4.2. Exemple pour MikroTik
Étapes :
- Créer l’interface GRE :
- Assigner une IP au tunnel :
/ip/address/add address=100.64.0.6/30 interface=tun4
/ipv6/address/add address=fd00:42:cafe:1::2/64 interface=tun4
4.3. Exemple pour Cisco (IOS/XE)
Étapes :
- Accéder au mode configuration :
- Créer l’interface tunnel :
interface Tunnel0
tunnel source 192.168.1.1 # IP locale du routeur
tunnel destination 172.16.126.33 # IP distante
tunnel mode gre ip
ip address 100.64.0.5 255.255.255.252 # IP locale du tunnel
- `Tunnel0
` : Nom de l’interface tunnel.
- `tunnel mode gre ip
` : Active le mode GRE pour IPv4.
- Activer l’interface :
- Sauvegarder la configuration :
4.4. Exemple pour Arista (EOS)
Étapes :
- Accéder au mode configuration :
- Créer l’interface tunnel :
interface Tunnel0
tunnel source 192.168.1.1 # IP locale du routeur
tunnel destination 172.16.126.33 # IP distante
tunnel mode gre ip
ip address 100.64.0.5/30 # IP locale du tunnel
- La syntaxe est très proche de Cisco, mais EOS est plus réactif pour les changements dynamiques.
- Activer l’interface :
- Sauvegarder la configuration :
4.5. Exemple pour Juniper (JunOS)
Étapes :
- Accéder au mode configuration :
- Créer l’interface tunnel :
set interfaces gr-0/0/0 tunnel source 192.168.1.1
set interfaces gr-0/0/0 tunnel destination 172.16.126.33
set interfaces gr-0/0/0 family inet address 100.64.0.6/30
- `gr-0/0/0
` : Nom de l’interface GRE (peut varier selon le modèle).
- Juniper utilise une syntaxe hiérarchique et des "commit" pour appliquer les changements.
- Activer l’interface :
5. Étape 3 : Router les IP publiques vers le tunnel
5.1. Pourquoi ?
La plateforme vous route un bloc d’IP publiques (ex :
198.51.100.0/30) sur votre IP interne du tunnel, afin que ces IPs fonctionnent correctement, vous devez router ce bloc d'IP sur votre réseau et le trafic sortant par le tunnel.
Pour cela, 3 principales méthodes d'offrent à vous :
-
NAT 1:1 (1 IP publique → 1 IP privée)
-
LAN public (utilisation directe des IPs publiques)
-
Routage en /32 (1 IP publique par machine)
5.2. Rappel : Architecture du Tunnel
-
La plateforme vous route un bloc public (ex:
198.51.100.0/30). -
Votre routeur doit gérer ce bloc pour exposer vos services.
5.3. Cas d’Usage du Bloc /30
Un
/30 contient
4 adresses IP :
-
198.51.100.0: Adresse réseau (inutilisable en LAN). -
198.51.100.1: IP Utilisable -
198.51.100.2: IP Utilisable -
198.51.100.3: Adresse broadcast (inutilisable en LAN).
5.4. Méthode 1 : NAT 1:1 (Translation 1 IP publique → 1 IP privée)
Avantages principaux : Permet de ne pas avoir à modifier l'adressage privé de votre réseau, et permet d'utiliser l'IP de réseau et broadcast.
Inconvénients : Adressage moins clair (Conversion IP publique -> privée), charge plus lourde sur le routeur (Le routeur est en charge de la translation NAT)
Schéma :
Configurations :
Linux :
# Activer l'IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Ajouter l'IP sur une interface (on utilise la loopback par exemple)
ip a add 198.51.100.0/32 dev lo
# 1:1 Static NAT
iptables -t nat -A PREROUTING -d 198.51.100.0 -j DNAT --to-destination 192.168.1.100
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 198.51.100.0
MikroTik :
/ip address add address=198.51.100.0/32 interface=eth0
/ip firewall nat add chain=dstnat dst-address=198.51.100.0 action=dst-nat to-addresses=192.168.1.100
/ip firewall nat add chain=srcnat src-address=192.168.1.100 action=src-nat to-addresses=198.51.100.0
Cisco :
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
interface GigabitEthernet0/1
ip address 198.51.100.0 255.255.255.255
ip nat outside
ip nat inside source static 192.168.1.100 198.51.100.0
Arista :
interface Ethernet1
ip address 192.168.1.1/24
ip nat inside
interface Ethernet2
ip address 198.51.100.0/32
ip nat outside
ip nat inside source static 192.168.1.100 198.51.100.0
Juniper :
set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/24
set interfaces ge-0/0/1 unit 0 family inet address 198.51.100.0/32
set security nat source rule-set OUTBOUND rule NAT1 match source-address 192.168.1.100/32
set security nat source rule-set OUTBOUND rule NAT1 then source-nat address 198.51.100.0
set security nat destination pool DNAT_POOL address 192.168.1.100/32
set security nat destination rule-set INBOUND rule NAT1 match destination-address 198.51.100.0/32
set security nat destination rule-set INBOUND rule NAT1 then destination-nat pool DNAT_POOL
5.5 Méthode 2 : LAN Public (Utilisation directe des IPs publiques)
Avantages principaux : Adressage propre, explicite
Inconvénients : Perte de 2 IPs utilisables (IP de réseau et IP de broadcast) + 1 IP est forcément assignée au routeur.
(Attention : Avec un /30 en LAN, vous n’avez qu’une seule IP utilisable. Pour plus d’IPs, prenez un bloc plus grand, ex: /29. ou faites du NAT 1:1 ou attribution en /32)
Configurations :
Linux :
MikroTik :
Cisco :
Juniper :
5.6. Méthode 3 : Routage en /32 (1 IP publique par machine)
Avantages principaux : Adressage propre, explicite, aucune perte d'IP
Inconvénients : Non supporté par Windows, mal supporté par certains routeurs / OS, 100% du trafic passe par le routeur
Configurations :
Linux :
# Sur le routeur :
ip route add 198.51.100.0/30 dev eth0 # eth0 = interface vers la Machine A
# Sur la Machine A :
ip addr add 203.0.113.1/32 dev eth0
ip route add default via 192.168.1.100 dev eth0 # IP de votre routeur local
# Si error lors de l'ajout de la route, il faut ajouter une règle :
# ip route add 192.168.1.100 dev eth0
MikroTik :
/ip route add dst-address=198.51.100.0/30 interface=LAN
# Sur la Machine A :
# Pareil que pour Linux, IP : 198.51.100.1 Gateway 192.168.1.100
Cisco :
Juniper :
5.7. Router le trafic sortant par le tunnel
Si vous ne faites pas cette étape, les IPs ne fonctionneront pas
Linux (ip route + policy routing)
# Création d'une table de routage
echo "142 tunnel" >> /etc/iproute2/rt_tables
# Routage vers l'extérieur via l'IP locale de la plateforme
ip route add default via 100.64.0.5 table tunnel
# Tout le trafic en provenance de nos IPs publiques, sortent via le tunnel
ip rule add from 198.51.100.0/30 table tunnel
Effet :
Tout hôte du réseau
198.51.100.0/30 sort par le tunnel, les autres via la gateway par défaut.
Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :
ip link add vrf-GRE type vrf table 142 # On créer la VRF
ip link set dev tunnel0 master vrf-GRE # On ajoute le tunnel dans la VRF
ip route add default via 100.64.0.5 table 142 # On ajoute la route par défaut
ip link set dev eth0 master vrf-GRE # On ajoute notre interface LAN dans la VRF (Attention si elle est partagée avec votre réseau local, le réseau local ne marchera plus, pour cela vous pouvez créer une interface dummy ou utiliser une interface séparée)
MikroTik
/routing/table/add name=GRE-OUT fib
/routing/rule/add action=lookup-only-in-table table=GRE-OUT src-address=198.51.100.0/30
/ip route add dst-address=0.0.0.0/0 gateway=100.64.0.5 routing-table=GRE-OUT
Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :
/ip/vrf add name=GRE-VRF interfaces=gre1,ether1
/ip route add routing-table=GRE-VRF dst-address=0.0.0.0/0 gateway=100.64.0.5
Cisco
ip access-list extended GRE-OUT
permit ip 198.51.100.0 0.0.0.3 any
route-map GRE-ROUTE permit 10
match ip address GRE-OUT
set ip next-hop 100.64.0.5
interface GigabitEthernet0/0
ip policy route-map GRE-ROUTE
📌 On applique l’ACL sur l’interface LAN → tout ce bloc sort vers Tunnel0.
Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec
vrf definition OUT-GRE
rd 100:1
!
address-family ipv4
exit-address-family
!
interface Tunnel0
vrf forwarding OUT-GRE
!
interface GigabitEthernet0/0/1
vrf forwarding OUT-GRE
!
! Default route de la VRF vers le vrai Next-Hop
ip route vrf OUT-GRE 0.0.0.0 0.0.0.0 100.64.0.5
La syntaxe Cisco peux varier selon les versions de l'OS
Arista
ip access-list GRE-OUT
10 permit ip 198.51.100.0/30 any
route-map GRE-PBR permit 10
match ip address GRE-OUT
set ip next-hop 100.64.0.5 # IP tunnel remote
interface Ethernet1
ip policy route-map GRE-PBR
Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec
vrf instance GRE-VRF
interface Tunnel0
vrf GRE-VRF
interface Eth1
vrf GRE-VRF
ip route vrf GRE-VRF 0.0.0.0/0 10.64.0.5
Juniper
set routing-instances GRE-VRF instance-type virtual-router
set routing-instances GRE-VRF interface gr-0/0/0.0
set routing-instances GRE-VRF routing-options static route 0.0.0.0/0 next-hop 100.64.0.5
set firewall family inet filter PBR term GRE from source-address 198.51.100.0/30
set firewall family inet filter PBR term GRE then routing-instance GRE-VRF
set firewall family inet filter PBR term DEFAULT then accept
set interfaces ge-0/0/1 unit 0 family inet filter input PBR
📌 Le trafic matché bascule dans la VRF = sortie via GRE.
6. Commandes spécifiques par constructeur
| Constructeur | Commande pour vérifier le tunnel | Commande pour vérifier le routage |
|---|---|---|
| Cisco | show interface Tunnel0 |
show ip route |
| Arista | show interface Tunnel0 |
show ip route |
| Juniper | show interfaces gr-0/0/0 |
show route |
| Linux | ip tunnel show |
ip route |
| MikroTik | /interface gre print |
/ip route print |
7. Vérification et Dépannage
7.1. Tester la connectivité
-
Depuis votre routeur :
-
Depuis une machine locale :
7.2. Problèmes courants
| Symptôme | Cause Possible | Solution |
|---|---|---|
| Le tunnel ne répond pas | Port 47 bloqué | Vérifiez la redirection sur votre box |
| Les IPs publiques ne pingent pas | Route manquante ou NAT mal configuré | Vérifiez ip route ou show ip route |
| Latence élevée / Pertes de paquets | MTU trop grande | Réduisez la MTU : ip link set mtu 1476 dev tunnel0 |
8. Bonnes Pratiques
-
Sécurité :
- Filtrez le trafic entrant avec un pare-feu (ex:
iptablesou ACL Cisco).
- Filtrez le trafic entrant avec un pare-feu (ex:
-
Performance :
-
Réduisez la MTU à
1476pour éviter la fragmentation. -
Activez le keepalive sur le tunnel (ex:
keepalive 10 3sur Cisco).
-
-
Redondance :
- Configurez un deuxième tunnel GRE pour le failover.
9. Prochaines Étapes
- XXXXX




