Skip to content

Réseau du Lab

Introduction

Cette section détaille la configuration réseau avancée du lab, incluant les différents réseaux utilisés par OpenStack et Ceph, ainsi que la configuration pour simuler un environnement de production.

Prérequis

Points à apprendre

Architecture réseau du lab

graph TB
    subgraph Hetzner["HETZNER HOST"]
        internet["🌐 Internet"]
        enp41s0["enp41s0<br/>(IP publique Hetzner)"]
        nat["NAT/Masquerade"]

        subgraph Bridges["Bridges Virtuels"]
            br_external["br-external (192.168.100.0/24)<br/>• Accès internet VMs (NAT)<br/>• API publique (192.168.100.10 VIP)"]
            br_mgmt["br-mgmt (10.0.0.0/24)<br/>• Management réseau<br/>• API interne (10.0.0.10 VIP)<br/>• RabbitMQ, MariaDB"]
            br_storage["br-storage (10.0.1.0/24) MTU 9000<br/>• Trafic Ceph (OSD ↔ MON)<br/>• Migration live Nova"]
            br_provider["br-provider<br/>• Provider networks OpenStack"]
        end
    end

    internet <--> enp41s0
    enp41s0 --> nat
    nat --> Bridges

Réseaux OpenStack

Réseau CIDR Usage MTU
Management 10.0.0.0/24 API, DB, MQ, gestion 1500
Storage 10.0.1.0/24 Ceph, migration 9000
External 192.168.100.0/24 Accès internet, API publique 1500
Tunnel 10.0.2.0/24 VXLAN tenant networks 1500
Provider Variable Flat/VLAN provider nets 1500

Configuration avancée des bridges

Configuration complète netplan sur l'hôte

# /etc/netplan/01-netcfg.yaml sur Hetzner host
network:
  version: 2
  renderer: networkd

  ethernets:
    enp41s0:
      dhcp4: false
      dhcp6: false
      addresses:
        - HETZNER_PUBLIC_IP/32
      routes:
        - to: default
          via: HETZNER_GATEWAY
          on-link: true
      nameservers:
        addresses:
          - 185.12.64.1
          - 185.12.64.2

  bridges:
    br-mgmt:
      interfaces: []
      addresses:
        - 10.0.0.1/24
      mtu: 1500
      parameters:
        stp: false
        forward-delay: 0

    br-storage:
      interfaces: []
      addresses:
        - 10.0.1.1/24
      mtu: 9000
      parameters:
        stp: false
        forward-delay: 0

    br-external:
      interfaces: []
      addresses:
        - 192.168.100.1/24
      mtu: 1500
      parameters:
        stp: false
        forward-delay: 0

    br-tunnel:
      interfaces: []
      addresses:
        - 10.0.2.1/24
      mtu: 1500
      parameters:
        stp: false
        forward-delay: 0

    br-provider:
      interfaces: []
      mtu: 1500
      parameters:
        stp: false
        forward-delay: 0

Configuration NAT détaillée

# Script de configuration iptables complet
#!/bin/bash

# Flush existing rules
iptables -F
iptables -t nat -F
iptables -X

# Default policies
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# NAT pour tous les réseaux internes
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp41s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o enp41s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o enp41s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o enp41s0 -j MASQUERADE

# Port forwarding pour accès externe à l'API OpenStack (optionnel)
# iptables -t nat -A PREROUTING -i enp41s0 -p tcp --dport 5000 -j DNAT --to 192.168.100.10:5000
# iptables -t nat -A PREROUTING -i enp41s0 -p tcp --dport 8774 -j DNAT --to 192.168.100.10:8774
# iptables -t nat -A PREROUTING -i enp41s0 -p tcp --dport 80 -j DNAT --to 192.168.100.10:80

# Sauvegarder
netfilter-persistent save

Configuration réseau sur les VMs

Template netplan pour controllers

# /etc/netplan/50-cloud-init.yaml sur controller-X
network:
  version: 2
  ethernets:
    enp1s0:  # br-mgmt
      addresses:
        - 10.0.0.1X/24  # 11, 12, ou 13
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      mtu: 1500

    enp2s0:  # br-storage
      addresses:
        - 10.0.1.1X/24
      mtu: 9000

    enp3s0:  # br-external
      addresses:
        - 192.168.100.1X/24
      mtu: 1500

    enp4s0:  # br-tunnel (si ajouté)
      addresses:
        - 10.0.2.1X/24
      mtu: 1500

Test de connectivité réseau

#!/bin/bash
# Script de test réseau complet

