Skip to content

Réseaux Linux

Introduction

La maîtrise des concepts réseaux Linux est fondamentale pour OpenStack. Neutron, le service réseau d'OpenStack, utilise intensivement les bridges, VLANs, namespaces réseau et iptables pour fournir l'isolation et la connectivité aux VMs.

Cette section couvre les technologies réseau Linux que vous rencontrerez dans un déploiement OpenStack.

Prérequis

Points à apprendre

Linux Bridges

Un bridge Linux fonctionne comme un switch virtuel de niveau 2, permettant de connecter plusieurs interfaces réseau.

Création et gestion

# Avec ip (iproute2)
ip link add name br0 type bridge
ip link set br0 up
ip link set eth0 master br0
ip addr add 192.168.1.10/24 dev br0

# Voir les ports du bridge
bridge link show
bridge fdb show

# Avec brctl (bridge-utils, legacy)
brctl addbr br0
brctl addif br0 eth0
brctl show
brctl showmacs br0

Configuration persistante (netplan)

# /etc/netplan/01-bridge.yaml
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: false
    enp2s0:
      dhcp4: false
  bridges:
    br-mgmt:
      interfaces: [enp1s0]
      addresses: [10.0.0.10/24]
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses: [8.8.8.8]
    br-provider:
      interfaces: [enp2s0]
      addresses: []  # Pas d'IP, utilisé par Neutron

VLANs

Les VLANs permettent de segmenter le réseau au niveau 2, utilisés par Neutron pour l'isolation des projets.

Création VLAN

# Charger le module
modprobe 8021q

# Créer interface VLAN
ip link add link eth0 name eth0.100 type vlan id 100
ip addr add 192.168.100.10/24 dev eth0.100
ip link set eth0.100 up

# Voir configuration VLAN
cat /proc/net/vlan/config
ip -d link show eth0.100

VLAN sur bridge

# Bridge VLAN-aware (moderne)
ip link add br0 type bridge vlan_filtering 1
ip link set eth0 master br0
ip link set br0 up

# Ajouter VLANs au port
bridge vlan add dev eth0 vid 100
bridge vlan add dev eth0 vid 200 pvid untagged

# Voir VLANs
bridge vlan show

Network Namespaces

Les namespaces réseau isolent complètement les stacks réseau. Neutron crée un namespace par routeur et par réseau DHCP.

Gestion des namespaces

# Créer namespace
ip netns add ns1

# Lister namespaces
ip netns list

# Exécuter commande dans namespace
ip netns exec ns1 ip addr
ip netns exec ns1 bash  # Shell dans le namespace

# Supprimer
ip netns delete ns1

Connexion entre namespaces (veth pairs)

# Créer paire veth
ip link add veth0 type veth peer name veth1

# Déplacer une extrémité dans namespace
ip link set veth1 netns ns1

# Configurer interfaces
ip addr add 10.0.0.1/24 dev veth0
ip link set veth0 up

ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1
ip netns exec ns1 ip link set veth1 up
ip netns exec ns1 ip link set lo up

# Test connectivité
ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1

Architecture type Neutron

graph TB
    subgraph Host["Host Network Stack"]
        subgraph OVS["br-int (OVS)"]
            qvo_xxx["qvo-xxx"]
            qvo_yyy["qvo-yyy"]
            patch["patch"]
        end

        subgraph VM1["VM 1"]
            qbr_xxx["qbr-xxx"]
        end

        subgraph VM2["VM 2"]
            qbr_yyy["qbr-yyy"]
        end
    end

    subgraph Router["qrouter-xxx namespace"]
        qr_int["qr-int<br/>10.0.0.1"]
        qg_ext["qg-ext<br/>Floating IP"]
        nat["NAT/Routing"]
        ext["External"]

        qr_int <--> nat
        nat <--> qg_ext
        qg_ext --> ext
    end

    qvo_xxx --> qbr_xxx
    qvo_yyy --> qbr_yyy
    patch --> qr_int

iptables / nftables

OpenStack utilise iptables pour les security groups, le NAT et le filtrage.

Concepts iptables

flowchart TB
    PREROUTING["PREROUTING<br/>(nat, mangle)"]
    ROUTING["ROUTING<br/>DECISION"]
    INPUT["INPUT<br/>(filter, mangle)"]
    FORWARD["FORWARD<br/>(filter, mangle)"]
    LOCAL["Local Process"]
    OUTPUT["OUTPUT<br/>(nat, filter, mangle)"]
    POSTROUTING["POSTROUTING<br/>(nat, mangle)"]

    PREROUTING --> ROUTING
    ROUTING --> INPUT
    ROUTING --> FORWARD
    INPUT --> LOCAL
    LOCAL --> OUTPUT
    OUTPUT --> POSTROUTING
    FORWARD --> POSTROUTING

Commandes essentielles

# Lister règles
iptables -L -n -v
iptables -t nat -L -n -v
iptables -S  # Format sauvegarde

# Règles basiques
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

# NAT (masquerade)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

# DNAT (port forwarding)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.5:80

# Sauvegarder / Restaurer
iptables-save > /etc/iptables.rules
iptables-restore < /etc/iptables.rules

Security Groups style

# Exemple de règles type security group OpenStack
# Groupe par défaut : tout bloquer en entrée, autoriser sortant

