Elouan

Adresses IP, masques et sous-réseaux

Ce qu'est vraiment une adresse IPv4, comment un masque découpe un réseau, et les plages à reconnaître au premier coup d'œil.

Elouan

Série Les fondations du réseau · article 1 sur 7
  1. Adresses IP, masques et sous-réseaux
  2. Le modèle OSI et la pile TCP/IP
  3. Ports et protocoles courants
  4. TCP et UDP
  5. Le DNS, de la requête à l'attaque
  6. ARP, DHCP, NAT et VLAN : la plomberie du réseau local
  7. HTTP, HTTPS et TLS

Toute investigation réseau commence par une question simple : d’où vient ce trafic, et où va-t-il ? Pour y répondre, il faut lire une adresse IP aussi naturellement qu’un numéro de téléphone. C’est l’objet de ce premier article.

Une adresse IP, c’est un nombre

Une adresse IPv4 n’est rien d’autre qu’un nombre de 32 bits. Pour que ce soit lisible, on le découpe en 4 paquets de 8 bits (des octets), et on écrit chaque octet en décimal, séparé par des points :

11000000.10101000.00000001.00001010
   192  .  168   .   1    .   10

Chaque octet va donc de 0 à 255 (2^8 = 256 valeurs). Une adresse comme 192.168.1.300 est invalide : 300 ne tient pas sur 8 bits.

Avec 32 bits, on peut écrire environ 4,3 milliards d’adresses. C’est trop peu pour la planète entière, ce qui explique deux choses que tu croiseras partout : les adresses privées combinées au NAT, et l’arrivée d’IPv6.

Le masque : où s’arrête le réseau

Une adresse IP se lit en deux parties :

  • la partie réseau, commune à toutes les machines d’un même réseau ;
  • la partie hôte, propre à chaque machine.

Le masque de sous-réseau dit où se trouve la frontière. On l’écrit soit en décimal (255.255.255.0), soit en notation CIDR : /24 signifie « les 24 premiers bits sont la partie réseau ».

Notation CIDRMasque décimalAdressesHôtes utilisables
/8255.0.0.016 777 21616 777 214
/16255.255.0.065 53665 534
/24255.255.255.0256254
/25255.255.255.128128126
/26255.255.255.1926462
/27255.255.255.2243230
/30255.255.255.25242
/32255.255.255.25511 (une seule machine)

La formule à connaître : nombre d’hôtes = 2^(32 − préfixe) − 2.

On retire 2 parce que, dans chaque réseau, deux adresses sont réservées :

  • la première est l’adresse du réseau lui-même (ex. 192.168.1.0) ;
  • la dernière est l’adresse de broadcast, qui s’adresse à toutes les machines du réseau (ex. 192.168.1.255).

Calculer un sous-réseau de tête

Le poste 192.168.1.77/26. Un /26 fait des blocs de 64 adresses : 0–63, 64–127, 128–191, 192–255. 77 tombe dans le bloc 64–127. Le réseau est donc 192.168.1.64, le broadcast 192.168.1.127, et les hôtes vont de .65 à .126.

Même réseau ou pas ?

Quand une machine veut parler à une autre, elle se pose une seule question : est-ce que la destination est dans mon réseau ? Pour le savoir, elle applique son masque (un ET logique bit à bit) à sa propre adresse et à celle de la destination.

  • Si le résultat est le même, elle envoie directement le paquet sur le réseau local (après une résolution ARP, voir l’article sur ARP).
  • Sinon, elle envoie le paquet à sa passerelle par défaut, c’est-à-dire au routeur.

C’est pour ça qu’un masque mal configuré provoque des pannes étranges : la machine croit qu’une destination est locale alors qu’elle ne l’est pas, ou l’inverse.

Les plages à reconnaître au premier coup d’œil

Qu’on administre un réseau, qu’on configure un pare-feu ou qu’on lise des journaux, il faut savoir d’un coup d’œil si une adresse est interne, externe ou spéciale. Ces plages sont à connaître par cœur.

PlageUsageÀ retenir
10.0.0.0/8Privée (RFC 1918)Grands réseaux d’entreprise
172.16.0.0/12Privée (RFC 1918)De 172.16.0.0 à 172.31.255.255 seulement
192.168.0.0/16Privée (RFC 1918)Box, petits réseaux
127.0.0.0/8Boucle locale (loopback)La machine se parle à elle-même
169.254.0.0/16Lien local (APIPA)Pas de réponse du DHCP
100.64.0.0/10NAT de l’opérateur (CGNAT)Adresse partagée chez un FAI
224.0.0.0/4MulticastUn émetteur, plusieurs destinataires choisis
0.0.0.0Adresse non spécifiéeSelon le contexte : « toutes les interfaces » ou « pas encore d’adresse »
255.255.255.255Broadcast limitéTout le réseau local

Piège classique

172.16.0.0/12 ne couvre pas toutes les adresses qui commencent par 172. Elle s’arrête à 172.31.255.255. Une adresse en 172.32.x.x ou 172.15.x.x est publique.

Pourquoi les adresses privées comptent en investigation

