# Tunnel L2 - GRETAP

## **1. Introduction : Pourquoi utiliser GRETAP ?**

### **1.1. À quoi sert un tunnel GRETAP ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**GRETAP (GRE Tunnel Access Point)**<span style="white-space: pre-wrap;"> est une variante Layer 2 du tunnel GRE classique. Contrairement au GRE standard qui transporte des paquets IP (Layer 3), GRETAP transporte des </span>**trames Ethernet complètes**<span style="white-space: pre-wrap;">, ce qui permet de bridger des réseaux distants comme s'ils étaient connectés au même switch. </span>**Exemple concret :**

- Vous avez un réseau local derrière une box opérateur standard.
- Vous voulez une ou des IPs publiques directement accessibles sur vos machines, comme si elles étaient sur le même réseau que la plateforme.

### **1.2. Avantages de GRETAP**

- Transport Layer 2 complet (trames Ethernet).
- Simple à configurer (même syntaxe que GRE classique).
- Compatible avec la plupart des équipements réseau.
- Protocole léger.
- Peut être combiné avec d'autres tunnels L2 via un bridge.

### **1.3. Inconvénients**

- Pas de chiffrement natif.
- Utilise le protocole 47 (comme GRE) : nécessite une redirection spécifique ou DMZ si derrière un NAT.
- Overhead de 38 octets (en-tête GRE + en-tête Ethernet interne).

---

## **2. Prérequis**

### **2.1. Ce dont vous avez besoin**

