OVH Cloud OVH Cloud

linux en réseau : routage

2 réponses
Avatar
Soon
Bonjour,

J'ai quelques notion de réseau qui m'échappe sous linux.

Je suis en train de monter une architecture de test (avec UML). Mon
architecture est la suivante :

Host_Res1 Res 1 Gateway Res2 Host_Res2
eth0:10.0.0.100 ------- eth0:10.0.0.1
eth1:10.0.1.1 -------- eth0:10.0.1.100

Je configure comme suit:

Sur Host_Res1:
ifconfig eth0 10.0.0.100 netmask 255.255.255.0 up
route add default gw 10.0.0.1

Sur Host_Res2
ifconfig eth0 10.0.1.100 netmask 255.255.255.0 up
route add default gw 10.0.1.1

Sur Gateway
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
ifconfig eth1 10.0.1.1 netmask 255.255.255.0 up

Lorsque je pingue Gateway depuis Host_Res(1 ou 2)echo "1" >
Ca marche -> normal.

Lorsque je pingue Host_Res1 sur Host_Res2 (et inversement)
Ca ne marche pas -> normal aussi

Si j'autorise IP_Forward sur Gateway
/proc/sys/net/ipv4/ip_forward

Alors lorsque je pingue Host_Res1 sur Host_Res2 (et inversement)
Ca marche ! -> Pour moi, c'est pas normal.

Car cela veux dire que ma Gateway route les adresses d'un réseau à
l'autre. Or ce sont des adresses privés et un routeur n'est pas censé
router les adresses privées. Est-ce que je me trompe ?

En fait je voudrais que ma machine se comporte comme un vrai routeur,
c'est à dire qu'elle ne route pas les adresses privées. De cette manière
la seule solution pour passer d'un réseau à l'autre serait de faire de
la translation d'adresse (MASQUERADE avec NetFilter). Or c'est
exactement c'est que je voudrais pour faire mes tests.

Merci d'avance pour toutes vos lumières.

-- Soon

2 réponses

Avatar
Nicolas George
Soon wrote in message <drnsh5$sf8$:
Or ce sont des adresses privés et un routeur n'est pas censé
router les adresses privées. Est-ce que je me trompe ?


Tu te trompes. Il n'y a pas de notion d'adresse privée au niveau du
protocole, c'est uniquement une convention : les autorités du réseau te
garantissent que les adresses en 10.*.*.* et en 192.168.*.* ne seront jamais
attribuées à aucun fournisseur d'accsè, et recommandent virement aux
fournisseurs d'accès de ne pas en faire usage eux-mêmes, ce qui permet à
chaque particulier ou organisme d'en faire un usage privé sans entrer en
conflit avec un vrai site. Mais ça ne va pas plus loin. Les adresses
concernées n'ont aucun traitement particulier. Ce n'est qu'au niveau des
routeurs d'opérateurs réseau qu'elles n'ont simplement aucune route
attribuée.

Tu peux d'ailleurs remarquer qu'un paquet adressé à une adresse privée dans
un réseau à adresses publiques fait souvent un certain trajet avant d'être
perdu.

Avatar
Pascal Hambourg
Salut,


Je suis en train de monter une architecture de test (avec UML). Mon
architecture est la suivante :

Host_Res1 Res 1 Gateway Res2 Host_Res2
eth0:10.0.0.100 ------- eth0:10.0.0.1
eth1:10.0.1.1 -------- eth0:10.0.1.100

Je configure comme suit:

Sur Host_Res1:
ifconfig eth0 10.0.0.100 netmask 255.255.255.0 up
route add default gw 10.0.0.1

Sur Host_Res2
ifconfig eth0 10.0.1.100 netmask 255.255.255.0 up
route add default gw 10.0.1.1

Sur Gateway
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
ifconfig eth1 10.0.1.1 netmask 255.255.255.0 up


[Note HS] Attention avec ifconfig, j'ai observé que l'adresse de
broadcast implicite qu'il crée si elle n'est pas spécifiée est
incorrecte quand le masque spécifié ne correspond pas à la classe
historique de l'adresse : ifconfig ignore le masque spécifié et applique
le masque implicite de la classe de l'adresse pour déterminer l'adresse
de broadcast. Dans ce cas il faut donc spécifier l'adresse de broadcast
explicitement.

Dans ton cas, historiquement les adresses 10.x.y.z appartiennent à une
ancienne classe A dont le masque implicite est 255.0.0.0. Si tu ne
spécifies pas l'adresse de broadcast, ifconfig risque de prendre
10.255.255.255 au lieu de 10.x.y.255 qui est la valeur correcte pour un
masque 255.255.255.0.

Lorsque je pingue Gateway depuis Host_Res(1 ou 2)echo "1" >
Ca marche -> normal.

Lorsque je pingue Host_Res1 sur Host_Res2 (et inversement)
Ca ne marche pas -> normal aussi

Si j'autorise IP_Forward sur Gateway
/proc/sys/net/ipv4/ip_forward

Alors lorsque je pingue Host_Res1 sur Host_Res2 (et inversement)
Ca marche ! -> Pour moi, c'est pas normal.

Car cela veux dire que ma Gateway route les adresses d'un réseau à
l'autre. Or ce sont des adresses privés et un routeur n'est pas censé
router les adresses privées. Est-ce que je me trompe ?


Oui, tu te trompes.
Aucune interdiction de ce type ne figure pas dans RFC1812 qui définit
les exigences pour les routeurs IPv4. Contrairement aux adresses non
routables comme par exemple les adresses "link local" (169.254.0.0/16)
qui ne doivent jamais traverser un routeur, les adresses privées
définies par RFC1918 sont parfaitement routables au sein d'un réseau
privé. On ne doit pas les rencontrer sur l'internet public, c'est tout.
L'obligation de ne pas router les adresses privées qui figure dans
RFC1918 concerne essentiellement les routeurs qui sont à la frontière
d'un réseau relié à l'internet public. Ceux-ci doivent aussi rejeter les
annonces de destinations privées s'ils gèrent des protocoles de routage.
En revanche les routeurs internes d'un réseau privé en adressage privé
doivent évidemment router les adresses privées utilisées, sinon le
réseau ne fonctionnera pas.

En fait je voudrais que ma machine se comporte comme un vrai routeur,
c'est à dire qu'elle ne route pas les adresses privées. De cette manière
la seule solution pour passer d'un réseau à l'autre serait de faire de
la translation d'adresse (MASQUERADE avec NetFilter).


Un routeur qui fait du masquerading est bien obligé de router les
adresses privées du réseau qu'il masque afin que les paquets retour
"dé-masqués" atteignent leur destination ! Dans le cas de Linux au
moins, le masquage de l'adresse source des paquets aller a lieu après
leur routage (donc une fois que l'interface de sortie est connue), et
symétriquement le dé-masquage de l'adresse destination des paquets
retour a lieu avant leur routage.

Si tu veux explicitement que ton routeur ne route pas certaines
destinations, tu peux créer des routes "négatives" :

$ route add -net 10.0.0.0/8 reject

Mais cela concernera tous les paquets vus par la passerelle, émis, reçus
ou transmis. Et une route positive vers une destination incluse aura la
priorité, cette destination sera routée.

Pour l'empêcher de router des adresses privées entre deux réseaux, je ne
vois pas d'autre solution que de rejeter ces adresses avec des règles
iptables dans la chaîne FORWARD :

$ iptables -A FORWARD -d 10.0.0.0/8 -j REJECT --reject-with
icmp-net-unreachable