📄 contenu.md 🔒 8e0eb541…2c3bcbcb Se connecter pour télécharger ← Retour
# 4. Réseau Linux

Cette section couvre la pile réseau du noyau, le filtrage de paquets
moderne (nftables, successeur d'iptables), le routage, et l'isolation
réseau par namespace déjà introduite en section 1.

## La pile réseau du noyau

Un paquet entrant traverse plusieurs points d'accroche (*hooks* netfilter)
avant d'atteindre l'application : réception par le pilote, décision de
routage précoce, filtrage, puis remise à la socket applicative. Chaque
interface réseau (`ip link`) porte des statistiques et un état
(`UP`/`DOWN`), consultables avec `ip -s link show`. La table de routage
(`ip route`) détermine, pour chaque paquet sortant, l'interface et la
passerelle à utiliser selon la destination — plusieurs tables de routage
peuvent coexister (*policy routing*, `ip rule`) pour router différemment
selon la source, l'utilisateur émetteur ou d'autres critères.

## nftables — le successeur d'iptables

**nftables** a remplacé iptables comme cadre de filtrage par défaut sur les
distributions modernes (l'ancien `iptables` reste disponible via une
couche de compatibilité `iptables-nft` qui traduit vers nftables en
coulisses). Différences structurantes :

- Une syntaxe déclarative unique pour IPv4 **et** IPv6 (fini les jeux de
  règles `iptables`/`ip6tables` dupliqués).
- Des **ensembles** (`set`) et **cartes** (`map`) natifs, permettant de
  tester une adresse contre des milliers d'entrées en temps constant plutôt
  qu'une longue chaîne de règles évaluées séquentiellement.
- Les tables/chaînes sont **définies par l'administrateur** (pas de chaînes
  imposées comme l'historique `INPUT`/`FORWARD`/`OUTPUT`, même si cette
  convention reste largement reprise par habitude).

Exemple minimal (bloquer tout sauf loopback et connexions déjà établies) :

```
table inet filtre {
  chain entree {
    type filter hook input priority 0; policy drop;
    iif lo accept
    ct state established,related accept
  }
}
```

## Namespaces réseau et véritables interfaces virtuelles

Un **network namespace** (`ip netns`) donne à un groupe de processus sa
propre pile réseau complète et isolée. Pour relier deux namespaces, on crée
une paire **veth** (*virtual ethernet*), deux interfaces liées comme les
deux bouts d'un câble — l'une reste dans le namespace hôte, l'autre est
déplacée dans le namespace cible. C'est le mécanisme de base sur lequel
reposent la plupart des solutions de mise en réseau de conteneurs.

## DNS côté client

`/etc/resolv.conf` (souvent généré dynamiquement par `systemd-resolved` ou
un client DHCP plutôt qu'édité à la main sur un système moderne) déclare
les serveurs de noms interrogés. `systemd-resolved` ajoute un cache DNS
local et le support de DNS-over-TLS pour chiffrer les requêtes sortantes,
avec un mécanisme de résolution par domaine de recherche configurable
par interface (utile en environnement multi-VPN).

## Diagnostic réseau de base

- `ss` (successeur de `netstat`) : sockets ouvertes, état TCP, files
  d'attente.
- `tcpdump` : capture de paquets en ligne de commande, filtrage par
  expression BPF.
- `traceroute`/`mtr` : chemin réseau saut par saut, `mtr` en continu avec
  statistiques de perte par saut.

*(Schéma disponible : `schema.svg`, dans ce dossier.)*
3.2 Ko BLAKE3 : 8e0eb541…2c3bcbcb