9.7. Réseaux privés et NAT¶
IPv4 a été conçu avec quatre milliards d’adresses, ce qui semblait suffisant à l’époque. Ça ne l’est pas. Chaque maison, bureau et usine connectés à internet a besoin de son propre bloc d’adresses pour ses appareils internes, et ajouter à cela toutes les caméras, téléphones et appareils ménagers du monde ne laisse pas quatre milliards d’adresses disponibles.
La solution adoptée par internet, ce sont les réseaux privés : la plupart des appareils d’un réseau local utilisent des adresses qui ne sont pas uniques à l’échelle mondiale, mais seulement à l’intérieur de ce réseau, et un seul appareil situé à la frontière traduit entre les deux mondes. La caméra, presque toujours, se trouve sur l’un de ces réseaux privés.
9.7.1. Les plages d’adresses privées¶
Trois plages IPv4 sont réservées comme non routables sur l’internet public. Tout réseau local est libre d’utiliser des adresses comprises dans ces plages sans se coordonner avec qui que ce soit, car aucun routeur extérieur au réseau local ne tentera jamais de leur acheminer du trafic :
10.0.0.0–10.255.255.255(16 millions d’adresses ; courant dans les grands réseaux d’entreprise).172.16.0.0–172.31.255.255(environ un million d’adresses ; moins courant en pratique).192.168.0.0–192.168.255.255(65 mille adresses ; la valeur par défaut de presque tous les routeurs domestiques).
Sur un réseau domestique typique, la caméra et l’ordinateur portable qui communique avec elle se trouvent tous deux sur des adresses 192.168.x.x, car c’est la plage que le routeur domestique choisit pour le réseau qu’il héberge.
9.7.1.1. Comment le masque de réseau est utilisé¶
La page Adresses IP a présenté la notation /24. Si elle importe ici, c’est parce que le masque de réseau est ce que chaque appareil utilise pour décider où un paquet doit aller ensuite. Chaque fois que la caméra envoie un paquet, elle applique son propre masque de réseau à l’adresse de destination et examine le résultat :
Si la destination partage les bits de réseau avec la propre adresse de la caméra, la destination se trouve sur le même réseau local. La caméra lui envoie le paquet directement.
Si la destination ne partage pas les bits de réseau, elle doit se trouver sur un autre réseau. La caméra envoie le paquet à sa passerelle par défaut (le routeur configuré automatiquement à l’établissement du lien) et laisse la passerelle gérer le reste.
Ce simple test – « partageons-nous des bits de réseau ? » – est la raison d’être du masque de réseau. C’est aussi pourquoi les réseaux domestiques utilisent /24 par défaut : une limite de 254 appareils convient confortablement à un foyer et garde le réseau simple.
9.7.2. Traduction d’adresses réseau (NAT)¶
Une caméra sur 192.168.1.50 ne peut pas simplement envoyer un paquet à un serveur sur l’internet public – l’internet public n’achemine pas vers 192.168.x.x. Le routeur domestique résout ce problème avec la traduction d’adresses réseau, ou NAT, et il le fait de manière transparente.
Le NAT réécrit l’adresse source des paquets sortants avec l’adresse publique du routeur, et inverse la réécriture sur les réponses entrantes, de sorte que les appareils privés semblent partager une seule adresse publique.¶
Le routeur a deux adresses : une adresse privée sur le réseau local (généralement 192.168.1.1) et une adresse publique attribuée par le fournisseur d’accès à internet. Lorsque la caméra envoie un paquet à une adresse publique, le routeur
enregistre l’adresse privée + le port de la caméra et les associe à un port sortant temporaire qui lui est propre ;
réécrit l’adresse source du paquet avec sa propre adresse publique (et le port source avec le port sortant choisi) ;
envoie le paquet réécrit du côté public.
Lorsque la réponse revient adressée à l’adresse publique + le port du routeur, le routeur recherche l’association, réécrit la destination en lui redonnant l’adresse privée + le port de la caméra, et la livre du côté local. La caméra ne sait jamais que la réécriture a eu lieu ; le serveur ne connaît jamais la source d’origine.
C’est le NAT qui rend les réseaux domestiques pratiques. Il a aussi deux conséquences qu’il vaut la peine de connaître.
9.7.3. Ce que le NAT change¶
Le trafic sortant est facile. Une caméra sur un réseau privé peut communiquer vers l’extérieur librement. Chaque fois qu’elle ouvre une connexion TCP ou envoie un paquet UDP à un serveur distant, le NAT met en place l’association automatiquement. La plupart des applications de caméra fonctionnent dans ce sens : capturer une image, l’envoyer à un serveur quelque part, recevoir la réponse.
Le trafic entrant est difficile. Un appareil sur l’internet public ne peut pas se connecter directement à une caméra sur un réseau privé. Il n’y a aucune association que le routeur puisse rechercher lorsqu’un paquet non sollicité arrive à son adresse publique, de sorte que le paquet n’a nulle part où aller. Le routeur soit l’abandonne, soit le transmet à un service s’exécutant sur le routeur lui-même.
Trois solutions de contournement pour le cas entrant sont courantes, dans un ordre à peu près croissant de praticité :
Redirection de port. Configurer le routeur pour diriger tous les paquets entrants sur un port public choisi vers un appareil privé spécifique. Nécessite un accès administrateur au routeur ; fragile lorsque l’adresse publique du routeur change.
VPN. Exécuter un réseau privé virtuel qui place la caméra sur le même réseau logique que celui qui doit l’atteindre. Lourd ; hors de portée pour la plupart des déploiements de caméra.
Connexion initiée vers l’extérieur. La caméra se connecte vers un serveur connu quelque part sur l’internet public et maintient cette connexion ouverte ; le serveur utilise la connexion existante pour renvoyer des messages. C’est ainsi que fonctionnent les notifications push et la plupart des protocoles d’appareils connectés au cloud, et c’est le modèle qu’adoptent la plupart des applications de caméra.
Le NAT est invisible pour le code Python sur la caméra. Le script communique simplement avec la destination dont il a besoin ; le routeur gère la traduction en coulisses. Mais le sens de la connexion a son importance, et le NAT est la raison pour laquelle « la caméra contacte un serveur cloud » est une forme bien plus facile que « un serveur cloud contacte la caméra ».