Les adresses privées ne sont pas routées sur Internet. Un même 192.168.1.10 existe dans des millions de foyers. Conséquences pratiques :

  • une adresse privée dans un journal désigne forcément une machine interne (ou un VPN, un conteneur, une VM) ;
  • pour savoir quelle machine se cache derrière, il faut croiser avec le DHCP, l’inventaire ou l’EDR, parce qu’une adresse peut changer de propriétaire ;
  • une connexion depuis Internet vers ton réseau arrive avec l’adresse publique de ton pare-feu ou de ton NAT, jamais directement sur l’adresse privée.

0.0.0.0 et 127.0.0.1 : la question des services exposés

Quand tu regardes quels ports écoutent sur une machine (netstat -ano sous Windows, ss -tulpn sous Linux), regarde surtout l’adresse d’écoute :

TCP  127.0.0.1:5432   0.0.0.0:0   LISTENING   → base de données joignable en local uniquement
TCP  0.0.0.0:5432     0.0.0.0:0   LISTENING   → joignable depuis toutes les interfaces, donc le réseau

0.0.0.0 en écoute veut dire toutes les interfaces. C’est souvent ce qui transforme un service de développement en porte ouverte.

Un mot sur IPv6

IPv6 utilise des adresses de 128 bits, écrites en 8 groupes hexadécimaux séparés par :. On peut abréger une suite de groupes nuls par ::, une seule fois par adresse.

2001:0db8:0000:0000:0000:ff00:0042:8329  →  2001:db8::ff00:42:8329
IPv6Équivalent IPv4 / rôle
::1Boucle locale (comme 127.0.0.1)
fe80::/10Lien local (le rôle d’APIPA, mais toujours présent)
fc00::/7Adresses locales uniques, l’équivalent des plages privées
::Adresse non spécifiée (comme 0.0.0.0)

IPv6 est souvent oublié en défense

Windows active IPv6 par défaut et le préfère à IPv4. Une règle de pare-feu ou une supervision qui ne regarde qu’IPv4 laisse un angle mort. Certaines attaques en interne, comme l’abus de DHCPv6 avec l’outil mitm6, exploitent justement cet oubli.

Dans la suite de la série, tu vas voir comment ces adresses sont transportées couche par couche (le modèle OSI), puis comment les ports permettent de savoir quel service est contacté.

L'essentiel

  • Une adresse IPv4 fait 32 bits, écrits en 4 octets décimaux (0 à 255). Une adresse IPv6 fait 128 bits, écrits en hexadécimal.
  • Le masque sépare la partie réseau de la partie hôte. /24 = 24 bits de réseau = 255.255.255.0.
  • Nombre d'hôtes utilisables = 2^(32 − préfixe) − 2 (on retire l'adresse de réseau et le broadcast). Un /24 donne 254 hôtes.
  • Plages privées (RFC 1918) : 10.0.0.0/8, 172.16.0.0/12 (172.16 à 172.31), 192.168.0.0/16.
  • 127.0.0.0/8 = boucle locale, 169.254.0.0/16 = APIPA (pas de réponse DHCP), 0.0.0.0 = « toutes les interfaces » ou « aucune adresse ».
  • Deux machines sont sur le même réseau si (adresse ET masque) donne le même résultat. Sinon, le trafic passe par la passerelle.

Idées reçues

Combien d'hôtes peut-on adresser dans un /24 ?

L'erreur courante. Répondre 256.

En réalité. 254. Il y a 256 adresses, mais la première (adresse de réseau, ex. `192.168.1.0`) et la dernière (broadcast, ex. `192.168.1.255`) ne sont pas attribuables à une machine.

`172.32.10.5` est-elle une adresse privée ?

L'erreur courante. Dire oui parce qu'elle commence par 172.

En réalité. Non. La plage privée est `172.16.0.0/12`, c'est-à-dire de `172.16.0.0` à `172.31.255.255`. `172.32.x.x` est une adresse publique.

Un poste a l'adresse 169.254.12.7. Qu'est-ce que ça t'apprend ?

L'erreur courante. Penser à une adresse publique ou à une configuration manuelle.

En réalité. C'est une adresse APIPA (lien local, `169.254.0.0/16`) que Windows s'attribue tout seul quand il n'obtient pas de réponse DHCP. Le poste ne peut pas sortir de son segment : il faut regarder le DHCP, le câble, le VLAN ou le Wi-Fi.

Que signifie 0.0.0.0 dans la configuration d'un service qui écoute ?

L'erreur courante. Dire que le service n'écoute nulle part.

En réalité. Il écoute sur toutes les interfaces de la machine, donc potentiellement depuis le réseau. À l'inverse, `127.0.0.1` ne l'expose qu'en local. C'est une question fréquente quand on analyse un service exposé par erreur.

Pourquoi un serveur en 10.0.0.5 ne peut-il pas être joint directement depuis Internet ?

L'erreur courante. Parler uniquement du pare-feu.

En réalité. Parce que les adresses RFC 1918 ne sont pas routées sur Internet : aucun routeur public ne sait où les envoyer. Il faut une traduction d'adresse (NAT) ou un reverse proxy côté réseau de l'entreprise. Le pare-feu vient en plus.

Tester ses connaissances

Références

  • Computer Networking : A Top-Down ApproachJames F. Kurose, Keith W. Ross · Pearson
  • TCP/IP Illustrated, Volume 1 : The Protocols (2e éd.)Kevin R. Fall, W. Richard Stevens · Addison-Wesley

Textes de référence en ligne