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