# Chaîne custom pour une VM
iptables -N sg-vm1-input
iptables -A sg-vm1-input -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A sg-vm1-input -p tcp --dport 22 -j ACCEPT
iptables -A sg-vm1-input -p icmp --icmp-type echo-request -j ACCEPT
iptables -A sg-vm1-input -j DROP

# Appliquer à l'interface de la VM
iptables -A FORWARD -o tap-vm1 -j sg-vm1-input

Open vSwitch (OVS)

Open vSwitch est le switch virtuel utilisé par Neutron ML2/OVS.

Installation

apt install -y openvswitch-switch
systemctl enable --now openvswitch-switch

Commandes de base

# Créer bridge OVS
ovs-vsctl add-br br-int

# Ajouter port
ovs-vsctl add-port br-int eth0

# Lister bridges et ports
ovs-vsctl show
ovs-vsctl list-br
ovs-vsctl list-ports br-int

# Port avec VLAN
ovs-vsctl add-port br-int vlan100 tag=100 -- set interface vlan100 type=internal

# Patch ports (connexion entre bridges)
ovs-vsctl add-port br-int patch-tun -- set interface patch-tun type=patch options:peer=patch-int
ovs-vsctl add-port br-tun patch-int -- set interface patch-int type=patch options:peer=patch-tun

# Flows
ovs-ofctl dump-flows br-int
ovs-ofctl show br-int

Architecture OVS Neutron

# Bridges typiques OpenStack
ovs-vsctl add-br br-int          # Integration bridge (VMs)
ovs-vsctl add-br br-tun          # Tunnel bridge (VXLAN/GRE)
ovs-vsctl add-br br-ex           # External bridge (provider network)

# Voir topologie
ovs-vsctl show

Routage avancé

Tables de routage multiples

# Ajouter table de routage
echo "100 custom" >> /etc/iproute2/rt_tables

# Ajouter route dans table custom
ip route add default via 192.168.1.1 table custom
ip route add 10.0.0.0/8 via 10.0.0.1 table custom

# Règle pour utiliser cette table
ip rule add from 192.168.2.0/24 table custom

# Voir règles et tables
ip rule show
ip route show table custom

Policy routing

# Routage basé sur la source
ip rule add from 10.0.0.0/24 lookup 100
ip route add default via 10.0.0.254 table 100

# Routage basé sur le port
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
ip rule add fwmark 1 lookup 100

Exemples pratiques

Lab 1 : Simuler architecture Neutron

#!/bin/bash
# Simulation simplifiée de l'architecture réseau Neutron

# Créer namespaces
ip netns add qrouter-1
ip netns add qdhcp-1

# Créer bridge pour réseau interne
ip link add br-int type bridge
ip link set br-int up

# Créer paire veth pour routeur
ip link add qr-int type veth peer name qr-br
ip link set qr-br master br-int
ip link set qr-br up
ip link set qr-int netns qrouter-1

# Configurer routeur
ip netns exec qrouter-1 ip addr add 10.0.0.1/24 dev qr-int
ip netns exec qrouter-1 ip link set qr-int up
ip netns exec qrouter-1 ip link set lo up

# Créer paire veth pour DHCP
ip link add tap-dhcp type veth peer name ns-dhcp
ip link set tap-dhcp master br-int
ip link set tap-dhcp up
ip link set ns-dhcp netns qdhcp-1

# Configurer DHCP namespace
ip netns exec qdhcp-1 ip addr add 10.0.0.2/24 dev ns-dhcp
ip netns exec qdhcp-1 ip link set ns-dhcp up
ip netns exec qdhcp-1 ip link set lo up

# Test connectivité
ip netns exec qdhcp-1 ping -c 2 10.0.0.1

echo "Namespaces créés:"
ip netns list
echo ""
echo "Dans qrouter-1:"
ip netns exec qrouter-1 ip addr
echo ""
echo "Dans qdhcp-1:"
ip netns exec qdhcp-1 ip addr

Lab 2 : Configuration VLAN complète

#!/bin/bash
# Lab VLAN avec bridge

# Créer VLANs sur interface physique (simulée avec dummy)
ip link add dummy0 type dummy
ip link set dummy0 up

# Créer interfaces VLAN
ip link add link dummy0 name dummy0.100 type vlan id 100
ip link add link dummy0 name dummy0.200 type vlan id 200

# Créer bridges par VLAN
ip link add br-vlan100 type bridge
ip link add br-vlan200 type bridge

ip link set dummy0.100 master br-vlan100
ip link set dummy0.200 master br-vlan200

ip link set br-vlan100 up
ip link set br-vlan200 up
ip link set dummy0.100 up
ip link set dummy0.200 up

# Assigner IPs aux bridges
ip addr add 192.168.100.1/24 dev br-vlan100
ip addr add 192.168.200.1/24 dev br-vlan200

# Vérifier
bridge link show
ip -d link show type vlan

Ressources

Checkpoint

  • Je peux créer et configurer un bridge Linux
  • Je comprends les VLANs et sais les configurer
  • Je maîtrise les network namespaces et veth pairs
  • Je connais les tables iptables et leurs rôles
  • Je peux configurer du NAT avec iptables
  • Je comprends les bases d'Open vSwitch
  • Je sais diagnostiquer les problèmes réseau (ip, ss, tcpdump)