# Configuration

# Tunnel L3 - GRE

## **1. Introduction : Pourquoi utiliser GRE ?**

### **1.1. À quoi sert un tunnel GRE ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**GRE (Generic Routing Encapsulation)**<span style="white-space: pre-wrap;"> permet de créer un lien direct et sécurisé entre deux réseaux distants, comme si ils étaient connectés localement. </span>**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**

- <span style="white-space: pre-wrap;">Une </span>**IP publique**<span style="white-space: pre-wrap;"> (ou une redirection de port si derrière une box).</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur compatible GRE**<span style="white-space: pre-wrap;"> (Linux, MikroTik, Cisco, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP**.

### **2.2. Ports et NAT**

- GRE n'est ni UDP, ni TCP **(protocole 47)**.
- <span style="white-space: pre-wrap;">Si le routeur final est derrière une box / NAT, il faut </span>**rediriger le GRE**<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 tunnel sur Tunnel-IP.com**

### **3.1. Accéder au tableau de bord**

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>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"GRE"**.
3. Remplissez les informations :
    - **Nom du tunnel**<span style="white-space: pre-wrap;"> (ex : </span>`<span class="editor-theme-code">Tunnel_X</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>`).
    - **Clé**<span style="white-space: pre-wrap;"> (si applicable).</span>
    - [![image.png](https://docs.netario.fr/uploads/images/gallery/2025-12/scaled-1680-/DyXjzTN0xd55LJJR-image.png)](https://docs.netario.fr/uploads/images/gallery/2025-12/DyXjzTN0xd55LJJR-image.png)
4. Validez. La plateforme s'occupera de choisir les IPs et de configurer le tunnel côté Tunnel-IP.com.
5. Attendez que le tunnel soit créé[![image.png](https://docs.netario.fr/uploads/images/gallery/2025-12/scaled-1680-/JoUgMlA36sS52bFM-image.png)](https://docs.netario.fr/uploads/images/gallery/2025-12/JoUgMlA36sS52bFM-image.png)
6. Cliquez sur "Accéder" pour récupérer les détails du tunnel
7. [![image.png](https://docs.netario.fr/uploads/images/gallery/2025-12/scaled-1680-/wWW99RJJRQz3edYC-image.png)](https://docs.netario.fr/uploads/images/gallery/2025-12/wWW99RJJRQz3edYC-image.png)

### **3.2. Créer le subnet (Route côté plateforme)**

1\. Allez dans "Subnets"

[![image.png](https://docs.netario.fr/uploads/images/gallery/2025-12/scaled-1680-/B327TDNHksMUMgVm-image.png)](https://docs.netario.fr/uploads/images/gallery/2025-12/B327TDNHksMUMgVm-image.png)

2\. Copiez le bloc d'IP publique et collez le dans le formulaire

[![image.png](https://docs.netario.fr/uploads/images/gallery/2025-12/scaled-1680-/ReRl7qf4yVjBjG3X-image.png)](https://docs.netario.fr/uploads/images/gallery/2025-12/ReRl7qf4yVjBjG3X-image.png)

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 :**

1. **Activer le forwarding IP**<span style="white-space: pre-wrap;"> (pour permettre le routage) :</span>  
    ```bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ```
    
      
    **(Pour rendre permanent, ajoutez* `<em class="editor-theme-code editor-theme-italic">net.ipv4.ip_forward=1</em>` *dans* `<em class="editor-theme-code editor-theme-italic">/etc/sysctl.conf</em>`*.)**
2. **Créer l’interface tunnel**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    ip tunnel add tunnel0 mode gre remote 172.16.126.33
    ip link set tunnel0 up
    ```
    
    
    - `<span class="editor-theme-code">tunnel0</span>`<span style="white-space: pre-wrap;"> : Nom de l’interface tunnel.</span>
    - `<span class="editor-theme-code">remote 172.16.126.33</span>`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
3. **Assigner une IP au tunnel**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    ip addr add 100.64.0.6/30 dev tunnel0
    ip -6 addr add fd00:42:cafe:1::2/64 dev tunnel0
    ```
    
    
    - `<span class="editor-theme-code">100.64.0.6/30</span>`<span style="white-space: pre-wrap;"> : IP locale du tunnel (ex : </span>`<span class="editor-theme-code">100.64.0.5/30</span>`<span style="white-space: pre-wrap;"> est côté plateforme).</span>
    - `<span class="editor-theme-code">fd00:42:cafe:1::2/64</span>`<span style="white-space: pre-wrap;"> : IPv6 Interne client</span>

---

### **4.2. Exemple pour MikroTik**

#### **Étapes :**

1. **Créer l’interface GRE**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    /interface/gre/add remote-address=172.16.126.33 name=tun4
    ```
2. **Assigner une IP au tunnel**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    /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 :**

1. **Accéder au mode configuration**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    enable
    configure terminal
    ```
2. **Créer l’interface tunnel**<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 ip
     ip address 100.64.0.5 255.255.255.252  # IP locale du tunnel
    ```
    
    
    - `<span class="editor-theme-code">Tunnel0</span>`<span style="white-space: pre-wrap;"> : Nom de l’interface tunnel.</span>
    - `<span class="editor-theme-code">tunnel mode gre ip</span>`<span style="white-space: pre-wrap;"> : Active le mode GRE pour IPv4.</span>
3. **Activer l’interface**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    no shutdown
    exit
    ```
4. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    write memory
    ```

---

### **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**<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 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.
3. **Activer l’interface**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    no shutdown
    exit
    ```
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 tunnel**<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 inet address 100.64.0.6/30
    ```
    
    
    - `<span class="editor-theme-code">gr-0/0/0</span>`<span style="white-space: pre-wrap;"> : Nom de l’interface GRE (peut varier selon le modèle).</span>
    - Juniper utilise une syntaxe hiérarchique et des "commit" pour appliquer les changements.
3. **Activer l’interface**<span style="white-space: pre-wrap;"> :</span>  
    ```bash
    commit
    ```

---

## **5. Étape 3 : Router les IP publiques vers le tunnel**

### **5.1. Pourquoi ?**

<span style="white-space: pre-wrap;">La plateforme vous route un bloc d’IP publiques (ex : </span>`<span class="editor-theme-code">198.51.100.0/30</span>`) 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**<span style="white-space: pre-wrap;"> (1 IP publique → 1 IP privée)</span>
- **LAN public**<span style="white-space: pre-wrap;"> (utilisation directe des IPs publiques)</span>
- **Routage en /32**<span style="white-space: pre-wrap;"> (1 IP publique par machine)</span>

---

### **5.2. Rappel : Architecture du Tunnel**

```
Internet → [Infrastructure Tunnel-IP.com] → (Tunnel GRE) → [Votre Routeur] → [Votre Réseau]
```

- <span style="white-space: pre-wrap;">La plateforme vous route un bloc public (ex: </span>`<span class="editor-theme-code">198.51.100.0/30</span>`).
- Votre routeur doit gérer ce bloc pour exposer vos services.

---

### **5.3. Cas d’Usage du Bloc /30**

<span style="white-space: pre-wrap;">Un </span>`<span class="editor-theme-code">/30</span>`<span style="white-space: pre-wrap;"> contient </span>**4 adresses IP**<span style="white-space: pre-wrap;"> :</span>

- `<span class="editor-theme-code">198.51.100.0</span>`<span style="white-space: pre-wrap;"> : Adresse réseau (inutilisable en LAN).</span>
- `<span class="editor-theme-code">198.51.100.1</span>`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `<span class="editor-theme-code">198.51.100.2</span>`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `<span class="editor-theme-code">198.51.100.3</span>`<span style="white-space: pre-wrap;"> : Adresse broadcast (inutilisable en LAN).</span>

---

### **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 -&gt; privée), charge plus lourde sur le routeur (Le routeur est en charge de la translation NAT)

### **Schéma :**

```
Internet → Infrastructure Tunnel-IP.com → [Votre Routeur] 198.51.100.0 → 192.168.1.100 (Privée)
```

### **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 :**

```bash
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 :**

```bash
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.

<p class="callout warning">**(Attention : Avec un /30 en LAN, vous n’avez qu’une seule IP utilisable. Pour plus d’IPs, prenez un bloc plus grand, ex:** `<span class="editor-theme-code">/29</span>`**. ou faites du NAT 1:1 ou attribution en /32)**</p>

### **Configurations :**

#### **Linux :**

```
# Assigner l’IP de la passerelle (votre routeur)
ip addr add 198.51.100.1/30 dev eth1
```

#### **MikroTik :**

```
/ip address add address=198.51.100.1/30 interface=ether1
```

#### **Cisco :**

```
interface GigabitEthernet0/1
 ip address 98.51.100.1 255.255.255.252
 no shutdown
```

#### **Juniper :**

```
set interfaces ge-0/0/1 unit 0 family inet address 198.51.100.1/30
```

---

### **5.6. Méthode 3 : Routage en /32 (1 IP publique par machine)**

**Avantages principaux :** Adressage propre, explicite, aucune perte d'IP

**Inconvénients : N**on 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 :**

```
ip route 198.51.100.0 255.255.255.252 GigabitEthernet0/0/1
```

#### **Juniper :**

```
set routing-options static route 198.51.100.0/30 interface ge-0/0/1
```

---

### **5.7. Router le trafic sortant par le tunnel**

<p class="callout danger">Si vous ne faites pas cette étape, les IPs ne fonctionneront pas</p>

#### **Linux (ip route + policy routing)**

```bash
# 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 :**  
<span style="white-space: pre-wrap;">Tout hôte du réseau </span>`<span class="editor-theme-code">198.51.100.0/30</span>`<span style="white-space: pre-wrap;"> sort par le tunnel, les autres via la gateway par défaut.</span>

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```bash
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

```bash
/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
```

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```bash
/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

```fortran
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.

<p class="callout info"><span style="white-space: pre-wrap;">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec </span></p>

```fortran
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
```

<p class="callout warning">La syntaxe Cisco peux varier selon les versions de l'OS</p>

---

#### Arista

```bash
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
```

<p class="callout info"><span style="white-space: pre-wrap;">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec </span></p>

```bash
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

```bash
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**

<table id="bkmrk-constructeurcommande"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>Constructeur

</th><th>Commande pour vérifier le tunnel

</th><th>Commande pour vérifier le routage

</th></tr><tr><td>**Cisco**

</td><td>`<span class="editor-theme-code">show interface Tunnel0</span>`

</td><td>`<span class="editor-theme-code">show ip route</span>`

</td></tr><tr><td>**Arista**

</td><td>`<span class="editor-theme-code">show interface Tunnel0</span>`

</td><td>`<span class="editor-theme-code">show ip route</span>`

</td></tr><tr><td>**Juniper**

</td><td>`<span class="editor-theme-code">show interfaces gr-0/0/0</span>`

</td><td>`<span class="editor-theme-code">show route</span>`

</td></tr><tr><td>**Linux**

</td><td>`<span class="editor-theme-code">ip tunnel show</span>`

</td><td>`<span class="editor-theme-code">ip route</span>`

</td></tr><tr><td>**MikroTik**

</td><td>`<span class="editor-theme-code">/interface gre print</span>`

</td><td>`<span class="editor-theme-code">/ip route print</span>`

</td></tr></tbody></table>

## **7. Vérification et Dépannage**

### **7.1. Tester la connectivité**

- **Depuis votre routeur**<span style="white-space: pre-wrap;"> :</span>
- ```bash
    ping 100.64.0.5 # Ping de l'ip distante du tunnel
    ```
- **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**

<table id="bkmrk-sympt%C3%B4mecause-possib"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>**Symptôme**

</th><th>**Cause Possible**

</th><th>**Solution**

</th></tr><tr><td>Le tunnel ne répond pas

</td><td>Port 47 bloqué

</td><td>Vérifiez la redirection sur votre box

</td></tr><tr><td>Les IPs publiques ne pingent pas

</td><td>Route manquante ou NAT mal configuré

</td><td><span style="white-space: pre-wrap;">Vérifiez </span>`<span class="editor-theme-code">ip route</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">show ip route</span>`

</td></tr><tr><td>Latence élevée / Pertes de paquets

</td><td>MTU trop grande

</td><td><span style="white-space: pre-wrap;">Réduisez la MTU : </span>`<span class="editor-theme-code">ip link set mtu 1476 dev tunnel0</span>`

</td></tr></tbody></table>

---

## **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>`<span class="editor-theme-code">iptables</span>`<span style="white-space: pre-wrap;"> ou ACL Cisco).</span>
2. **Performance**<span style="white-space: pre-wrap;"> :</span>
    - <span style="white-space: pre-wrap;">Réduisez la MTU à </span>`<span class="editor-theme-code">1476</span>`<span style="white-space: pre-wrap;"> pour éviter la fragmentation.</span>
    - <span style="white-space: pre-wrap;">Activez le </span>**keepalive**<span style="white-space: pre-wrap;"> sur le tunnel (ex: </span>`<span class="editor-theme-code">keepalive 10 3</span>`<span style="white-space: pre-wrap;"> sur Cisco).</span>
3. **Redondance**<span style="white-space: pre-wrap;"> :</span>
    - Configurez un deuxième tunnel GRE pour le failover.

---

## **9. Prochaines Étapes**

- XXXXX

---

# Tunnel L3 - IPIP

## **1. Introduction : Pourquoi utiliser IPIP ?**

### **1.1. À quoi sert un tunnel IPIP ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**IPIP (IP-in-IP)**<span style="white-space: pre-wrap;"> permet de créer un lien direct entre deux réseaux distants en encapsulant des paquets IP dans d'autres paquets IP. C'est le tunnel le plus simple et le plus léger qui existe. </span>**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 IPIP**

- Extrêmement simple à configurer.
- Overhead minimal (seulement 20 octets d'en-tête supplémentaire).
- Compatible avec la plupart des routeurs et systèmes d'exploitation.

### **1.3. Inconvénients**

- Pas de chiffrement natif.
- Pas de support de clé (contrairement à GRE).
- Supporte uniquement IPv4-in-IPv4 (pour IPv6-in-IPv4, utilisez SIT).
- Nécessite une configuration manuelle du routage.

---

## **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 redirection de port si derrière une box).</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur compatible IPIP**<span style="white-space: pre-wrap;"> (Linux, MikroTik, Cisco, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP**.

### **2.2. Ports et NAT**

- IPIP n'est ni UDP, ni TCP **(protocole 4)**.
- <span style="white-space: pre-wrap;">Si le routeur final est derrière une box / NAT, il faut </span>**rediriger le protocole IPIP**<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 tunnel sur Tunnel-IP.com**

### **3.1. Accéder au tableau de bord**

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>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"IPIP"**.
3. Remplissez les informations :
    - **Nom du tunnel**<span style="white-space: pre-wrap;"> (ex : </span>`Tunnel_X`).
    - **Endpoint**<span style="white-space: pre-wrap;"> (IP publique du routeur / box, ex : </span>`203.0.113.1`).
4. Validez. La plateforme s'occupera de choisir les IPs et de configurer le tunnel côté Tunnel-IP.com.
5. Attendez que le tunnel soit créé
6. 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 :**

1. **Activer le forwarding IP**<span style="white-space: pre-wrap;"> (pour permettre le routage) :</span>
    ```bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ```


    **(Pour rendre permanent, ajoutez* `net.ipv4.ip_forward=1` *dans* `/etc/sysctl.conf`*.)**
2. **Créer l'interface tunnel**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip tunnel add tunnel0 mode ipip remote 172.16.126.33
    ip link set tunnel0 up
    ```


    - `tunnel0`<span style="white-space: pre-wrap;"> : Nom de l'interface tunnel.</span>
    - `remote 172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
3. **Assigner une IP au tunnel**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip addr add 100.64.0.6/30 dev tunnel0
    ```


    - `100.64.0.6/30`<span style="white-space: pre-wrap;"> : IP locale du tunnel (ex : </span>`100.64.0.5/30`<span style="white-space: pre-wrap;"> est côté plateforme).</span>

---

### **4.2. Exemple pour MikroTik**

#### **Étapes :**

1. **Créer l'interface IPIP**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/ipip/add remote-address=172.16.126.33 name=tun4
    ```
2. **Assigner une IP au tunnel**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /ip/address/add address=100.64.0.6/30 interface=tun4
    ```

---

### **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**<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 ipip
     ip address 100.64.0.6 255.255.255.252  # IP locale du tunnel
    ```

    - `Tunnel0`<span style="white-space: pre-wrap;"> : Nom de l'interface tunnel.</span>
    - `tunnel mode ipip`<span style="white-space: pre-wrap;"> : Active le mode IPIP.</span>
3. **Activer l'interface**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    no shutdown
    exit
    ```
4. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    write memory
    ```

---

### **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**<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 ipip
     ip address 100.64.0.6/30  # IP locale du tunnel
    ```

    - La syntaxe est très proche de Cisco, mais EOS est plus réactif pour les changements dynamiques.
3. **Activer l'interface**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    no shutdown
    exit
    ```
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 tunnel**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    set interfaces ip-0/0/0 tunnel source 192.168.1.1
    set interfaces ip-0/0/0 tunnel destination 172.16.126.33
    set interfaces ip-0/0/0 family inet address 100.64.0.6/30
    ```

    - `ip-0/0/0`<span style="white-space: pre-wrap;"> : Nom de l'interface IPIP (peut varier selon le modèle).</span>
    - Juniper utilise une syntaxe hiérarchique et des "commit" pour appliquer les changements.
3. **Activer l'interface**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    commit
    ```

---

## **5. Étape 3 : Router les IP publiques vers le tunnel**

### **5.1. Pourquoi ?**

<span style="white-space: pre-wrap;">La plateforme vous route un bloc d'IP publiques (ex : </span>`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 s'offrent à vous :

- **NAT 1:1**<span style="white-space: pre-wrap;"> (1 IP publique → 1 IP privée)</span>
- **LAN public**<span style="white-space: pre-wrap;"> (utilisation directe des IPs publiques)</span>
- **Routage en /32**<span style="white-space: pre-wrap;"> (1 IP publique par machine)</span>

---

### **5.2. Rappel : Architecture du Tunnel**

```
Internet → [Infrastructure Tunnel-IP.com] → (Tunnel IPIP) → [Votre Routeur] → [Votre Réseau]
```

- <span style="white-space: pre-wrap;">La plateforme vous route un bloc public (ex: </span>`198.51.100.0/30`).
- Votre routeur doit gérer ce bloc pour exposer vos services.

---

### **5.3. Cas d'Usage du Bloc /30**

<span style="white-space: pre-wrap;">Un </span>`/30`<span style="white-space: pre-wrap;"> contient </span>**4 adresses IP**<span style="white-space: pre-wrap;"> :</span>

- `198.51.100.0`<span style="white-space: pre-wrap;"> : Adresse réseau (inutilisable en LAN).</span>
- `198.51.100.1`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `198.51.100.2`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `198.51.100.3`<span style="white-space: pre-wrap;"> : Adresse broadcast (inutilisable en LAN).</span>

---

### **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 -&gt; privée), charge plus lourde sur le routeur (Le routeur est en charge de la translation NAT)

### **Schéma :**

```
Internet → Infrastructure Tunnel-IP.com → [Votre Routeur] 198.51.100.0 → 192.168.1.100 (Privée)
```

### **Configurations :**

#### **Linux :**

```bash
# 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 :**

```bash
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 :**

```bash
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.

<p class="callout warning">**(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)**</p>

### **Configurations :**

#### **Linux :**

```bash
# Assigner l'IP de la passerelle (votre routeur)
ip addr add 198.51.100.1/30 dev eth1
```

#### **MikroTik :**

```
/ip address add address=198.51.100.1/30 interface=ether1
```

#### **Cisco :**

```
interface GigabitEthernet0/1
 ip address 198.51.100.1 255.255.255.252
 no shutdown
```

#### **Juniper :**

```bash
set interfaces ge-0/0/1 unit 0 family inet address 198.51.100.1/30
```

---

### **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 :**

```bash
# 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 :**

```
ip route 198.51.100.0 255.255.255.252 GigabitEthernet0/0/1
```

#### **Juniper :**

```bash
set routing-options static route 198.51.100.0/30 interface ge-0/0/1
```

---

### **5.7. Router le trafic sortant par le tunnel**

<p class="callout danger">Si vous ne faites pas cette étape, les IPs ne fonctionneront pas</p>

#### **Linux (ip route + policy routing)**

```bash
# Création d'une table de routage
echo "143 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 :**
<span style="white-space: pre-wrap;">Tout hôte du réseau </span>`198.51.100.0/30`<span style="white-space: pre-wrap;"> sort par le tunnel, les autres via la gateway par défaut.</span>

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```bash
ip link add vrf-IPIP type vrf table 143 # On créer la VRF
ip link set dev tunnel0 master vrf-IPIP # On ajoute le tunnel dans la VRF
ip route add default via 100.64.0.5 table 143 # On ajoute la route par défaut
ip link set dev eth0 master vrf-IPIP # 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

```bash
/routing/table/add name=IPIP-OUT fib
/routing/rule/add action=lookup-only-in-table table=IPIP-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=IPIP-OUT
```

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```bash
/ip/vrf add name=IPIP-VRF interfaces=ipip1,ether1
/ip route add routing-table=IPIP-VRF dst-address=0.0.0.0/0 gateway=100.64.0.5
```

---

#### Cisco

```fortran
ip access-list extended IPIP-OUT
 permit ip 198.51.100.0 0.0.0.3 any

route-map IPIP-ROUTE permit 10
 match ip address IPIP-OUT
 set ip next-hop 100.64.0.5

interface GigabitEthernet0/0
 ip policy route-map IPIP-ROUTE
```

📌 On applique l'ACL sur l'interface LAN → tout ce bloc sort vers Tunnel0.

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```fortran
vrf definition OUT-IPIP
 rd 100:1
 !
 address-family ipv4
 exit-address-family
!
interface Tunnel0
 vrf forwarding OUT-IPIP
!
interface GigabitEthernet0/0/1
 vrf forwarding OUT-IPIP
!

! Default route de la VRF vers le vrai Next-Hop
ip route vrf OUT-IPIP 0.0.0.0 0.0.0.0 100.64.0.5
```

<p class="callout warning">La syntaxe Cisco peux varier selon les versions de l'OS</p>

---

#### Arista

```bash
ip access-list IPIP-OUT
 10 permit ip 198.51.100.0/30 any

route-map IPIP-PBR permit 10
  match ip address IPIP-OUT
  set ip next-hop 100.64.0.5    # IP tunnel remote

interface Ethernet1
 ip policy route-map IPIP-PBR
```

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```bash
vrf instance IPIP-VRF

interface Tunnel0
  vrf IPIP-VRF

interface Eth1
  vrf IPIP-VRF

ip route vrf IPIP-VRF 0.0.0.0/0 100.64.0.5
```

---

#### Juniper

```bash
set routing-instances IPIP-VRF instance-type virtual-router
set routing-instances IPIP-VRF interface ip-0/0/0.0
set routing-instances IPIP-VRF routing-options static route 0.0.0.0/0 next-hop 100.64.0.5
set firewall family inet filter PBR term IPIP from source-address 198.51.100.0/30
set firewall family inet filter PBR term IPIP then routing-instance IPIP-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 IPIP.

## **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 ip-0/0/0` | `show route` |
| **Linux** | `ip tunnel show` | `ip route` |
| **MikroTik** | `/interface ipip print` | `/ip route print` |

## **7. Vérification et Dépannage**

### **7.1. Tester la connectivité**

- **Depuis votre routeur**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ping 100.64.0.5 # Ping de l'ip distante du tunnel
    ```
- **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 4 bloqué | Vérifiez la redirection sur votre box / configurez une DMZ |
| 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 1480 dev tunnel0` |

---

## **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 Cisco).</span>
    - IPIP n'offre aucun chiffrement. Envisagez IPsec 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>`1480`<span style="white-space: pre-wrap;"> pour éviter la fragmentation (overhead IPIP = 20 octets).</span>
    - <span style="white-space: pre-wrap;">Activez le </span>**keepalive**<span style="white-space: pre-wrap;"> sur le tunnel (ex: </span>`keepalive 10 3`<span style="white-space: pre-wrap;"> sur Cisco).</span>
3. **Redondance**<span style="white-space: pre-wrap;"> :</span>
    - Configurez un deuxième tunnel IPIP pour le failover.

---

# Tunnel L3 - Wireguard

## **1. Introduction : Pourquoi utiliser Wireguard ?**

### **1.1. À quoi sert un tunnel Wireguard ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**Wireguard**<span style="white-space: pre-wrap;"> permet de créer un lien direct et sécurisé entre deux réseaux distants. Wireguard est un protocole VPN moderne, rapide et simple à configurer. </span>**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 Wireguard**

- Extrêmement simple à configurer.
- Chiffrement intégré (pas besoin d'IPsec en complément).
- Connexion possible en IPv4 &amp; IPv6.
- Règles de routage ajoutées automatiquement.
- Aucun port à ouvrir côté client (traverse le NAT nativement).
- Protocole léger et performant.

### **1.3. Inconvénients**

- Moins de support natif sur certains routeurs (Cisco, Juniper...).
- Protocole plus récent que GRE ou IPIP.

---

## **2. Prérequis**

### **2.1. Ce dont vous avez besoin**

- <span style="white-space: pre-wrap;">Un </span>**routeur compatible Wireguard**<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**

- <span style="white-space: pre-wrap;">Wireguard utilise </span>**UDP**<span style="white-space: pre-wrap;"> (port par défaut : 51820).</span>
- <span style="white-space: pre-wrap;">Contrairement à GRE et IPIP, </span>**aucune redirection de port n'est nécessaire côté client**. Wireguard traverse le NAT nativement grâce au mécanisme de keepalive.

---

## **3. Étape 1 : Créer le tunnel sur Tunnel-IP.com**

### **3.1. Accéder au tableau de bord**

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>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"Wireguard"**.
3. Remplissez les informations :
    - **Nom du tunnel**<span style="white-space: pre-wrap;"> (ex : </span>`<span class="editor-theme-code">Tunnel_X</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>`).
4. Validez. La plateforme s'occupera de choisir les IPs et de configurer le tunnel côté Tunnel-IP.com.
5. Attendez que le tunnel soit créé
6. Cliquez sur "Accéder" pour récupérer les détails du tunnel

<span style="white-space: pre-wrap;">Il vous suffit de configurer votre wireguard avec les paramètres indiqués en </span>**1**<span style="white-space: pre-wrap;">, pour linux vous pouvez suivre </span>[ce tutoriel](https://www.malekal.com/utiliser-wg-quick-wireguard/)

### **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) avec wg-quick**

#### **Étapes :**

1. **Installer Wireguard**<span style="white-space: pre-wrap;"> :</span>  
    ```
    apt update && apt install wireguard -y
    ```
2. **Créer le fichier de configuration**<span style="white-space: pre-wrap;"> :</span>  
    ```
    nano /etc/wireguard/wg0.conf
    ```
    
      
    Contenu du fichier (à adapter avec les paramètres fournis par la plateforme) :  
    ```
    [Interface]
     PrivateKey = <votre_clé_privée>
     Address = 100.64.0.6/30
     Address = fd00:42:cafe:1::2/64
    
     [Peer]
     PublicKey = <clé_publique_plateforme>
     Endpoint = 172.16.126.33:51820
     AllowedIPs = 0.0.0.0/0, ::/0
     PersistentKeepalive = 25
    ```
    
    
    - `<span class="editor-theme-code">PrivateKey</span>`<span style="white-space: pre-wrap;"> : Votre clé privée (générée automatiquement ou manuellement avec </span>`<span class="editor-theme-code">wg genkey</span>`).
    - `<span class="editor-theme-code">Address</span>`<span style="white-space: pre-wrap;"> : IPs internes du tunnel (fournies par la plateforme).</span>
    - `<span class="editor-theme-code">PublicKey</span>`<span style="white-space: pre-wrap;"> : Clé publique du serveur Tunnel-IP.com.</span>
    - `<span class="editor-theme-code">Endpoint</span>`<span style="white-space: pre-wrap;"> : Adresse et port du serveur distant.</span>
    - `<span class="editor-theme-code">AllowedIPs</span>`<span style="white-space: pre-wrap;"> : Plages d'IPs autorisées à passer par le tunnel.</span>
    - `<span class="editor-theme-code">PersistentKeepalive</span>`<span style="white-space: pre-wrap;"> : Envoie un paquet toutes les 25 secondes pour maintenir la connexion à travers le NAT.</span>
3. **Activer le tunnel**<span style="white-space: pre-wrap;"> :</span>  
    ```
    wg-quick up wg0
    ```
4. **Activer au démarrage**<span style="white-space: pre-wrap;"> :</span>  
    ```
    systemctl enable wg-quick@wg0
    ```
5. **Activer le forwarding IP**<span style="white-space: pre-wrap;"> (pour permettre le routage) :</span>  
    ```
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ```
    
      
    **(Pour rendre permanent, ajoutez** **`<strong class="editor-theme-bold editor-theme-code editor-theme-italic">net.ipv4.ip_forward=1</strong>`** **dans** **`<strong class="editor-theme-bold editor-theme-code editor-theme-italic">/etc/sysctl.conf</strong>`*****.)**

---

### **4.2. Exemple pour MikroTik**

#### **Étapes :**

1. **Créer l'interface Wireguard**<span style="white-space: pre-wrap;"> :</span>```
    /interface/wireguard/add name=wg0 listen-port=51820
    ```
2. **Récupérer la clé publique**<span style="white-space: pre-wrap;"> (à fournir à la plateforme) :</span>```
    /interface/wireguard/print
    ```
3. **Ajouter le peer (serveur Tunnel-IP.com)**<span style="white-space: pre-wrap;"> :</span>```
    /interface/wireguard/peers/add interface=wg0 \
       public-key="<clé_publique_plateforme>" \
       endpoint-address=172.16.126.33 \
       endpoint-port=51820 \
       allowed-address=0.0.0.0/0,::/0 \
       persistent-keepalive=25
    ```
4. **Assigner une IP au tunnel**<span style="white-space: pre-wrap;"> :</span>```
    /ip/address/add address=100.64.0.6/30 interface=wg0
     /ipv6/address/add address=fd00:42:cafe:1::2/64 interface=wg0
    ```

---

### **4.3. Note pour Cisco, Arista et Juniper**

<p class="callout warning">Wireguard n'est pas nativement supporté sur la plupart des routeurs Cisco (IOS/XE), Arista (EOS) et Juniper (JunOS). Si vous devez utiliser l'un de ces équipements, vous pouvez :</p>

- Utiliser un serveur Linux comme point de terminaison Wireguard, puis router le trafic vers votre routeur.
- Utiliser un autre type de tunnel (GRE, IPIP, IPsec) nativement supporté par ces équipements.

---

## **5. Étape 3 : Router les IP publiques vers le tunnel**

### **5.1. Pourquoi ?**

<span style="white-space: pre-wrap;">La plateforme vous route un bloc d'IP publiques (ex : </span>`<span class="editor-theme-code">198.51.100.0/30</span>`) 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 s'offrent à vous :

- **NAT 1:1**<span style="white-space: pre-wrap;"> (1 IP publique → 1 IP privée)</span>
- **LAN public**<span style="white-space: pre-wrap;"> (utilisation directe des IPs publiques)</span>
- **Routage en /32**<span style="white-space: pre-wrap;"> (1 IP publique par machine)</span>

---

### **5.2. Rappel : Architecture du Tunnel**

```
Internet → [Infrastructure Tunnel-IP.com] → (Tunnel Wireguard) → [Votre Routeur] → [Votre Réseau]
```

- <span style="white-space: pre-wrap;">La plateforme vous route un bloc public (ex: </span>`<span class="editor-theme-code">198.51.100.0/30</span>`).
- Votre routeur doit gérer ce bloc pour exposer vos services.

---

### **5.3. Cas d'Usage du Bloc /30**

<span style="white-space: pre-wrap;">Un </span>`<span class="editor-theme-code">/30</span>`<span style="white-space: pre-wrap;"> contient </span>**4 adresses IP**<span style="white-space: pre-wrap;"> :</span>

- `<span class="editor-theme-code">198.51.100.0</span>`<span style="white-space: pre-wrap;"> : Adresse réseau (inutilisable en LAN).</span>
- `<span class="editor-theme-code">198.51.100.1</span>`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `<span class="editor-theme-code">198.51.100.2</span>`<span style="white-space: pre-wrap;"> : IP Utilisable</span>
- `<span class="editor-theme-code">198.51.100.3</span>`<span style="white-space: pre-wrap;"> : Adresse broadcast (inutilisable en LAN).</span>

---

### **5.4. Méthode 1 : NAT 1:1 (Translation 1 IP publique → 1 IP privée)**

**Avantages principaux :**<span style="white-space: pre-wrap;"> Permet de ne pas avoir à modifier l'adressage privé de votre réseau, et permet d'utiliser l'IP de réseau et broadcast.</span>

**Inconvénients :**<span style="white-space: pre-wrap;"> Adressage moins clair (Conversion IP publique -&gt; privée), charge plus lourde sur le routeur (Le routeur est en charge de la translation NAT)</span>

### **Schéma :**

```
Internet → Infrastructure Tunnel-IP.com → [Votre Routeur] 198.51.100.0 → 192.168.1.100 (Privée)
```

### **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
```

---

### **5.5 Méthode 2 : LAN Public (Utilisation directe des IPs publiques)**

**Avantages principaux :**<span style="white-space: pre-wrap;"> Adressage propre, explicite</span>

**Inconvénients :**<span style="white-space: pre-wrap;"> Perte de 2 IPs utilisables (IP de réseau et IP de broadcast) + 1 IP est forcément assignée au routeur.</span>

<p class="callout warning">**(Attention : Avec un /30 en LAN, vous n'avez qu'une seule IP utilisable. Pour plus d'IPs, prenez un bloc plus grand, ex:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">/29</span>`**. ou faites du NAT 1:1 ou attribution en /32)**</p>

### **Configurations :**

#### **Linux :**

```
# Assigner l'IP de la passerelle (votre routeur)
ip addr add 198.51.100.1/30 dev eth1
```

#### **MikroTik :**

```
/ip address add address=198.51.100.1/30 interface=ether1
```

---

### **5.6. Méthode 3 : Routage en /32 (1 IP publique par machine)**

**Avantages principaux :**<span style="white-space: pre-wrap;"> Adressage propre, explicite, aucune perte d'IP</span>

**Inconvénients :**<span style="white-space: pre-wrap;"> Non supporté par Windows, mal supporté par certains routeurs / OS, 100% du trafic passe par le routeur</span>

### **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
```

---

### **5.7. Router le trafic sortant par le tunnel**

<p class="callout danger">Si vous ne faites pas cette étape, les IPs ne fonctionneront pas</p>

<p class="callout info"><span style="white-space: pre-wrap;">Si vous avez configuré </span>`<span class="editor-theme-code">AllowedIPs = 0.0.0.0/0</span>`<span style="white-space: pre-wrap;"> dans votre configuration Wireguard, tout le trafic passe déjà par le tunnel. Cependant, si vous souhaitez un routage plus fin (uniquement le trafic des IPs publiques), utilisez les méthodes ci-dessous :</span></p>

#### **Linux (ip route + policy routing)**

```
# Création d'une table de routage
echo "144 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 :**<span style="white-space: pre-wrap;"> Tout hôte du réseau </span>`<span class="editor-theme-code">198.51.100.0/30</span>`<span style="white-space: pre-wrap;"> sort par le tunnel, les autres via la gateway par défaut.</span>

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```
ip link add vrf-WG type vrf table 144 # On créer la VRF
ip link set dev wg0 master vrf-WG # On ajoute le tunnel dans la VRF
ip route add default via 100.64.0.5 table 144 # On ajoute la route par défaut
ip link set dev eth0 master vrf-WG # 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=WG-OUT fib
/routing/rule/add action=lookup-only-in-table table=WG-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=WG-OUT
```

<p class="callout info">Si vous êtes à l'aise avec les VRF, il est aussi possible de faire avec :</p>

```
/ip/vrf add name=WG-VRF interfaces=wg0,ether1
/ip route add routing-table=WG-VRF dst-address=0.0.0.0/0 gateway=100.64.0.5
```

---

## **6. Commandes spécifiques par constructeur**

<table id="bkmrk-constructeurcommande"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>Constructeur

</th><th>Commande pour vérifier le tunnel

</th><th>Commande pour vérifier le routage

</th></tr><tr><td>**Linux**

</td><td>`<span class="editor-theme-code">wg show</span>`

</td><td>`<span class="editor-theme-code">ip route</span>`

</td></tr><tr><td>**MikroTik**

</td><td>`<span class="editor-theme-code">/interface wireguard print</span>`

</td><td>`<span class="editor-theme-code">/ip route print</span>`

</td></tr></tbody></table>

## **7. Vérification et Dépannage**

### **7.1. Tester la connectivité**

- **Depuis votre routeur**<span style="white-space: pre-wrap;"> :</span>```
    ping 100.64.0.5 # Ping de l'ip distante du tunnel
      wg show # Vérifier l'état du handshake
    ```
- **Depuis une machine locale**<span style="white-space: pre-wrap;"> :</span>```
    ping 8.8.8.8 # Vérification internet
      curl -4 ifconfig.me # Vérification de l'IP sortante
    ```

### **7.2. Problèmes courants**

<table id="bkmrk-sympt%C3%B4mecause-possib"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>**Symptôme**</th><th>**Cause Possible**</th><th>**Solution**</th></tr><tr><td>Le tunnel ne s'établit pas (pas de handshake)

</td><td>Clé publique/privée incorrecte

</td><td><span style="white-space: pre-wrap;">Vérifiez les clés avec </span>

`<span class="editor-theme-code">wg show</span>`

<span style="white-space: pre-wrap;"> et comparez avec la plateforme</span>

</td></tr><tr><td>Le tunnel ne s'établit pas

</td><td>Endpoint incorrect ou port UDP bloqué

</td><td>Vérifiez l'endpoint et que le port UDP est accessible

</td></tr><tr><td>Les IPs publiques ne pingent pas

</td><td>Route manquante ou NAT mal configuré

</td><td><span style="white-space: pre-wrap;">Vérifiez </span>

`<span class="editor-theme-code">ip route</span>`

<span style="white-space: pre-wrap;"> ou </span>

`<span class="editor-theme-code">/ip route print</span>`

</td></tr><tr><td>Latence élevée / Pertes de paquets

</td><td>MTU trop grande

</td><td><span style="white-space: pre-wrap;">Réduisez la MTU : </span>

`<span class="editor-theme-code">ip link set mtu 1420 dev wg0</span>`

</td></tr><tr><td>Connexion perdue derrière NAT

</td><td>PersistentKeepalive non configuré

</td><td><span style="white-space: pre-wrap;">Ajoutez </span>

`<span class="editor-theme-code">PersistentKeepalive = 25</span>`

<span style="white-space: pre-wrap;"> dans la configuration du peer</span>

</td></tr></tbody></table>

---

## **8. Bonnes Pratiques**

1. **Sécurité**<span style="white-space: pre-wrap;"> :</span>
    - Wireguard intègre le chiffrement nativement (ChaCha20, Poly1305, Curve25519).
    - <span style="white-space: pre-wrap;">Filtrez le trafic entrant avec un pare-feu (ex: </span>`<span class="editor-theme-code">iptables</span>`).
    - Protégez vos clés privées et ne les partagez jamais.
2. **Performance**<span style="white-space: pre-wrap;"> :</span>
    - <span style="white-space: pre-wrap;">La MTU par défaut de Wireguard est </span>`<span class="editor-theme-code">1420</span>`. Ajustez si nécessaire en fonction de votre connexion.
    - <span style="white-space: pre-wrap;">Activez le </span>**PersistentKeepalive**<span style="white-space: pre-wrap;"> (ex: </span>`<span class="editor-theme-code">25</span>`<span style="white-space: pre-wrap;"> secondes) si vous êtes derrière un NAT.</span>
3. **Redondance**<span style="white-space: pre-wrap;"> :</span>
    - Configurez un deuxième tunnel Wireguard pour le failover.

---

# 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.

---

# Tunnel L2 - VXLAN

## **1. Introduction : Pourquoi utiliser VXLAN ?**

### **1.1. À quoi sert un tunnel VXLAN ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**VXLAN (Virtual Extensible LAN)**<span style="white-space: pre-wrap;"> permet de créer un réseau Ethernet virtuel (Layer 2) entre deux sites distants, comme s'ils étaient connectés au même switch. Contrairement aux tunnels L3 (GRE, IPIP), VXLAN transporte des </span>**trames Ethernet complètes**<span style="white-space: pre-wrap;">, ce qui permet de bridger des réseaux distants. </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 VXLAN**

- Transport Layer 2 complet (trames Ethernet).
- Supporte jusqu'à 16 millions de réseaux virtuels (VNI 24 bits).
- Compatible avec la plupart des équipements réseau modernes.
- Fonctionne en UDP, facilement NAT-able.
- Peut être combiné avec d'autres tunnels L2 via un bridge.

### **1.3. Inconvénients**

- Pas de chiffrement natif.
- Overhead plus important que GRE/IPIP (50 octets d'en-tête).
- Nécessite une configuration manuelle du bridging côté client.

---

## **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 redirection de port si derrière une box).</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur ou serveur compatible VXLAN**<span style="white-space: pre-wrap;"> (Linux, MikroTik, Cisco, Arista, Juniper, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP**.

### **2.2. Ports et NAT**

- VXLAN utilise **UDP** (port par défaut : **4789**).
- <span style="white-space: pre-wrap;">Si le routeur final est derrière une box / NAT, il faut </span>**rediriger le port UDP 4789**<span style="white-space: pre-wrap;"> vers le routeur final.</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 VXLAN**

1. <span style="white-space: pre-wrap;">Allez dans </span>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"VXLAN"**.
2. Remplissez les informations :
    - **Nom du tunnel**<span style="white-space: pre-wrap;"> (ex : </span>`<span class="editor-theme-code">VXLAN_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>
3. Validez. La plateforme s'occupera de choisir le VNI et 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 aux tunnels L3, un tunnel VXLAN transporte des trames Ethernet (Layer 2). Côté client, vous devez créer l'interface VXLAN 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 VXLAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip link add vxlan0 type vxlan id 100 remote 172.16.126.33 dstport 4789
    ip link set vxlan0 up
    ```

    - `vxlan0`<span style="white-space: pre-wrap;"> : Nom de l'interface VXLAN.</span>
    - `id 100`<span style="white-space: pre-wrap;"> : VNI (Virtual Network Identifier), fourni par la plateforme.</span>
    - `remote 172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
    - `dstport 4789`<span style="white-space: pre-wrap;"> : Port UDP de destination.</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 vxlan0
    ip route add default via 198.51.100.1 dev vxlan0
    ```

    - `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 vxlan0 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**

#### **Étapes :**

1. **Créer l'interface VXLAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/vxlan/add name=vxlan0 vni=100 port=4789
    ```
2. **Ajouter le VTEP distant (Tunnel-IP.com)**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/vxlan/vteps/add interface=vxlan0 remote-ip=172.16.126.33 port=4789
    ```
3. **Option A : Assigner une IP publique directement**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /ip/address/add address=198.51.100.2/29 interface=vxlan0
    /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1
    ```
4. **Option B : Bridger avec une interface LAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/bridge/add name=br-vxlan
    /interface/bridge/port/add bridge=br-vxlan interface=vxlan0
    /interface/bridge/port/add bridge=br-vxlan interface=ether2  # Interface LAN
    ```

---

### **4.3. Exemple pour Cisco (IOS/XE - NX-OS)**

#### **Étapes :**

1. **Accéder au mode configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    enable
    configure terminal
    ```
2. **Créer le NVE (Network Virtualization Edge)**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface nve1
     source-interface Loopback0
     member vni 100
      ingress-replication protocol static
       peer-ip 172.16.126.33
     no shutdown
    ```
3. **Créer le VLAN et l'associer au VNI**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    vlan 100
     vn-segment 100

    interface Vlan100
     ip address 198.51.100.2 255.255.255.248
     no shutdown
    ```
4. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    write memory
    ```

<p class="callout warning">La configuration VXLAN sur Cisco est principalement disponible sur **NX-OS** (Nexus). Sur IOS-XE, le support VXLAN est limité à certains modèles (CSR1000v, Catalyst 9000, etc.).</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 VXLAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface Vxlan1
     vxlan source-interface Loopback0
     vxlan udp-port 4789
     vxlan vlan 100 vni 100
     vxlan flood vtep add 172.16.126.33
    ```
3. **Créer le VLAN et l'associer**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    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 VXLAN et le bridge domain**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    set bridge-domains VXLAN-BD vlan-id 100
    set bridge-domains VXLAN-BD vxlan vni 100
    set bridge-domains VXLAN-BD vxlan ingress-node-replication

    set interfaces lo0 unit 0 family inet address 10.0.0.1/32
    set switch-options vtep-source-interface lo0.0
    set switch-options remote-vtep 172.16.126.33

    set bridge-domains VXLAN-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 VXLAN) → [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 VXLAN 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 vxlan0` | `bridge link show` |
| **MikroTik** | `/interface vxlan print` | `/interface bridge port print` |
| **Cisco** | `show nve peers` | `show vlan` |
| **Arista** | `show interfaces Vxlan1` | `show vlan` |
| **Juniper** | `show bridge-domain` | `show interfaces irb` |

## **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 VXLAN (Linux)**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip -d link show vxlan0  # Vérifier les paramètres VXLAN
    bridge fdb show dev vxlan0  # 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 | Port UDP 4789 bloqué | Vérifiez la redirection du port sur votre box |
| Pas de connectivité L2 | VNI incorrect | Vérifiez que le VNI correspond à celui fourni 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 1450 dev vxlan0` (overhead VXLAN = 50 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>
    - VXLAN 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>`1450`<span style="white-space: pre-wrap;"> pour éviter la fragmentation (overhead VXLAN = 50 octets).</span>
    - Vérifiez que la MTU de votre lien WAN est suffisante pour encapsuler les paquets VXLAN.
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.

---

# Tunnel L2 - L2TPv3

## **1. Introduction : Pourquoi utiliser L2TPv3 ?**

### **1.1. À quoi sert un tunnel L2TPv3 ?**

<span style="white-space: pre-wrap;">Un tunnel </span>**L2TPv3 (Layer 2 Tunneling Protocol version 3)**<span style="white-space: pre-wrap;"> permet de créer un lien Ethernet virtuel (Layer 2) entre deux sites distants, transportant des </span>**trames Ethernet complètes**<span style="white-space: pre-wrap;">. L2TPv3 est une évolution de L2TP, spécifiquement conçue pour le transport L2 avec de nombreuses options de configuration (encapsulation UDP ou IP, IDs de session/tunnel configurables). </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 L2TPv3**

- Transport Layer 2 complet (trames Ethernet).
- Supporte l'encapsulation **UDP** (facilement NAT-able) ou **IP** (protocole 115, plus léger).
- IDs de session et tunnel configurables, permettant plusieurs tunnels vers le même endpoint.
- Compatible avec de nombreux équipements réseau (Linux, MikroTik, Cisco, Juniper).
- Peut être combiné avec d'autres tunnels L2 via un bridge.

### **1.3. Inconvénients**

- Pas de chiffrement natif.
- Configuration plus complexe que VXLAN ou GRETAP (IDs de session/tunnel à configurer).
- En mode IP (protocole 115), nécessite une DMZ si derrière un NAT.

---

## **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 redirection de port si encapsulation UDP, ou une DMZ si encapsulation IP).</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur ou serveur compatible L2TPv3**<span style="white-space: pre-wrap;"> (Linux, MikroTik, Cisco, Juniper, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP**.

### **2.2. Ports et NAT**

- **Encapsulation UDP**<span style="white-space: pre-wrap;"> : L2TPv3 utilise un </span>**port UDP configurable**<span style="white-space: pre-wrap;">. Si vous êtes derrière un NAT, il suffit de rediriger ce port.</span>
- **Encapsulation IP**<span style="white-space: pre-wrap;"> : L2TPv3 utilise le </span>**protocole 115**<span style="white-space: pre-wrap;">. Ce n'est ni UDP ni TCP, il faut donc configurer une DMZ si vous êtes derrière un NAT.</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 L2TPv3**

1. <span style="white-space: pre-wrap;">Allez dans </span>**"Tunnels"**<span style="white-space: pre-wrap;"> &gt; </span>**"L2TPv3"**.
2. Remplissez les informations :
    - **Endpoint**<span style="white-space: pre-wrap;"> (IP publique du routeur / box, ex : </span>`<span class="editor-theme-code">203.0.113.1</span>`).
    - **Zone**<span style="white-space: pre-wrap;"> : Zone géographique du serveur.</span>
    - **Nom**<span style="white-space: pre-wrap;"> (ex : </span>`<span class="editor-theme-code">L2TPv3_Tunnel</span>`).
    - **MTU**<span style="white-space: pre-wrap;"> : Taille maximale des paquets (-1 pour laisser la plateforme choisir).</span>
    - **Bridge**<span style="white-space: pre-wrap;"> : Sélectionnez le bridge créé précédemment.</span>
    - **Encapsulation**<span style="white-space: pre-wrap;"> : Choisissez </span>**UDP**<span style="white-space: pre-wrap;"> ou </span>**IP**<span style="white-space: pre-wrap;"> selon votre configuration réseau.</span>
    - **Peer session id**<span style="white-space: pre-wrap;"> : ID de session du côté distant (votre côté). Doit correspondre au </span>`session_id`<span style="white-space: pre-wrap;"> que vous configurerez sur votre routeur.</span>
    - **Peer tunnel id**<span style="white-space: pre-wrap;"> : ID de tunnel du côté distant (votre côté). Doit correspondre au </span>`tunnel_id`<span style="white-space: pre-wrap;"> que vous configurerez sur votre routeur.</span>
    - **Peer udp port**<span style="white-space: pre-wrap;"> : Port UDP de l'autre côté du tunnel. Laisser vide si encapsulation IP.</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 (vous y trouverez les IDs côté plateforme)

<p class="callout warning">**Important :** Les IDs de session et de tunnel doivent être **croisés** : le `peer_session_id` de la plateforme doit correspondre à votre `session_id` local, et inversement. Vérifiez bien les valeurs sur la page détails du tunnel.</p>

### **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">L2TPv3 transporte des trames Ethernet (Layer 2). Côté client, vous devez créer l'interface L2TPv3 puis la **bridger** avec votre interface LAN (ou lui assigner directement une IP du subnet).</p>

<p class="callout warning">Dans les exemples ci-dessous, les valeurs suivantes sont utilisées. **Adaptez-les** avec les paramètres fournis par la plateforme :<br>
- IP distante (plateforme) : `172.16.126.33`<br>
- Session ID local : `1000` / Peer session ID : `2000`<br>
- Tunnel ID local : `1000` / Peer tunnel ID : `2000`<br>
- Port UDP (si encapsulation UDP) : `1701`
</p>

### **4.1. Exemple pour Linux (Ubuntu/Debian) — Encapsulation UDP**

#### **Étapes :**

1. **Créer le tunnel L2TPv3**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip l2tp add tunnel tunnel_id 1000 peer_tunnel_id 2000 \
      encap udp local 192.168.1.1 remote 172.16.126.33 \
      udp_sport 1701 udp_dport 1701
    ```

    - `tunnel_id 1000`<span style="white-space: pre-wrap;"> : ID du tunnel local.</span>
    - `peer_tunnel_id 2000`<span style="white-space: pre-wrap;"> : ID du tunnel côté plateforme.</span>
    - `local 192.168.1.1`<span style="white-space: pre-wrap;"> : IP locale du routeur.</span>
    - `remote 172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
    - `udp_sport` / `udp_dport`<span style="white-space: pre-wrap;"> : Ports UDP source et destination.</span>

2. **Créer la session L2TPv3**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip l2tp add session tunnel_id 1000 session_id 1000 \
      peer_session_id 2000
    ```

3. **Activer l'interface**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip link set l2tpeth0 up
    ```

    L'interface `l2tpeth0` est créée automatiquement.

4. **Option A : Assigner directement une IP publique**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip addr add 198.51.100.2/29 dev l2tpeth0
    ip route add default via 198.51.100.1 dev l2tpeth0
    ```

5. **Option B : Bridger avec une interface LAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip link add br0 type bridge
    ip link set br0 up
    ip link set l2tpeth0 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.2. Exemple pour Linux — Encapsulation IP**

La procédure est similaire, mais avec `encap ip` :

```bash
ip l2tp add tunnel tunnel_id 1000 peer_tunnel_id 2000 \
  encap ip local 192.168.1.1 remote 172.16.126.33

ip l2tp add session tunnel_id 1000 session_id 1000 \
  peer_session_id 2000

ip link set l2tpeth0 up
```

<p class="callout info">En encapsulation IP, aucun port UDP n'est utilisé. Le protocole 115 est utilisé directement. Assurez-vous que votre box / NAT le laisse passer (DMZ recommandée).</p>

---

### **4.3. Exemple pour MikroTik**

#### **Étapes :**

1. **Créer l'interface L2TP client**<span style="white-space: pre-wrap;"> :</span>

<p class="callout warning">MikroTik supporte L2TPv3 à partir de **RouterOS v7**. Sur les versions antérieures, seul L2TP (v2) est disponible.</p>

    ```bash
    /interface/l2tp-ether/add name=l2tp-ether1 \
      local-address=192.168.1.1 remote-address=172.16.126.33 \
      tunnel-id=1000 peer-tunnel-id=2000 \
      session-id=1000 peer-session-id=2000
    ```

2. **Option A : Assigner une IP publique directement**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /ip/address/add address=198.51.100.2/29 interface=l2tp-ether1
    /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1
    ```

3. **Option B : Bridger avec une interface LAN**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    /interface/bridge/add name=br-l2tp
    /interface/bridge/port/add bridge=br-l2tp interface=l2tp-ether1
    /interface/bridge/port/add bridge=br-l2tp interface=ether2  # Interface LAN
    ```

---

### **4.4. 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 la pseudowire L2TPv3**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    pseudowire-class L2TPv3-PW
     encapsulation l2tpv3
     protocol none
     ip local interface GigabitEthernet0/0
    ```
3. **Créer l'interface xconnect**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    interface GigabitEthernet0/1
     xconnect 172.16.126.33 1000 encapsulation l2tpv3 pw-class L2TPv3-PW
    ```

    - `172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
    - `1000`<span style="white-space: pre-wrap;"> : VC ID (doit correspondre aux IDs configurés sur la plateforme).</span>
4. **Sauvegarder la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    write memory
    ```

<p class="callout warning">La configuration L2TPv3 sur Cisco varie selon la plateforme (IOS, IOS-XE, NX-OS). La syntaxe `xconnect` est disponible sur IOS et IOS-XE. Consultez la documentation de votre modèle.</p>

---

### **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 le tunnel L2TPv3**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    set protocols l2circuit neighbor 172.16.126.33 interface ge-0/0/1.0 \
      virtual-circuit-id 1000 encapsulation-type ethernet

    set interfaces ge-0/0/1 encapsulation ethernet-bridge
    set interfaces ge-0/0/1 unit 0 family bridge
    ```

    - `172.16.126.33`<span style="white-space: pre-wrap;"> : IP distante (Tunnel-IP.com).</span>
    - `virtual-circuit-id 1000`<span style="white-space: pre-wrap;"> : ID du circuit (doit correspondre aux IDs de la plateforme).</span>
3. **Créer le bridge domain**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    set bridge-domains L2TPv3-BD interface ge-0/0/1.0
    set bridge-domains L2TPv3-BD routing-interface irb.100

    set interfaces irb unit 100 family inet address 198.51.100.2/29
    ```
4. **Appliquer la configuration**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    commit
    ```

---

### **4.6. Note pour Arista (EOS)**

<p class="callout warning">Arista EOS ne supporte pas nativement L2TPv3. Si vous devez utiliser un switch Arista, vous pouvez utiliser VXLAN comme alternative L2, ou placer un serveur Linux comme point de terminaison L2TPv3 devant votre switch Arista.</p>

---

## **5. Étape 3 : Configurer les IPs publiques**

### **5.1. Architecture L2**

```
Internet → [Infrastructure Tunnel-IP.com] → [Bridge plateforme] → (Tunnel L2TPv3) → [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 L2TPv3 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 l2tp show tunnel` / `ip l2tp show session` | `bridge link show` |
| **MikroTik** | `/interface l2tp-ether print` | `/interface bridge port print` |
| **Cisco** | `show l2tun tunnel` / `show xconnect all` | `show bridge-domain` |
| **Juniper** | `show l2circuit connections` | `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 le tunnel L2TPv3 (Linux)**<span style="white-space: pre-wrap;"> :</span>
    ```bash
    ip l2tp show tunnel  # Vérifier les tunnels
    ip l2tp show session  # Vérifier les sessions
    ip -d link show l2tpeth0  # Vérifier l'interface
    ```
- **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 (encap UDP) | Port UDP bloqué | Vérifiez la redirection du port sur votre box |
| Le tunnel ne répond pas (encap IP) | Protocole 115 bloqué | Configurez une DMZ sur votre box |
| Pas de connectivité L2 | IDs session/tunnel inversés | Vérifiez que les IDs sont bien croisés : votre `session_id` = `peer_session_id` de la plateforme, et inversement |
| 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 (overhead L2TPv3 UDP ≈ 36 octets, IP ≈ 12 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>
    - L2TPv3 n'offre aucun chiffrement natif. Envisagez IPsec en complément si le chiffrement est nécessaire.
2. **Performance**<span style="white-space: pre-wrap;"> :</span>
    - <span style="white-space: pre-wrap;">Ajustez la MTU en fonction de l'encapsulation choisie.</span>
    - <span style="white-space: pre-wrap;">L'encapsulation </span>**IP**<span style="white-space: pre-wrap;"> est plus performante (moins d'overhead) mais moins compatible avec le NAT.</span>
    - <span style="white-space: pre-wrap;">L'encapsulation </span>**UDP**<span style="white-space: pre-wrap;"> est recommandée si vous êtes derrière un NAT.</span>
3. **Bridging**<span style="white-space: pre-wrap;"> :</span>
    - Vous pouvez combiner plusieurs tunnels L2 (VXLAN, EoIP, GRETAP, L2TPv3) 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.

---

# Sessions BGP

## **1. Introduction : Pourquoi utiliser BGP ?**

### **1.1. À quoi sert une session BGP sur Tunnel-IP.com ?**

<span style="white-space: pre-wrap;">Le protocole </span>**BGP (Border Gateway Protocol)**<span style="white-space: pre-wrap;"> est le protocole de routage utilisé sur Internet pour échanger des préfixes IP entre systèmes autonomes (AS). Sur Tunnel-IP.com, les sessions BGP vous permettent d'</span>**annoncer vos propres préfixes IP**<span style="white-space: pre-wrap;"> à travers notre infrastructure, offrant un contrôle total sur votre routage.</span>

**Cas d'usage :**

- Vous possédez votre propre bloc d'IPs (PI/PA) et votre ASN.
- Vous souhaitez annoncer vos préfixes via l'infrastructure Tunnel-IP.com.
- Vous avez besoin d'un contrôle dynamique de vos routes (failover, multihoming, etc.).

### **1.2. Les deux types de sessions**

Tunnel-IP.com propose **deux types** de sessions BGP :

| | **Session normale** | **Session autogérée** |
|---|---|---|
| **Principe** | Session BGP classique à travers un tunnel L3. Vous configurez BGP sur votre routeur et échangez des préfixes avec la plateforme. | Routeur virtuel entièrement géré par Tunnel-IP.com. Nous annonçons vos préfixes avec votre ASN (ou le nôtre) et routons le trafic vers votre tunnel. |
| **Configuration côté client** | Oui — vous devez configurer un démon BGP sur votre routeur. | Non — aucune configuration BGP nécessaire de votre côté. |
| **Tunnel requis** | Oui — un tunnel L3 (GRE, IPIP, Wireguard, etc.) doit être configuré. La session BGP passe à travers le tunnel. | Non obligatoire pour le BGP lui-même — les subnets sont assignés directement à la session autogérée via le panel, puis routés statiquement vers le tunnel de votre choix. |
| **ASN requis** | Oui — votre propre ASN, enregistré sur le panel. | Optionnel — vous pouvez utiliser votre ASN ou celui de Tunnel-IP.com. |
| **Contrôle** | Total — vous choisissez quels préfixes annoncer et pouvez gérer le routage dynamiquement. | Limité — nous gérons l'annonce, vous gérez l'attribution des subnets via le panel. |
| **Idéal pour** | Utilisateurs avancés, multihoming, failover BGP. | Utilisateurs qui veulent simplement annoncer leurs IPs sans gérer BGP. |

---

## **2. Prérequis**

### **2.1. Pour les deux types de sessions**

- <span style="white-space: pre-wrap;">Un </span>**service Tunnel-IP.com** actif.
- <span style="white-space: pre-wrap;">Vos </span>**préfixes IP**<span style="white-space: pre-wrap;"> correctement enregistrés auprès d'un RIR (RIPE, ARIN, etc.).</span>
- <span style="white-space: pre-wrap;">Un </span>**route object**<span style="white-space: pre-wrap;"> correctement configuré dans la base IRR correspondante (RIPE DB, RADB, etc.) autorisant l'annonce de vos préfixes par votre ASN (ou celui de Tunnel-IP.com pour les sessions autogérées).</span>
- <span style="white-space: pre-wrap;">Une </span>**LOA (Letter of Authorization)**<span style="white-space: pre-wrap;"> si les préfixes ne vous appartiennent pas directement.</span>

### **2.2. Spécifique à la session normale**

- <span style="white-space: pre-wrap;">Un </span>**tunnel L3 configuré et fonctionnel**<span style="white-space: pre-wrap;"> (GRE, IPIP, Wireguard, OpenVPN, IPsec).</span>
- <span style="white-space: pre-wrap;">Votre </span>**ASN**<span style="white-space: pre-wrap;"> enregistré sur </span>[panel.tunnel-ip.com/asn/](https://panel.tunnel-ip.com/asn/)<span style="white-space: pre-wrap;"> avec votre **AS-SET**.</span>
- <span style="white-space: pre-wrap;">Un </span>**routeur capable de faire du BGP**<span style="white-space: pre-wrap;"> (Linux avec BIRD/FRR, MikroTik, Cisco, Juniper, etc.).</span>

### **2.3. Spécifique à la session autogérée**

- <span style="white-space: pre-wrap;">Si vous souhaitez utiliser </span>**votre propre ASN**<span style="white-space: pre-wrap;"> : l'enregistrer sur </span>[panel.tunnel-ip.com/asn/](https://panel.tunnel-ip.com/asn/).
- <span style="white-space: pre-wrap;">Si vous souhaitez utiliser </span>**l'ASN de Tunnel-IP.com**<span style="white-space: pre-wrap;"> : aucun ASN à enregistrer.</span>
- <span style="white-space: pre-wrap;">Une </span>**demande de whitelist**<span style="white-space: pre-wrap;"> de vos préfixes accompagnée de la LOA.</span>

---

## **3. Enregistrer son ASN**

<p class="callout info">Si vous souhaitez utiliser l'ASN de Tunnel-IP.com (uniquement pour les sessions autogérées), vous pouvez passer cette étape.</p>

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>**"ASN"**<span style="white-space: pre-wrap;"> (</span>[panel.tunnel-ip.com/asn/](https://panel.tunnel-ip.com/asn/)).
3. Cliquez sur **"Ajouter un ASN"**.
4. Renseignez :
    - **Votre numéro d'AS**<span style="white-space: pre-wrap;"> (ex : </span>`AS211615`).
    - **Votre AS-SET**<span style="white-space: pre-wrap;"> (ex : </span>`AS-EXAMPLE`<span style="white-space: pre-wrap;">). L'AS-SET est utilisé pour valider automatiquement les préfixes que vous êtes autorisé à annoncer.</span>
5. Validez.

<p class="callout warning">**Important :** Assurez-vous que votre AS-SET est correctement maintenu dans une base IRR (RIPE, RADB, etc.) et qu'il contient bien les préfixes que vous souhaitez annoncer. Sans cela, vos annonces seront rejetées.</p>

---

## **4. Session autogérée**

La session autogérée est la méthode la plus simple : **Tunnel-IP.com gère entièrement l'annonce BGP** de vos préfixes. Vous n'avez aucune configuration BGP à faire sur votre routeur.

### **4.1. Comment ça fonctionne ?**

```
Internet ← [Routeurs Tunnel-IP.com annoncent vos préfixes en BGP] ← Route statique → [Votre Tunnel] → [Votre Routeur]
```

1. Vous nous fournissez vos préfixes et la LOA.
2. Nous créons la session autogérée et whitelistons vos préfixes.
3. Sur le panel, vous assignez vos subnets à la session autogérée.
4. Le trafic entrant arrive sur notre infrastructure et est routé statiquement vers le tunnel de votre choix.
5. Côté sortant, vous configurez votre routeur pour envoyer le trafic de vos préfixes via le tunnel (comme pour un tunnel L3 classique — voir les docs de [routage sortant](gre.md)).

### **4.2. Étapes**

1. **Ouvrir un ticket**<span style="white-space: pre-wrap;"> pour demander la création d'une session autogérée.</span>
    - Précisez les préfixes à annoncer.
    - Fournissez la LOA si nécessaire.
    - Précisez si vous souhaitez utiliser votre ASN ou celui de Tunnel-IP.com.
2. **Attendre la validation**<span style="white-space: pre-wrap;"> : nous vérifions le route object, l'AS-SET et la LOA.</span>
3. **Whitelist effectuée**<span style="white-space: pre-wrap;"> : une fois vos préfixes whitelistés, vous pouvez les gérer depuis le panel.</span>
4. **Assigner vos subnets**<span style="white-space: pre-wrap;"> :</span>
    - Allez dans **"Subnets"**.
    - Créez un subnet correspondant à vos préfixes whitelistés.
    - Assignez-le à la **session BGP autogérée**.
5. **Configurer le routage sortant**<span style="white-space: pre-wrap;"> sur votre routeur (tables de routage / policy routing), comme pour un tunnel L3 classique.</span>

<p class="callout info">Avec une session autogérée, vous n'avez **pas** besoin de configurer un démon BGP. Le routage entrant est géré par la plateforme, et le routage sortant se fait via les méthodes classiques (policy routing, VRF) décrites dans les documentations des tunnels L3.</p>

---

## **5. Session normale (BGP à travers un tunnel L3)**

La session normale vous donne un **contrôle total** sur vos annonces BGP. Vous configurez un démon BGP sur votre routeur qui établit une session avec les routeurs de Tunnel-IP.com à travers votre tunnel L3.

### **5.1. Comment ça fonctionne ?**

```
Internet ← [Routeurs Tunnel-IP.com] ← Session BGP via tunnel → [Votre Routeur BGP] → [Votre Réseau]
                                        100.64.0.5 ←→ 100.64.0.6
```

- La session BGP s'établit entre l'IP plateforme du tunnel (ex: `100.64.0.5`) et votre IP client du tunnel (ex: `100.64.0.6`).
- Vous annoncez vos préfixes à la plateforme via BGP.
- La plateforme annonce vos préfixes vers Internet.

### **5.2. Étapes de mise en place**

1. **Avoir un tunnel L3 fonctionnel**<span style="white-space: pre-wrap;"> : configurez d'abord un tunnel GRE, IPIP, Wireguard, etc. et vérifiez que le ping fonctionne entre les deux côtés (ex: </span>`ping 100.64.0.5`).
2. **Enregistrer votre ASN**<span style="white-space: pre-wrap;"> sur </span>[panel.tunnel-ip.com/asn/](https://panel.tunnel-ip.com/asn/)<span style="white-space: pre-wrap;"> (voir section 3).</span>
3. **Vérifier votre route object**<span style="white-space: pre-wrap;"> : assurez-vous que vos préfixes sont correctement déclarés dans une base IRR et que votre AS-SET est à jour.</span>
4. **Ouvrir un ticket**<span style="white-space: pre-wrap;"> pour demander la création de la session BGP.</span>
    - Précisez le tunnel sur lequel la session doit être établie.
    - Précisez votre ASN.
    - Précisez les préfixes que vous souhaitez annoncer.
5. **Attendre la création**<span style="white-space: pre-wrap;"> : nous configurons la session côté plateforme et vous fournissons les détails.</span>
6. **Configurer BGP sur votre routeur**<span style="white-space: pre-wrap;"> (voir section 5.3).</span>

### **5.3. Informations de la session**

Une fois la session créée, vous retrouverez les informations suivantes sur la page **"Sessions BGP"** du panel :

| Champ | Description | Exemple                            |
|---|---|------------------------------------|
| **Nom** | Identifiant de la session | `BGP-41`                           |
| **ASN Client** | Votre ASN | `AS65000`                          |
| **ASN Tunnel** | ASN utilisé sur le tunnel | `AS211615`                         |
| **Zone** | Zone du serveur | `Default Zone V2`                  |
| **IP Client** | Votre IP de peering (IP de votre côté du tunnel) | `100.64.0.6`                       |
| **IP Plateforme** | IP de peering côté Tunnel-IP.com | `100.64.0.5`                       |
| **Status** | État de la session BGP | `Connect`, `Established`, `Active` |
| **Préfixes acceptés** | Nombre de préfixes que la plateforme accepte de votre part | `0`, `5`, etc.                     |

### **5.4. Configurer BGP sur votre routeur**

<p class="callout warning">Les exemples ci-dessous utilisent les valeurs suivantes. **Adaptez-les** avec les informations fournies sur le panel :<br>
- Votre ASN : `65000`<br>
- IP plateforme (neighbor) : `100.64.0.5`<br>
- Votre IP tunnel : `100.64.0.6`<br>
- Préfixe à annoncer : `203.0.113.0/24`
</p>

#### **Linux (BIRD 2)**

```bash
# /etc/bird/bird.conf

router id 100.64.0.6;

protocol device {
    scan time 10;
}

protocol static {
    ipv4 {
        table master4;
    };
    # Déclarer les préfixes à annoncer
    route 203.0.113.0/24 blackhole;
}

protocol bgp tunnel_ip {
    local 100.64.0.6 as 65000;
    neighbor 100.64.0.5 as 211615;

    ipv4 {
        import all;     # Accepter les routes de la plateforme
        export where proto = "static";  # Annoncer nos préfixes statiques
    };
}
```

Puis redémarrer BIRD :
```bash
birdc configure
```

#### **Linux (FRRouting / FRR)**

```bash
# /etc/frr/frr.conf

frr defaults traditional
hostname routeur
log syslog informational

router bgp 65000
 bgp router-id 100.64.0.6
 neighbor 100.64.0.5 remote-as 211615
 !
 address-family ipv4 unicast
  network 203.0.113.0/24
  neighbor 100.64.0.5 activate
 exit-address-family
!
ip route 203.0.113.0/24 Null0
```

Puis recharger :
```bash
systemctl reload frr
```

#### **MikroTik (RouterOS v7)**

```bash
# Ajouter l'instance BGP
/routing/bgp/connection/add name=tunnel-ip \
  remote.address=100.64.0.5 remote.as=211615 \
  local.address=100.64.0.6 local.role=ebgp \
  as=65000 \
  output.filter-chain=bgp-out \
  input.filter-chain=bgp-in

# Créer les filtres
/routing/filter/rule/add chain=bgp-out rule="if (dst == 203.0.113.0/24) { accept }"
/routing/filter/rule/add chain=bgp-out rule="reject"
/routing/filter/rule/add chain=bgp-in rule="accept"

# Route blackhole pour le préfixe annoncé
/ip/route/add dst-address=203.0.113.0/24 type=blackhole
```

#### **Cisco (IOS/XE)**

```fortran
router bgp 65000
 bgp router-id 100.64.0.6
 neighbor 100.64.0.5 remote-as 211615
 !
 address-family ipv4
  network 203.0.113.0 mask 255.255.255.0
  neighbor 100.64.0.5 activate
 exit-address-family
!
ip route 203.0.113.0 255.255.255.0 Null0
```

#### **Juniper (JunOS)**

```bash
set routing-options router-id 100.64.0.6
set routing-options autonomous-system 65000

set protocols bgp group TUNNEL-IP type internal  # internal si même ASN, external sinon
set protocols bgp group TUNNEL-IP neighbor 100.64.0.5
set protocols bgp group TUNNEL-IP export ADVERTISE

set policy-options policy-statement ADVERTISE term 1 from route-filter 203.0.113.0/24 exact
set policy-options policy-statement ADVERTISE term 1 then accept
set policy-options policy-statement ADVERTISE term 2 then reject

set routing-options static route 203.0.113.0/24 discard

commit
```

#### **Arista (EOS)**

```bash
router bgp 65000
   router-id 100.64.0.6
   neighbor 100.64.0.5 remote-as 211615
   !
   address-family ipv4
      network 203.0.113.0/24
      neighbor 100.64.0.5 activate

ip route 203.0.113.0/24 Null0
```

---

## **6. Vérification**

### **6.1. Vérifier l'état de la session**

Le status de la session est visible sur le panel. Les états possibles :

| Status | Signification |
|---|---|
| **Established** | ✅ La session est active et fonctionne. |
| **Connect** | ⏳ La plateforme tente de se connecter — vérifiez votre configuration. |
| **Active** | ⏳ La plateforme attend une connexion — vérifiez votre configuration et la connectivité du tunnel. |
| **Idle** | ❌ La session est inactive. |
| **OpenSent** / **OpenConfirm** | ⏳ Négociation en cours — patientez ou vérifiez les ASN. |

### **6.2. Commandes de vérification par constructeur**

#### **Linux (BIRD 2)**

```bash
birdc show protocols all tunnel_ip   # Détails de la session
birdc show route export tunnel_ip    # Préfixes annoncés
birdc show route protocol tunnel_ip  # Préfixes reçus
```

#### **Linux (FRR)**

```bash
vtysh -c "show bgp summary"
vtysh -c "show bgp ipv4 unicast neighbors 100.64.0.5"
vtysh -c "show bgp ipv4 unicast"
```

#### **MikroTik**

```bash
/routing/bgp/session/print
/routing/bgp/advertisements/print
/ip/route/print where bgp
```

#### **Cisco**

```fortran
show bgp summary
show bgp ipv4 unicast neighbors 100.64.0.5
show bgp ipv4 unicast
```

#### **Juniper**

```bash
show bgp summary
show bgp neighbor 100.64.0.5
show route protocol bgp
```

---

## **7. Dépannage**

### **7.1. Problèmes courants**

| **Symptôme** | **Cause Possible** | **Solution** |
|---|---|---|
| Session en "Connect" ou "Active" | Le tunnel L3 ne fonctionne pas | Vérifiez que vous pouvez pinger l'IP plateforme du tunnel (`ping 100.64.0.5`) |
| Session en "Connect" ou "Active" | Port TCP 179 bloqué | Vérifiez qu'aucun pare-feu ne bloque le port 179 sur l'interface tunnel |
| Session en "OpenSent" | ASN incorrect | Vérifiez que l'ASN configuré correspond à celui déclaré sur le panel |
| Préfixes acceptés = 0 | Préfixes non annoncés | Vérifiez votre configuration BGP (filtres, network, route statique blackhole) |
| Préfixes acceptés = 0 | Route object manquant ou incorrect | Vérifiez votre route object dans la base IRR et votre AS-SET sur le panel |
| Préfixes rejetés | Préfixe trop spécifique | Vérifiez que vous n'annoncez pas de préfixes plus spécifiques que /24 (sauf accord) |
| Session "Established" mais pas de trafic | Routage sortant mal configuré | Configurez le policy routing / VRF pour que le trafic sortant passe par le tunnel (voir docs tunnel L3) |

### **7.2. Vérifications à faire avant d'ouvrir un ticket**

1. ✅ Le tunnel L3 fonctionne (ping entre les deux côtés).
2. ✅ Le port TCP 179 n'est pas bloqué par un pare-feu.
3. ✅ L'ASN est correctement enregistré sur le panel.
4. ✅ Le route object existe dans la base IRR.
5. ✅ L'AS-SET contient bien vos préfixes.
6. ✅ La configuration BGP est correcte (bon ASN, bonne IP neighbor).
7. ✅ Une route statique blackhole existe pour chaque préfixe annoncé.

---

## **8. BGP Communities**

Les BGP communities permettent de **contrôler le comportement de vos annonces** sur l'infrastructure Tunnel-IP.com (prépend, localisation, blackhole, etc.).

La documentation complète des communities supportées est disponible ici : **[BGP Communities](https://docs.netario.fr/books/reseau/page/bgp-communities)**

---

## **9. Bonnes Pratiques**

1. **Route objects**<span style="white-space: pre-wrap;"> :</span>
    - Maintenez vos route objects à jour dans la base IRR.
    - Utilisez un AS-SET cohérent qui regroupe tous vos préfixes.
    - <span style="white-space: pre-wrap;">Configurez le </span>**RPKI (ROA)**<span style="white-space: pre-wrap;"> pour vos préfixes afin de renforcer la sécurité de vos annonces.</span>
2. **Filtrage**<span style="white-space: pre-wrap;"> :</span>
    - N'annoncez que les préfixes qui vous appartiennent.
    - <span style="white-space: pre-wrap;">Utilisez des filtres d'export stricts (n'exportez que vos préfixes via des </span>`prefix-list`<span style="white-space: pre-wrap;"> ou </span>`filter`).
    - Mettez en place des filtres d'import pour ne pas accepter de routes indésirables.
3. **Blackhole**<span style="white-space: pre-wrap;"> :</span>
    - Créez toujours une route statique blackhole (`Null0`, `discard`, `blackhole`) pour chaque préfixe annoncé. Cela évite les boucles de routage.
4. **Monitoring**<span style="white-space: pre-wrap;"> :</span>
    - Surveillez l'état de vos sessions BGP régulièrement via le panel ou vos outils de monitoring.
    - Vérifiez le nombre de préfixes acceptés sur le panel.

---