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)