Troisième étage. On a fait le câble — la couche 1. On a fait les adresses MAC et la couche 2.
La couche 2 a une limite structurelle, et elle est brutale : elle ne passe pas à l’échelle. Pour trouver quelqu’un, elle crie dans le couloir (broadcast). Ça marche à trente. À trois milliards, c’est une blague. Et les adresses MAC sont plates : 00:1A:2B:3C:4D:5E ne dit rien de l’endroit où se trouve la machine. Aucune structure, aucune hiérarchie, rien à agréger. Un routeur mondial devrait connaître toutes les cartes réseau de la planète, une par une.
La couche 3 résout ce problème d’une seule idée : une adresse qui dit où on est. C’est tout. Le reste en découle.
L’essentiel en 30 secondes
- Une IP n’est pas une adresse, c’est deux : une partie réseau + une partie hôte. Le masque est la frontière. Sans masque, une IP ne veut rien dire.
- Les classes A/B/C sont mortes en 1993. On fait du CIDR. Si on vous parle encore de classes, on vous parle de 1992.
- Un routeur choisit par longest prefix match : la route la plus spécifique gagne, toujours.
- Le TTL n’est pas un temps, c’est un compteur de sauts. C’est lui qui fait marcher
traceroute.- Bloquer tout ICMP casse votre réseau. Le type 3 code 4 est vital.
- Le NAT n’est pas une sécurité. Le pare-feu à états qui l’accompagne, si.
- 80 % des incidents « ça marche pas » sont un masque faux, une route retour absente, ou un MTU.
L’adresse IP : ce que tout le monde croit savoir
Une adresse IPv4 fait 32 bits. On l’écrit en quatre nombres décimaux de 0 à 255, séparés par des points — la fameuse dotted decimal. C’est un pur confort humain : la machine, elle, ne voit que 32 bits d’affilée.
192 . 168 . 1 . 10
11000000.10101000.00000001.00001010
Voilà le point que je veux marteler, parce que c’est la clé de tout ce qui suit :
Une adresse IP seule ne signifie rien. Elle n’est interprétable qu’accompagnée de son masque.
192.168.1.10 ne vous dit pas dans quel réseau vous êtes. Ni qui est votre voisin. Ni ce que vous pouvez joindre directement. Tant qu’on ne vous a pas donné le masque, vous ne savez rien.
C’est pour ça qu’on écrit toujours 192.168.1.10/24 et jamais 192.168.1.10 tout court. Le /24 n’est pas un ornement — c’est la moitié de l’information.
Le masque : une frontière, pas un nombre
Le masque coupe les 32 bits en deux :
Adresse : 11000000.10101000.00000001.00001010 192.168.1.10
Masque : 11111111.11111111.11111111.00000000 255.255.255.0 (/24)
└────── partie RÉSEAU ──────┘└ HÔTE ┘
Règle unique : les bits à 1 du masque désignent le réseau. Les bits à 0 désignent l’hôte. Et les 1 sont forcément contigus, en partant de la gauche. Un masque troué (255.0.255.0) n’existe pas — enfin, si, techniquement, mais c’est aussi illégal en pratique que de rouler à contresens.
Comme les 1 sont contigus, il suffit de les compter. D’où la notation CIDR : /24 veut dire « 24 bits à 1 », donc 255.255.255.0. Les deux notations disent exactement la même chose.
| CIDR | Masque décimal | Bits hôte | Adresses | Hôtes utilisables |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 24 | 16 777 216 | 16 777 214 |
| /16 | 255.255.0.0 | 16 | 65 536 | 65 534 |
| /24 | 255.255.255.0 | 8 | 256 | 254 |
| /25 | 255.255.255.128 | 7 | 128 | 126 |
| /26 | 255.255.255.192 | 6 | 64 | 62 |
| /27 | 255.255.255.224 | 5 | 32 | 30 |
| /28 | 255.255.255.240 | 4 | 16 | 14 |
| /29 | 255.255.255.248 | 3 | 8 | 6 |
| /30 | 255.255.255.252 | 2 | 4 | 2 |
| /31 | 255.255.255.254 | 1 | 2 | 2 (cas spécial) |
| /32 | 255.255.255.255 | 0 | 1 | 1 (un hôte) |
Pourquoi le « −2 » ? Dans chaque réseau, deux adresses sont confisquées :
- La première = l’adresse de réseau. Tous les bits hôte à 0. Elle désigne le réseau lui-même, pas une machine.
192.168.1.0/24. - La dernière = le broadcast. Tous les bits hôte à 1. Elle désigne toutes les machines du réseau.
192.168.1.255/24.
Un /30 a donc 4 adresses et seulement 2 utilisables — d’où son usage historique pour les liaisons point-à-point entre routeurs : deux machines, deux adresses, zéro gâchis. Enfin, 50 % de gâchis.
Le /31 (RFC 3021) est l’exception qui confirme la règle : sur une liaison point-à-point, l’adresse de réseau et le broadcast n’ont aucun sens (il n’y a que deux machines, elles se connaissent). On les récupère donc : 2 adresses, 2 hôtes. C’est le détail qui fait plaisir en entretien.
Les classes A, B, C : à enterrer
Il faut en parler, parce que c’est encore enseigné, y compris en 2026, y compris dans des formations sérieuses.
Avant 1993, la partie réseau d’une IP était déduite du premier octet :
| Classe | 1er octet | Masque implicite | Verdict |
|---|---|---|---|
| A | 1–126 | /8 | historique |
| B | 128–191 | /16 | historique |
| C | 192–223 | /24 | historique |
| D | 224–239 | — | multicast, toujours valable |
| E | 240–255 | — | réservé |
Le système était rigide et gaspillait l’espace de façon obscène : une entreprise de 300 machines devait prendre une classe B (65 534 adresses) parce qu’une classe C (254) ne suffisait pas. 65 000 adresses immobilisées pour 300 machines.
CIDR (RFC 1519, 1993) a tué les classes. On choisit le masque qu’on veut, indépendamment du premier octet. 10.0.0.0/24 est parfaitement légal, alors que le « 10 » est en « classe A ».
Ce qui reste vrai : les classes D (multicast) et E (réservé) sont toujours d’actualité. Les A, B, C ne sont plus qu’un souvenir. Mais elles survivent dans les masques par défaut que proposent encore certains outils quand vous tapez une IP — Windows en tête. Ce n’est pas une règle, c’est une suggestion paresseuse héritée de 1992. Ne la subissez pas.
Les plages qu’il faut connaître par cœur
| Plage | Nom | À quoi ça sert |
|---|---|---|
10.0.0.0/8 |
RFC 1918 | privé — les grosses infras |
172.16.0.0/12 |
RFC 1918 | privé — 172.16 à 172.31, pas 172.32 |
192.168.0.0/16 |
RFC 1918 | privé — les petits réseaux, box, infra perso |
127.0.0.0/8 |
Loopback | soi-même. Tout le /8, pas juste .0.0.1 |
169.254.0.0/16 |
APIPA / link-local | le DHCP n’a pas répondu |
100.64.0.0/10 |
CGNAT (RFC 6598) | le NAT de votre opérateur |
224.0.0.0/4 |
Multicast | ancienne classe D |
0.0.0.0/0 |
Route par défaut | « tout le reste » |
Deux pièges classiques :
172.16.0.0/12s’arrête à172.31.255.255, pas à172.16.255.255. Le/12couvre 16 blocs/16. Beaucoup de gens ne réservent que172.16.x.xet se plantent en pensant que172.20.x.xest public. Il ne l’est pas.169.254.x.xest un message d’erreur déguisé. Si une machine porte cette adresse, elle n’a pas eu de bail DHCP. Elle se l’est attribuée toute seule, faute de mieux. Ne cherchez pas plus loin : câble, VLAN, serveur DHCP,ip helper-address. C’est l’un des diagnostics les plus rapides du métier — une IP qui est son propre symptôme.
Le paquet IP : les champs qui servent vraiment
L’en-tête IPv4 fait 20 octets minimum. Une douzaine de champs. Quatre comptent réellement au quotidien.
┌──────────┬──────────┬────────────────────────────────┐
│ Version │ IHL │ DSCP/ECN │ Longueur totale │
├──────────┴──────────┼──────────┬─────────────────────┤
│ Identification │ Flags │ Fragment offset │
├──────────┬──────────┼──────────┴─────────────────────┤
│ TTL │ Protocol │ Header checksum │
├──────────┴──────────┴────────────────────────────────┤
│ Adresse IP SOURCE (32 bits) │
├──────────────────────────────────────────────────────┤
│ Adresse IP DESTINATION (32 bits) │
└──────────────────────────────────────────────────────┘
TTL — le champ le plus malin de l’informatique
TTL = Time To Live. Le nom ment : ce n’est pas un temps. C’est un compteur de sauts.
La mécanique tient en deux lignes : chaque routeur traversé décrémente le TTL de 1. Si le TTL atteint 0, le routeur jette le paquet et renvoie à l’expéditeur un ICMP Time Exceeded (type 11).
Pourquoi ? Parce qu’une boucle de routage est toujours possible : R1 croit que c’est par R2, R2 croit que c’est par R1. Sans TTL, le paquet ferait l’aller-retour pour l’éternité, et le lien saturerait en quelques secondes. Le TTL est le disjoncteur : au pire, le paquet meurt après N sauts. Un réseau en boucle avec TTL est un réseau qui perd des paquets. Sans TTL, c’est un réseau qui s’effondre.
Les valeurs de départ trahissent l’OS — c’est du fingerprinting gratuit :
| TTL de départ | Système |
|---|---|
| 64 | Linux, macOS, *BSD |
| 128 | Windows |
| 255 | Routeurs, équipements réseau |
Vous pingez une machine et recevez un TTL de 122 ? Départ à 128, donc Windows, et 6 routeurs traversés. Vous venez d’apprendre l’OS et la distance sans rien envoyer d’autre qu’un ping.
Et le génie du truc : c’est exactement comme ça que fonctionne traceroute. On envoie un paquet avec TTL = 1. Le premier routeur le décrémente à 0, le jette, et se dénonce en renvoyant son Time Exceeded. On note son IP. On recommence avec TTL = 2 : le deuxième routeur se dénonce. Puis 3, 4, 5… Chaque routeur du chemin est forcé de lever la main, dans l’ordre. traceroute n’est pas un protocole — c’est un détournement élégant d’un mécanisme anti-boucle.
Protocol — qui est au-dessus
Un octet qui annonce le contenu. L’équivalent de l’EtherType de la couche 2, un étage plus haut.
| N° | Protocole |
|---|---|
| 1 | ICMP |
| 6 | TCP |
| 17 | UDP |
| 47 | GRE |
| 50 | ESP (IPsec) |
| 89 | OSPF |
| 112 | VRRP |
Ces numéros servent tous les jours dans les ACL et les règles de pare-feu. Retenez 1, 6, 17. Le 50 quand vous ferez de l’IPsec — et vous vous souviendrez qu’ESP n’a pas de numéro de port, ce qui explique pourquoi il traverse mal le NAT. Mais c’est une autre histoire.
Fragmentation, MTU : le sujet qui pourrit les journées
Le MTU (Maximum Transmission Unit) est la taille maximale d’un paquet sur un lien. Sur Ethernet : 1500 octets. C’est une valeur de couche 2 qui contraint la couche 3 — une des rares fuites entre couches.
Un paquet trop gros pour le lien suivant a deux destins :
- Bit DF (Don’t Fragment) à 0 → le routeur fragmente. Le paquet est coupé en morceaux, réassemblés uniquement à destination finale.
- Bit DF à 1 → le routeur jette et renvoie un ICMP Destination Unreachable — Fragmentation Needed (type 3, code 4), en précisant le MTU qui passerait.
C’est ce second cas qui compte, parce que tout le monde met DF à 1 : TCP moderne fait de la PMTUD (Path MTU Discovery). Il envoie gros avec DF, attend qu’on lui dise « trop gros, essaie 1400 », et s’adapte.
Et voilà le drame. Un administrateur zélé bloque « tout ICMP » sur son pare-feu, parce que « ICMP c’est le ping et le ping c’est dangereux ». Le message type 3 code 4 n’arrive jamais à l’expéditeur. Celui-ci ne sait pas que ses paquets sont trop gros. Il continue d’en envoyer. Ils continuent d’être jetés. En silence.
Le symptôme est légendaire, et il ressemble à de la magie noire :
- le ping passe (petit paquet ✓)
- SSH se connecte, l’invite s’affiche (petits paquets ✓)
- SSH gèle dès qu’on tape
ls -lsur un gros répertoire (gros paquet ✗) - le site web charge le HTML mais jamais les images
- « ça marche depuis le wifi mais pas depuis le VPN »
Ça s’appelle un PMTUD black hole. Ça se diagnostique en deux commandes :
ping -M do -s 1472 8.8.8.8 # Linux : DF + 1472 octets = 1500 avec les en-têtes
ping -f -l 1472 8.8.8.8 # Windows : équivalent
On descend la taille jusqu’à ce que ça passe : on tient le MTU réel du chemin. Si 1472 échoue et 1400 passe, votre MTU utile est quelque part entre les deux — typiquement un VPN, un tunnel IPsec ou du PPPoE qui mange de la place.
| Contexte | MTU utile |
|---|---|
| Ethernet standard | 1500 |
| PPPoE (ADSL/fibre opérateur) | 1492 |
| Tunnel IPsec | ~1400 |
| WireGuard | 1420 |
| Jumbo frames (SAN, backup) | 9000 |
La parade quand on ne maîtrise pas le chemin : le MSS clamping. Le routeur réécrit à la volée le MSS annoncé par TCP à l’établissement de la connexion, pour forcer les deux bouts à envoyer petit. C’est une rustine — mais c’est une rustine qui sauve des vies sur du VPN site-à-site.
Le routage : comment un routeur décide
Un routeur ne fait qu’une chose, mais il la fait des millions de fois par seconde : regarder l’IP de destination, consulter sa table, réexpédier. Point.
La table de routage
ip route show # Linux
route print # Windows
show ip route # Cisco
Sur une machine Linux ordinaire :
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
10.8.0.0/24 via 192.168.1.254 dev eth0
Trois lignes, trois natures :
default=0.0.0.0/0= tout le reste. La route de dernier recours.192.168.1.0/24 dev eth0= le réseau directement connecté. Pas devia: on est dessus, on livre en direct (via ARP, cf. l’article couche 2).10.8.0.0/24 via …= une route explicite vers un réseau distant.
Longest prefix match — LA règle
Un paquet pour 10.8.0.42 peut correspondre à plusieurs lignes à la fois. Laquelle gagne ?
La plus spécifique. Celle qui a le masque le plus long. Toujours.
Pas la première trouvée, pas la moins coûteuse, pas la plus récente : la plus longue. Un /24 bat un /16, qui bat un /8, qui bat le /0 par défaut.
C’est ce qui rend le routage hiérarchique possible : on annonce une grosse route générale, et on affine localement avec des routes plus spécifiques qui, mécaniquement, prennent le dessus. Aucune notion de priorité à gérer — la spécificité est la priorité.
Corollaire utile : 0.0.0.0/0 a un masque de longueur zéro. C’est la route la moins spécifique qui puisse exister. Elle ne gagne donc que si aucune autre ne correspond. C’est exactement ce qu’on veut d’un « tout le reste ».
Et la commande qui répond directement à la question, sans que vous ayez à lire la table :
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 1000
Elle vous donne le verdict du noyau : quelle route, quelle interface, quelle IP source. C’est la commande que j’utilise en premier quand quelque chose part au mauvais endroit. Elle tranche les débats en une seconde.
Métrique et distance administrative
Deux routes de même longueur vers la même destination ? Là seulement on départage :
- La distance administrative (concept Cisco) — à quel point on fait confiance à la source de l’info. Plus c’est bas, mieux c’est.
- La métrique — le coût, au sein d’un même protocole.
| Source | Distance administrative |
|---|---|
| Connecté | 0 |
| Statique | 1 |
| eBGP | 20 |
| OSPF | 110 |
| RIP | 120 |
| iBGP | 200 |
L’ordre a du sens : « je le vois de mes yeux » (0) bat « un humain me l’a dit » (1), qui bat « un protocole me l’a calculé » (110). La confiance décroît avec la distance à la source.
Statique ou dynamique ?
Routage statique — vous écrivez les routes à la main.
- ✅ Prévisible, zéro CPU, zéro protocole à sécuriser
- ❌ Aucune adaptation : un lien tombe, la route reste, le trafic part dans le vide
Routage dynamique — les routeurs se parlent.
| Protocole | Type | Métrique | Terrain |
|---|---|---|---|
| RIP | vecteur de distance | nb de sauts (max 15) | musée |
| OSPF | état de liens | coût (bande passante) | le standard en entreprise |
| BGP | vecteur de chemin | politique | Internet, opérateurs |
En pratique, pour un TSSR : l’immense majorité des PME tourne en statique, et c’est très bien. Quelques routes, une par défaut, terminé. OSPF apparaît quand il y a plusieurs sites et de la redondance. BGP, quand il y a plusieurs opérateurs — et là, ce n’est plus vous.
La bonne question n’est pas « statique ou dynamique ? » mais « ai-je des chemins redondants ? ». Sans redondance, le dynamique n’apporte rien qu’une complexité et une surface d’attaque.
La route retour — l’erreur n°1
Celle que je vois le plus, tous niveaux confondus. Gravez-la :
Le routage ne se configure jamais dans un seul sens. Un paquet qui part doit pouvoir revenir — et il ne revient pas forcément par où il est venu.
Le scénario : vous ajoutez une route sur le routeur A vers le réseau B. Vous testez. Le ping ne passe pas. Vous vérifiez trois fois votre route. Elle est parfaite. Elle est parfaite. Le paquet arrive très bien à destination.
C’est le retour qui n’a pas de chemin. La machine cible reçoit votre ping, veut répondre, consulte sa table, ne trouve rien pour votre réseau, et balance la réponse vers sa passerelle par défaut — qui n’en veut pas.
Le réflexe : en cas de « ça part mais ça ne revient pas », arrêtez de regarder votre côté. tcpdump sur la machine cible : si vous voyez arriver les paquets, votre aller est bon à 100 %, et le problème est ailleurs — route retour, ou pare-feu local. Ce seul test coupe le problème en deux et fait gagner des heures.
Le cousin de ce piège : les deux passerelles par défaut sur une machine multi-interfaces. Deux 0.0.0.0/0, une seule qui sert, et un comportement apparemment aléatoire. Une machine n’a qu’une passerelle par défaut. Si vous en avez besoin de deux, ce que vous voulez ce sont des routes spécifiques plus une seule route par défaut.
ICMP : ce n’est pas « le ping »
Erreur de vocabulaire aux conséquences très concrètes. ICMP n’est pas le ping. Le ping est un usage d’ICMP. ICMP est le système de signalisation d’erreur de la couche 3 — la façon dont le réseau vous dit ce qui ne va pas.
| Type | Nom | Ce que ça veut dire |
|---|---|---|
| 0 | Echo Reply | la réponse au ping |
| 3 | Destination Unreachable | ça n’est pas passé — le code précise pourquoi |
| 5 | Redirect | « passe plutôt par là » |
| 8 | Echo Request | la demande de ping |
| 11 | Time Exceeded | TTL épuisé — le moteur de traceroute |
Le type 3 est une famille entière, et c’est le code qui parle :
| Code | Signification | Ce que ça vous dit |
|---|---|---|
| 0 | Network Unreachable | problème de routage |
| 1 | Host Unreachable | routage OK, la machine ne répond pas à l’ARP |
| 3 | Port Unreachable | la machine est là, rien n’écoute sur ce port |
| 4 | Fragmentation Needed | MTU — le message vital |
| 13 | Communication Administratively Prohibited | un pare-feu vous a jeté |
Ces codes sont un cadeau. « Destination unreachable » ne veut rien dire ; « destination unreachable, code 3 » veut dire « ton routage est parfait, ton service est mort ». Deux diagnostics opposés, un seul chiffre de différence. Lisez les codes.
Faut-il bloquer ICMP ?
Réponse courte : non. Réponse longue : non, mais.
L’argument « ICMP permet de découvrir mon réseau » est réel mais faible : un attaquant qui est déjà sur votre segment n’a aucun besoin d’ICMP pour vous cartographier — un scan TCP fait le travail, et l’ARP encore mieux (cf. couche 2). Vous vous privez d’un outil de diagnostic pour ralentir de trente secondes quelqu’un qui est déjà à l’intérieur.
Et surtout, bloquer tout ICMP casse des choses, sans message d’erreur, de façon différée, et personne ne fera le lien trois mois plus tard :
- Type 3 code 4 bloqué → PMTUD black hole. Le cauchemar décrit plus haut.
- Type 11 bloqué → plus de
traceroute. Vous êtes aveugle sur vos propres chemins. - Type 3 code 3 bloqué → les connexions vers un port fermé expirent au lieu d’être refusées immédiatement. Vos applications rament au lieu d’échouer proprement.
La position raisonnable : filtrer l’echo request (type 8) entrant depuis Internet si ça vous rassure — c’est le seul qui se défend. Laisser passer les types 3 et 11 dans tous les sens. Ce ne sont pas des requêtes, ce sont des messages d’erreur : les bloquer, c’est débrancher le voyant d’huile pour ne plus le voir s’allumer.
NAT : indispensable, et incompris
NAT = Network Address Translation. Un routeur réécrit les adresses IP dans les paquets qui le traversent.
Pourquoi ça existe
IPv4 a 4,3 milliards d’adresses. C’est fini depuis longtemps. Le NAT permet à 200 machines de partager une seule IP publique. C’est une rustine — une rustine tellement efficace qu’elle a repoussé l’adoption d’IPv6 de vingt ans.
Les trois formes
| Forme | Ce qui est réécrit | Usage |
|---|---|---|
| SNAT (source) | l’IP source, en sortie | vos machines vers Internet |
| DNAT (destination) | l’IP destination, en entrée | publier un serveur interne |
| PAT / NAT overload | source + port | ce que fait votre box |
Le PAT est le cas réel à 99 %. Le routeur ne réécrit pas que l’IP : il change aussi le port source, et tient une table de correspondance.
Interne Externe (vu d'Internet)
192.168.1.10:51234 → 93.20.1.5:40001
192.168.1.11:51234 → 93.20.1.5:40002
192.168.1.12:33445 → 93.20.1.5:40003
Une réponse arrive sur le port 40002 → le routeur consulte sa table → c’est pour 192.168.1.11:51234. Le port devient le discriminant. Un seul IP publique, 65 000 conversations simultanées.
Notez la fuite de couche. Le NAT est présenté comme un mécanisme de couche 3, mais le PAT manipule les ports TCP/UDP, qui sont de la couche 4. Le NAT viole allègrement le modèle en couches. C’est d’ailleurs pour ça qu’il casse tant de protocoles : tout ce qui embarque une IP dans les données (SIP, FTP actif, IPsec ESP) se retrouve incohérent, et il faut des rustines sur la rustine (helpers ALG, NAT-T).
Le NAT n’est pas une sécurité
Il faut le dire net, parce que c’est une croyance solide, y compris chez des gens sérieux.
L’argument est : « mes machines sont en 192.168.x.x, elles sont injoignables depuis Internet, donc je suis protégé. »
Ce qui protège, ce n’est pas la traduction d’adresse — c’est la table d’états. Le routeur laisse entrer une réponse parce qu’elle correspond à une conversation que vous avez initiée. C’est du filtrage à états, et ça existe très bien sans NAT.
La preuve par l’usage :
- Un DNAT ou une redirection de port perce le NAT en une ligne de configuration.
- UPnP laisse n’importe quelle application ouvrir des ports toute seule, sans vous demander votre avis. Sur beaucoup de box, c’est actif par défaut.
- Le NAT ne filtre rien du tout en sortie. Un poste compromis établit sa connexion vers l’extérieur, et le NAT lui déroule le tapis rouge — c’est exactement ce que fait chaque reverse shell de la Terre.
- Le NAT ne voit pas ce qui se passe à l’intérieur de votre réseau. Zéro protection latérale.
La formulation juste : le NAT est un mécanisme d’économie d’adresses qui a, par effet de bord, un comportement de filtrage à états. Confondre l’effet de bord avec l’intention est ce qui fait dire « je n’ai pas besoin de pare-feu, j’ai un NAT ». C’est faux, et c’est exactement le raisonnement qu’on a vu à la couche 2 avec le filtrage MAC : prendre un mécanisme de fonctionnement pour une mesure de sécurité.
La sécurité de la couche 3
Comme la 2, la couche 3 a été conçue entre gens de confiance. Mêmes causes, mêmes effets.
IP spoofing
Le principe : l’IP source d’un paquet est un champ de texte. Rien ne la vérifie. Vous écrivez ce que vous voulez.
La limite : si vous mentez sur votre source, les réponses partent chez le vrai propriétaire de cette IP, pas chez vous. Le spoofing est donc inutile pour établir une conversation TCP (il faudrait deviner le numéro de séquence, ce qui n’est plus réaliste). Il reste redoutable pour tout ce qui est unidirectionnel : UDP, floods, et surtout amplification.
Le schéma d’amplification : j’envoie une petite requête DNS ou NTP en usurpant votre IP. Le serveur répond — et sa réponse, bien plus grosse que la question, part chez vous. Multiplié par des milliers de serveurs, vous prenez un DDoS que je n’ai pas eu à payer. Le facteur d’amplification atteint plusieurs dizaines. C’est le genre de trafic qu’on finit par apprendre à reconnaître dans les logs d’un pare-feu.
La parade : uRPF (unicast Reverse Path Forwarding). Le routeur reçoit un paquet, regarde son IP source, et se demande : « si je devais répondre à cette adresse, est-ce que je passerais par l’interface d’où ce paquet arrive ? » Si non, c’est incohérent — le paquet ment sur son origine — et il est jeté. Simple, élégant, et efficace.
ICMP Redirect
Le principe : ICMP type 5 dit « pour cette destination, passe plutôt par X, il est mieux placé ». Un routeur légitime l’utilise pour corriger un chemin sous-optimal.
L’abus : n’importe qui sur le segment peut en envoyer. « Pour Internet, passe par moi. » Résultat : MITM, encore une fois. Version couche 3 de l’ARP spoofing, avec la même racine — aucune authentification.
La parade : on n’en a pratiquement jamais besoin. Désactivez.
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
Directed broadcast (Smurf)
Envoyer un paquet à 192.168.1.255 depuis l’extérieur faisait répondre toutes les machines du réseau. Avec du spoofing, c’est une amplification maison. C’est l’attaque Smurf, et elle a fait des dégâts dans les années 90.
Elle est morte parce que no ip directed-broadcast est le défaut sur tout équipement moderne. À vérifier tout de même sur du matériel ancien, et sur ce qu’on ressort d’un carton.
Les ACL : filtrer sans état
Une ACL (liste de contrôle d’accès) filtre sur IP source, IP destination, protocole, ports. C’est le filtrage de base d’un routeur.
Deux caractéristiques à connaître, parce qu’elles piègent :
- Un
deny any anyimplicite est à la fin de toute ACL. Ce qui n’est pas explicitement autorisé est refusé. Une ACL qui ne contient que despermitbloque quand même tout le reste. Beaucoup de gens l’apprennent en coupant la production. - Une ACL classique est sans état. Elle ne sait pas qu’une réponse est une réponse. Il faut donc écrire les règles dans les deux sens — et là, on retombe sur le piège du retour, sous une autre forme.
C’est précisément cette limite qui justifie le pare-feu à états, qui, lui, suit les conversations. Mais ça déborde sur la couche 4, et c’est le sujet du prochain article.
La boîte à outils
Ce qui tombe en mise en situation, et ce qui sert vraiment.
Voir sa configuration
ip -br addr show # compact, lisible, ma préférée
ip route show # la table de routage
ip route get 8.8.8.8 # ← quelle route sera VRAIMENT utilisée
ipconfig /all # Windows
route print # Windows
show ip route # Cisco
show ip interface brief # Cisco — l'état de toutes les interfaces d'un coup
Tester la connectivité, dans l’ordre
ping 127.0.0.1 # 1. ma pile IP fonctionne-t-elle ?
ping <mon IP> # 2. mon interface est-elle configurée ?
ping <ma passerelle> # 3. mon réseau local marche-t-il ?
ping 8.8.8.8 # 4. mon routage sort-il ?
ping google.com # 5. mon DNS marche-t-il ?
Cette séquence est la meilleure méthode de diagnostic réseau qui existe, et elle tient en cinq lignes. Elle isole la panne par élimination, de l’intérieur vers l’extérieur. L’endroit où ça casse est le diagnostic. Et le classique : les étapes 1 à 4 passent, la 5 échoue → ce n’est pas le réseau, c’est le DNS. Ça n’a jamais été le réseau. C’est toujours le DNS.
Suivre le chemin
traceroute 8.8.8.8 # Linux (UDP par défaut)
traceroute -I 8.8.8.8 # en ICMP, comme Windows
traceroute -T -p 443 … # en TCP — passe là où l'UDP est filtré
tracert 8.8.8.8 # Windows (ICMP)
mtr 8.8.8.8 # ← traceroute + ping en continu
mtr mérite d’être connu. Il fait tourner le traceroute en boucle et affiche le taux de perte par saut, en temps réel. C’est l’outil qui distingue « le lien est lent » de « le lien perd 3 % des paquets au 4ᵉ saut ». Sur un problème intermittent, un traceroute unique ne montre rien ; mtr laissé cinq minutes montre tout.
Un piège de lecture, cela dit : de la perte sur un saut intermédiaire ne veut pas dire que ce saut est en panne. Beaucoup de routeurs dépriorisent la génération d’ICMP quand ils sont chargés — ils répondent mal à mtr tout en routant parfaitement le vrai trafic. Ce qui compte, c’est la perte sur le dernier saut. Si la destination finale est à 0 %, les 40 % affichés au milieu sont un artefact. C’est l’erreur d’interprétation la plus courante avec cet outil.
Le MTU
ping -M do -s 1472 8.8.8.8 # Linux : DF, 1472+28 = 1500
ping -f -l 1472 8.8.8.8 # Windows
ip link show eth0 | grep mtu # le MTU de mon interface
Wireshark / tcpdump
tcpdump -i eth0 icmp # voir les erreurs du réseau
tcpdump -i eth0 host 192.168.1.50 # tout ce qui concerne une machine
tcpdump -i eth0 net 10.0.0.0/8 # tout un réseau
tcpdump -i eth0 'icmp[icmptype] == 3' # ← toutes les destinations injoignables
Filtres Wireshark :
ip.addr == 192.168.1.50
ip.ttl < 5 # paquets en fin de vie — boucle ?
icmp.type == 3 # les erreurs
icmp.type == 3 && icmp.code == 4 # ← les problèmes de MTU
Le dernier est votre ami. Si vous en voyez, vous tenez votre PMTUD.
Les erreurs classiques
- Donner une IP sans son masque — l’information est incomplète, littéralement.
- Croire aux classes A/B/C — mortes en 1993. Le masque par défaut proposé par Windows est une suggestion, pas une loi.
- Penser que
172.16.0.0/12s’arrête à172.16.255.255— il va jusqu’à172.31.255.255. - Ne pas reconnaître
169.254.x.x— c’est « le DHCP n’a pas répondu », pas une adresse. - Configurer le routage dans un seul sens — le retour est la moitié du travail.
- Deux passerelles par défaut — une machine n’en a qu’une. Le reste, ce sont des routes spécifiques.
- Bloquer tout ICMP — et casser la PMTUD sans jamais faire le lien.
- Confondre NAT et pare-feu — c’est le filtrage à états qui protège, pas la traduction.
- Oublier le
deny anyimplicite d’une ACL — et couper la production. - Chevaucher les sous-réseaux en VPN site-à-site — deux sites en
192.168.1.0/24ne se joindront jamais. C’est le premier réflexe à avoir avant même de monter le tunnel. Et c’est aussi pour ça que192.168.1.0/24en infra perso est un mauvais choix : c’est le réseau par défaut de la moitié des box de France, et vous le rencontrerez chez tous vos futurs clients.
En pratique : ce que je retiens
- Une IP sans masque n’est pas une adresse. Le masque est la moitié de l’information.
- Longest prefix match. La route la plus spécifique gagne, toujours, sans exception. La spécificité est la priorité.
- Le TTL est un compteur de sauts, pas un temps. Il empêche les boucles, il trahit l’OS, et il fait tourner
traceroute. - Bloquer tout ICMP est une faute. Types 3 et 11 doivent passer. Ce sont les messages d’erreur du réseau.
- Le NAT n’est pas une sécurité. Comme le filtrage MAC en couche 2 : un mécanisme de fonctionnement pris pour une frontière.
- Le retour, toujours le retour.
tcpdumpsur la cible coupe le problème en deux en dix secondes. ip route getrépond en une seconde à ce que la lecture d’une table de routage met dix minutes à trancher.- La séquence de ping (loopback → interface → passerelle → 8.8.8.8 → nom) isole 90 % des pannes sans réfléchir.
La couche 3 sait acheminer un paquet de bout en bout, à travers le monde. Mais elle ne garantit rien : ni l’arrivée, ni l’ordre, ni l’unicité. Un paquet IP peut être perdu, dupliqué, ou arriver dans le désordre — et IP s’en moque éperdument. Elle fait au mieux, elle ne promet rien.
Alors comment un fichier de 4 Go arrive-t-il intact ?
C’est la couche 4. Prochain article.