- <span style="white-space: pre-wrap;">Une </span>**IP publique**<span style="white-space: pre-wrap;"> (ou une DMZ si derrière une box).</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur ou serveur compatible GRETAP**<span style="white-space: pre-wrap;"> (Linux, MikroTik, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP**.

### **2.2. Ports et NAT**

- GRETAP utilise le **protocole 47** (comme GRE classique), ce n'est ni UDP ni TCP.
- <span style="white-space: pre-wrap;">Si le routeur final est derrière une box / NAT, il faut </span>**rediriger le protocole GRE (47)**<span style="white-space: pre-wrap;"> vers le routeur final. Certaines box ont des ALG automatiques, mais il est souvent préférable de configurer une DMZ.</span>

---

## **3. Étape 1 : Créer le bridge et le tunnel sur Tunnel-IP.com**

<p class="callout info">Les tunnels L2 fonctionnent avec des **bridges** sur la plateforme. Un bridge est un switch virtuel qui regroupe vos tunnels L2 et vos subnets. Vous devez d'abord créer un bridge, puis créer le tunnel en l'associant à ce bridge.</p>

### **3.1. Créer le bridge**

1. <span style="white-space: pre-wrap;">Connectez-vous à </span>[panel.tunnel-ip.com](https://panel.tunnel-ip.com)
2. <span style="white-space: pre-wrap;">Allez dans </span>**"Bridges"**.
3. Cliquez sur **"Ajouter un Bridge"** et donnez-lui un nom.
4. Validez. Le bridge sera créé sur la plateforme.

### **3.2. Créer le tunnel GRETAP**

1. <span style="white-space: pre-wrap;">Allez dans </span>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"GRETAP"**.
2. Remplissez les informations :
    - **Nom du tunnel**<span style="white-space: pre-wrap;"> (ex : </span>`<span class="editor-theme-code">GRETAP_Tunnel</span>`).
    - **Endpoint**<span style="white-space: pre-wrap;"> (IP publique du routeur / box, ex : </span>`<span class="editor-theme-code">203.0.113.1</span>`).
    - **Bridge**<span style="white-space: pre-wrap;"> : Sélectionnez le bridge créé précédemment.</span>
    - **MTU**<span style="white-space: pre-wrap;"> : Taille maximale des paquets (-1 pour laisser la plateforme choisir).</span>
    - **Clé**<span style="white-space: pre-wrap;"> (si applicable).</span>
3. Validez. La plateforme s'occupera de configurer le tunnel côté Tunnel-IP.com.
4. Attendez que le tunnel soit créé
5. Cliquez sur "Accéder" pour récupérer les détails du tunnel

### **3.3. Créer le subnet**

1\. Allez dans **"Subnets"**

2\. Copiez le bloc d'IP publique et collez le dans le formulaire

3\. Sélectionnez le **bridge** (et non un tunnel directement) comme destination

4\. Cliquez sur Créer

5\. Une fois son statut à "Actif", la route est correctement installée sur les routeurs de la plateforme

<p class="callout warning">**Important :** La première IP du subnet sera utilisée comme **gateway** sur le bridge côté plateforme. Par exemple, pour le subnet `198.51.100.0/29`, la gateway sera `198.51.100.1`.</p>

---

## **4. Étape 2 : Configurer le tunnel**

<p class="callout info">Contrairement au GRE classique (L3), GRETAP transporte des trames Ethernet (Layer 2). Côté client, vous devez créer l'interface GRETAP puis la **bridger** avec votre interface LAN (ou lui assigner directement une IP du subnet).</p>

### **4.1. Exemple pour Linux (Ubuntu/Debian)**

#### **Étapes :**

1. **Créer l'interface GRETAP**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip link add gretap0 type gretap remote 172.16.126.33
    ip link set gretap0 up
    ```

    - `gretap0`<span style="white-space: pre-wrap;"> : Nom de l'interface GRETAP.</span>
    - `remote 172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>

2. **Option A : Assigner directement une IP publique**<span style="white-space: pre-wrap;"> :</span>

    Si vous souhaitez que le routeur lui-même ait une IP publique :
    ```bash
    ip addr add 198.51.100.2/29 dev gretap0
    ip route add default via 198.51.100.1 dev gretap0
    ```

    - `198.51.100.2/29`<span style="white-space: pre-wrap;"> : Une IP du subnet (la première IP .1 est la gateway côté plateforme).</span>
    - `198.51.100.1`<span style="white-space: pre-wrap;"> : Gateway (première IP du subnet, côté plateforme).</span>

3. **Option B : Bridger avec une interface LAN**<span style="white-space: pre-wrap;"> :</span>

    Si vous souhaitez que des machines sur votre LAN aient directement les IPs publiques :
    ```bash
    ip link add br0 type bridge
    ip link set br0 up
    ip link set gretap0 master br0
    ip link set eth1 master br0  # Interface LAN vers vos machines
    ```

    Les machines connectées à `eth1` pourront alors utiliser les IPs du subnet directement, avec `198.51.100.1` comme gateway.

4. **Activer le forwarding**<span style="white-space: pre-wrap;"> (si nécessaire) :</span>
    ```bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ```

    **(Pour rendre permanent, ajoutez* `net.ipv4.ip_forward=1` *dans* `/etc/sysctl.conf`*.)**

---

### **4.2. Exemple pour MikroTik**

<p class="callout info">MikroTik ne supporte pas nativement le GRETAP en tant que tel. Cependant, l'interface EoIP de MikroTik remplit la même fonction (tunnel GRE Layer 2). Si vous souhaitez interopérer avec un GRETAP Linux/Cisco, vous pouvez utiliser un EoIP côté MikroTik avec les mêmes paramètres, ou utiliser un bridge avec un tunnel GRE classique.</p>

#### **Alternative avec EoIP :**

1. **Créer l'interface EoIP**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/eoip/add remote-address=172.16.126.33 tunnel-id=100 name=eoip-tunnel
    ```
2. **Bridger avec une interface LAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/bridge/add name=br-gretap
    /interface/bridge/port/add bridge=br-gretap interface=eoip-tunnel
    /interface/bridge/port/add bridge=br-gretap interface=ether2  # Interface LAN
    ```
3. **Option : Assigner une IP au bridge**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /ip/address/add address=198.51.100.2/29 interface=br-gretap
    /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1
    ```

---

### **4.3. Exemple pour Cisco (IOS/XE)**

#### **Étapes :**

1. **Accéder au mode configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    enable
    configure terminal
    ```
2. **Créer l'interface tunnel en mode GRETAP**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface Tunnel0
     tunnel source 192.168.1.1  # IP locale du routeur
     tunnel destination 172.16.126.33  # IP distante
     tunnel mode gre multipoint
     no shutdown
    ```
3. **Créer le Bridge Domain et l'associer**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    bridge-domain 100
     member Tunnel0 service-instance 1
     member Vlan100
    ```
4. **Configurer l'interface VLAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface Vlan100
     ip address 198.51.100.2 255.255.255.248
     no shutdown
    ```
5. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    write memory
    ```

<p class="callout warning">La configuration de bridge L2 sur Cisco varie fortement selon la plateforme (IOS, IOS-XE, NX-OS). Consultez la documentation de votre modèle.</p>

---

### **4.4. Exemple pour Arista (EOS)**

#### **Étapes :**

1. **Accéder au mode configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    enable
    configure terminal
    ```
2. **Créer l'interface tunnel GRE en mode bridge**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface Tunnel0
     tunnel source 192.168.1.1
     tunnel destination 172.16.126.33
     tunnel mode gre
     no shutdown
    ```
3. **Bridger le tunnel avec un VLAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface Tunnel0
     switchport access vlan 100

    interface Vlan100
     ip address 198.51.100.2/29
     no shutdown
    ```
4. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    write memory
    ```

---

### **4.5. Exemple pour Juniper (JunOS)**

#### **Étapes :**

1. **Accéder au mode configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    edit
    ```
2. **Créer l'interface GRE et le bridge domain**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    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 bridge interface-mode trunk
    set interfaces gr-0/0/0 family bridge vlan-id-list 100

    set bridge-domains GRETAP-BD vlan-id 100
    set bridge-domains GRETAP-BD routing-interface irb.100

    set interfaces irb unit 100 family inet address 198.51.100.2/29
    ```
3. **Appliquer la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    commit
    ```

---

## **5. Étape 3 : Configurer les IPs publiques**

### **5.1. Architecture L2**

```
Internet → [Infrastructure Tunnel-IP.com] → [Bridge plateforme] → (Tunnel GRETAP) → [Votre Bridge/Interface] → [Vos Machines]
```

- <span style="white-space: pre-wrap;">La plateforme met la première IP du subnet comme gateway sur le bridge (ex: </span>`198.51.100.1`).
- Vos machines utilisent les autres IPs du subnet.
- <span style="white-space: pre-wrap;">Comme le tunnel est L2, les trames Ethernet passent directement, </span>**pas besoin de NAT ni de routage complexe**.

### **5.2. Attribution des IPs**

<span style="white-space: pre-wrap;">Un </span>`/29`<span style="white-space: pre-wrap;"> contient </span>**8 adresses IP**<span style="white-space: pre-wrap;"> :</span>

- `198.51.100.0`<span style="white-space: pre-wrap;"> : Adresse réseau (inutilisable).</span>
- `198.51.100.1`<span style="white-space: pre-wrap;"> : **Gateway plateforme** (réservée automatiquement).</span>
- `198.51.100.2` à `198.51.100.6`<span style="white-space: pre-wrap;"> : IPs utilisables pour vos machines.</span>
- `198.51.100.7`<span style="white-space: pre-wrap;"> : Adresse broadcast (inutilisable).</span>

### **5.3. Configuration sur les machines**

Sur chaque machine qui doit utiliser une IP publique :

#### **Linux :**

```bash
ip addr add 198.51.100.2/29 dev eth0
ip route add default via 198.51.100.1
```

#### **MikroTik :**

```
/ip/address/add address=198.51.100.2/29 interface=ether1
/ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1
```

<p class="callout info">Si vous avez bridgé l'interface GRETAP avec votre LAN, les machines peuvent être configurées directement avec les IPs publiques et la gateway `198.51.100.1`, comme si elles étaient sur un réseau local classique.</p>

---

## **6. Commandes spécifiques par constructeur**

| Constructeur | Commande pour vérifier le tunnel | Commande pour vérifier le bridge |
|---|---|---|
| **Linux** | `ip -d link show gretap0` | `bridge link show` |
| **MikroTik** | `/interface eoip print` | `/interface bridge port print` |
| **Cisco** | `show interface Tunnel0` | `show bridge-domain` |
| **Arista** | `show interface Tunnel0` | `show vlan` |
| **Juniper** | `show interfaces gr-0/0/0` | `show bridge-domain` |

## **7. Vérification et Dépannage**

### **7.1. Tester la connectivité**

- **Depuis votre routeur / machine**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ping 198.51.100.1  # Ping de la gateway plateforme
    ```
- **Vérifier l'interface GRETAP (Linux)**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip -d link show gretap0  # Vérifier les paramètres
    bridge fdb show dev gretap0  # Vérifier la table MAC
    ```
- **Depuis une machine locale**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ping 8.8.8.8  # Vérification internet
    curl -4 ifconfig.me  # Vérification de l'IP sortante
    ```

### **7.2. Problèmes courants**

| **Symptôme** | **Cause Possible** | **Solution** |
|---|---|---|
| Le tunnel ne répond pas | Protocole 47 bloqué | Vérifiez la redirection sur votre box / configurez une DMZ |
| Pas de connectivité L2 | Clé GRE incorrecte | Vérifiez que la clé correspond à celle fournie par la plateforme |
| La gateway ne répond pas | Subnet non associé au bridge | Vérifiez que le subnet est bien associé au bridge sur la plateforme |
| Latence élevée / Pertes de paquets | MTU trop grande | Réduisez la MTU : `ip link set mtu 1462 dev gretap0` (overhead GRETAP = 38 octets) |
| Les IPs publiques ne fonctionnent pas | Mauvaise gateway | Utilisez la première IP du subnet comme gateway (ex: `198.51.100.1`) |

---

## **8. Bonnes Pratiques**

1. **Sécurité**<span style="white-space: pre-wrap;"> :</span>
    - <span style="white-space: pre-wrap;">Filtrez le trafic entrant avec un pare-feu (ex: </span>`iptables`<span style="white-space: pre-wrap;"> ou ACL).</span>
    - GRETAP n'offre aucun chiffrement natif. Envisagez IPsec ou Wireguard en complément si le chiffrement est nécessaire.
2. **Performance**<span style="white-space: pre-wrap;"> :</span>
    - <span style="white-space: pre-wrap;">Réduisez la MTU à </span>`1462`<span style="white-space: pre-wrap;"> pour éviter la fragmentation (overhead GRETAP = 38 octets).</span>
    - Vérifiez que la MTU de votre lien WAN est suffisante pour encapsuler les trames.
3. **Bridging**<span style="white-space: pre-wrap;"> :</span>
    - Vous pouvez combiner plusieurs tunnels L2 (VXLAN, EoIP, GRETAP) sur le même bridge, aussi bien sur la plateforme que côté client.
    - Attention aux boucles de bridge : activez le STP si nécessaire.

---