echo "=== Test connectivité Management (10.0.0.0/24) ==="
for ip in 10.0.0.{1,5,11,12,13,21,22}; do
  ping -c 1 -W 1 $ip > /dev/null 2>&1 && echo "$ip: OK" || echo "$ip: FAIL"
done

echo -e "\n=== Test connectivité Storage (10.0.1.0/24) ==="
for ip in 10.0.1.{1,11,12,13,21,22}; do
  ping -c 1 -W 1 $ip > /dev/null 2>&1 && echo "$ip: OK" || echo "$ip: FAIL"
done

echo -e "\n=== Test connectivité External (192.168.100.0/24) ==="
for ip in 192.168.100.{1,5,11,12,13,21,22}; do
  ping -c 1 -W 1 $ip > /dev/null 2>&1 && echo "$ip: OK" || echo "$ip: FAIL"
done

echo -e "\n=== Test MTU storage network ==="
# Test MTU 9000 entre controllers
ssh ubuntu@controller-1 "ping -c 1 -M do -s 8972 10.0.1.12"

echo -e "\n=== Test accès internet depuis VMs ==="
ssh ubuntu@controller-1 "curl -s --max-time 5 ifconfig.me && echo ''"

Configuration DNS interne (optionnel)

Pour un lab plus réaliste, configurer dnsmasq sur l'hôte :

# Installer dnsmasq sur l'hôte
apt install -y dnsmasq

# Configuration
cat > /etc/dnsmasq.d/openstack-lab.conf << 'EOF'
# Interface d'écoute
interface=br-mgmt
bind-interfaces

# Domaine
domain=openstack.local
local=/openstack.local/

# DNS upstream
server=8.8.8.8
server=8.8.4.4

# Entrées statiques
address=/api.openstack.local/10.0.0.10
address=/horizon.openstack.local/192.168.100.10

# Hosts
host-record=controller-1.openstack.local,10.0.0.11
host-record=controller-2.openstack.local,10.0.0.12
host-record=controller-3.openstack.local,10.0.0.13
host-record=compute-1.openstack.local,10.0.0.21
host-record=compute-2.openstack.local,10.0.0.22
host-record=deploy.openstack.local,10.0.0.5
EOF

systemctl restart dnsmasq

Isolation réseau pour la sécurité

# Règles iptables pour isoler les réseaux
# Le trafic storage ne doit pas sortir du réseau storage

# Bloquer le trafic storage vers l'extérieur
iptables -A FORWARD -s 10.0.1.0/24 -o enp41s0 -j DROP

# Autoriser uniquement le trafic storage intra-réseau
iptables -A FORWARD -s 10.0.1.0/24 -d 10.0.1.0/24 -j ACCEPT

Ajout d'une interface tunnel aux VMs (pour VXLAN)

# Ajouter une 4ème interface aux VMs si besoin de réseau tunnel séparé
for vm in controller-{1,2,3} compute-{1,2}; do
  virsh attach-interface --domain $vm --type bridge --source br-tunnel --model virtio --config
done

# Redémarrer les VMs pour appliquer
for vm in controller-{1,2,3} compute-{1,2}; do
  virsh reboot $vm
done

Exemples pratiques

Diagnostic réseau complet

#!/bin/bash
# Script diagnostic réseau

echo "=== Bridges sur l'hôte ==="
bridge link show

echo -e "\n=== Routes sur l'hôte ==="
ip route

echo -e "\n=== NAT iptables ==="
iptables -t nat -L -n -v

echo -e "\n=== Interfaces par VM ==="
for vm in controller-{1,2,3} compute-{1,2} deploy; do
  echo "--- $vm ---"
  virsh domiflist $vm
done

echo -e "\n=== Test latence réseau storage ==="
ssh ubuntu@controller-1 "ping -c 5 10.0.1.12" | tail -1

echo -e "\n=== Test bande passante (si iperf3 installé) ==="
# Sur controller-1: iperf3 -s
# Sur controller-2: iperf3 -c 10.0.1.11

Configuration VLANs pour provider networks

# Si vous voulez simuler des VLANs provider

# Créer interfaces VLAN sur l'hôte
ip link add link br-provider name br-provider.100 type vlan id 100
ip link add link br-provider name br-provider.200 type vlan id 200
ip link set br-provider.100 up
ip link set br-provider.200 up

# Ces VLANs seront utilisés par Neutron comme provider networks

Ressources

Checkpoint

  • Tous les bridges créés et fonctionnels
  • NAT configuré pour accès internet des VMs
  • MTU 9000 fonctionnel sur le réseau storage
  • Connectivité testée entre toutes les VMs sur tous les réseaux
  • Isolation réseau appropriée configurée
  • DNS interne fonctionnel (optionnel)