J'ai décidé d'écrire cet article afin de vous faire partager une découverte pour moi en matière de réseau (et qui d’ailleurs est peut-être de l’acquis pour vous). C'est ça qui est génial dans l'univers de l'informatique c'est que l'on apprend chaque jour.

Je tiens à remercier kankan sur le chan IRC de FDN pour m'avoir apporté ses lumières.

Cas 1 :

Prenez deux machines sous GNU/Linux branchées sur le même commutateur. Affectez-les chacune dans un sous-réseau IPv4 différent. Et bien je viens d’apprendre qu’elles peuvent communiquer entre elles.

PC 1 : 192.168.1.10/24 + l’ajout de la route suivante « route add -host 192.168.2.10 dev eth0 » toujours sur le PC1
PC 2 : 192.168.2.10/24 + l’ajout de la route suivante « route add -host 192.168.1.10 dev eth0 » toujours sur le PC2

Vous avez maintenant deux machines connectées sur le même commutateur dans deux sous-réseaux IP différents qui communiquent. Et pas besoin d’activer le routage avec la commande « echo 01 > /proc/sys/net/ipv4/ip_forward ».

 

Cas 2 :

Prenons maintenant une machine sous GNU/Linux sur un LAN, un routeur sous OpenBSD qui route les paquets IP du LAN vers le FAI et Internet.

PC 1 : 172.16.100.1/24 + l’ajout des routes suivantes « route add -host 10.0.0.1 dev eth0 » + « route add default gw 10.0.0.1 »

Routeur : 10.0.0.1/24 + l’ajout de la route « route add -host 172.16.110.1 -link -iface re0 » (on admet que la route par défaut est configurée, elle renvoie vers le FAI)
Sans oublier la règle de NAT surchargé « match out on $ext_if from 172.16.100.0/24 nat-to $ext_if »

Et bien le PC1 que se trouve sur le LAN peut maintenant envoyer un icmp écho vers une IP publique alors que l’adresse de sa passerelle n’est pas dans le même sous-réseau.

 

Conclusion :

Je croyais naïvement que l’adresse IPv4 de la passerelle d’une machine devait obligatoirement être dans le même sous-réseau que cette dernière. Je croyais également que deux machines connectées à un switch mais sur deux sous-réseaux IPv4 différents ne pouvaient pas communiquer. Je me trompais ! Étant habitué depuis toujours (pendant mes études, dans mon travail..) à ce type topologie, je n'envisageai pas d'autres possibilités.

Concernant le cas 1, la conclusion est simple (c’est d’ailleurs la même pour le cas 2) : avant l’ajout des routes les 2 PC ne peuvent communiquer entre eux car ils ne disposent d’aucune passerelle et d’aucune route, on a donc un Network Unreachable. Lorsque que l’on tape la commande route add sur le PC1 , on ajoute une route qui dit à la machine quand tu veux contacter 192.168.2.10, tu fais sortir le paquet par eth0 de manière forcer. On a donc bien du routage mais interne à la machine sans passer par un quelconque routeur.

On pourrait donc dans l’absolu imaginer une interconnexion de routeurs ayant des IP sur des sous-réseaux différents et qui seraient quand-même capables de router les paquets par cette interco (encore plus vrai dans le cas d’une liaison point à point avec GRE, PPP, ou VPN).

 Il me reste à approfondir le sujet notamment avec des routeurs Cisco car mon test se limite pour l’instant à GNU/Linux et OpenBSD.