Logo English Web Page
Accueil Association BSD Linux Dev Reseau Infologisme Mac OSX
tl tr
Sujet Adresse IP Date 28-04-2013
Titre Routage IP - On construit des routes ! Section Dev Reseau
Article

Outils disponible pour TCP/IP

Lorsqu‘on installe le protocole TCP/IP sur une Station de travail ou un Serveur de base Unix comme FreeBSD et Mac OSX ou bien Linux, des outils permettent de tracer et de vérifier la configuration TCP/IP sont les suivants :

arp
Visualiser avec ARP une interface Ethernet de l‘ordinateur et détecter les entrées invalides. Il existe un utilitaire TCP/IP qui fournit la correspondance entre l‘adresse IP d‘une station (ou tout autre composant réseau TCP/IP) et son adresse MAC (adresse physique), c‘est arp. En général, on utilise arp -a qui fournit la liste de composant réseau vu sur le sous-réseau courant.

dig
Cet outil permet d‘effectuer des recherches dans toutes les pages du site de l‘UQAM accessibles au public. Il s‘agit d‘une version traduite et adaptée par le Registrariat, du moteur de recherche ht://Dig développé à l‘Université d‘état de San Diego.

host
Montre ordinateur ou nœud IP et leur configuration

hostname
Afficher le nom de l‘ordinateur ou nœud IP

netstat
Afficher l‘état des statistiques du protocole et l‘état des connexions TCP/IP

nslookup
Vérifier les enregistrements, les alias, les host du domaine, les services des host du domaine et les informations du système d‘exploitation en interrogeant les Serveurs de nom de domaine internet.

ping
Vérifie la bonne configuration TCP/IP et s‘assurer qu‘un ordinateur TCP/IP distant et bien disponible.

route
Affiche la table de routage IP et ajouter ou supprimer des itinéraires IP

traceroute
Vérifie l‘itinéraire vers un système distant.

Prendre un terminal et saisir par exemple arp -h pour avoir la syntaxe complète puis Entrer.
Avec FreeBSD ou Mac OSX on obtient :

production:~ administrateur$ arp -h
arp: illegal option -- h
usage:
arp [-n] [-i interface] hostname
arp [-n] [-i interface] -a
arp -d hostname [pub] [ifscope interface]
arp -d [-i interface] -a
arp -s hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
arp -S hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
arp -f filename
production:~ administrateur$


Prendre un terminal et saisir route -h pour avoir la syntaxe complète puis Entrer.
Avec FreeBSD ou Mac OSX on obtient :

production:~ administrateur$ route -h
route: illegal option -- h
usage: route [-dnqtv] command [[modifiers] args]
production:~ administrateur$


Prendre un terminal et saisir route -h pour avoir la syntaxe complète puis Entrer.
Avec Linux Fedora Fcx on obtient :

root@production ~]# route -h

Syntaxe: route [-nNvee] [-FC] [<AF>] Liste les tables de routage noyau
         route [-v] [-FC] {add|del|flush} ... Modifie la table de routage pour AF.

         route {-h|--help} [<AF>] Utilisation détaillée pour l'AF spécifié.
         route {-V|--version} Affiche la version/auteur et termine.

        -v, --verbose            mode verbeux
        -n, --numeric            don't resolve names
        -e, --extend             display other/more information
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              affiche le cache de routage au lieu de FIB

  <AF>=Use '-A <af>' or '--<af>'; default: inet
  Liste les familles d'adresses possibles (supportant le routage):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
    x25 (CCITT X.25)
[root@production ~]#

Principe du routage en TCP/IP

Pour que deux hosts TCP/IP puissent échanger des trames (ou datagrammes), chacun doit connaître une route allant de l‘un à l‘autre, ou utiliser des passerelles par défaut qui connaissent cette route.

Plusieurs problèmes se posent régulièrement pour la connexion de deux hosts :
Les machines ne sont pas accessibles physiquement (réseaux physiques différents).
Les machines font partie du même réseau physique mais sont isolées par une classe d‘adresse IP différente.
Les machines font partie du même réseau physique mais sont isolées par Firewall.
Les machines n‘arrivent pas à faire la correspondance entre leur nom et leur adresse IP.
Les machines connaissent leur nom et adresse IP mais n‘arrivent pas à se connecter.
Dans tous les cas, la première chose à tester est que les hosts se voient bien en utilisant la commande ping. Ensuite on analyse, selon le cas listé plus haut où est situé la problématique :
Dans ce cas, il faut bien-sûr connecter physiquement les deux réseaux en ajoutant un Routeur et une passerelle (ordinateur configuré en passerelle ou Routeur) ou tout appareil permettant d‘assurer la continuité physique du réseau global.
Dans le cas où les machines sont physiquement sur le même réseau mais qu‘elles sont isolées logiquement par une classe d‘adresse différente ou un Firewall, il faut ajouter des routes logiques pour assurer le routage des datagrammes d‘un sous-réseau logique à un autre sous-réseau. Il faut alors paramètrer le Firewall comment router les datagrammes en ajoutant manuellement des routes (voir table de routage IP). En effet, même si le Firewall voit les deux hosts sur le réseau physique, ce n‘est pas pour cela qu‘il assurera le routage des trames.
Il est facile de vérifier la résolution de l‘adresse IP du nom de host, en effectuant un ping sur l‘adresse IP du nom de host. Si cette commande échoue alors que la commande ping d‘adresse IP de cet host aboutit, c‘est un problème de résolution de nom de host. Il faut alors vérifier :
Si les host sont configurés pour se servir d‘un Serveur DNS pour leur résolution de nom, vérifier la liste des noms de hosts déclarés dans le Serveur DNS auquel ils se réfèrent. Il est probable que l‘host auquel on cherche à se connecter n‘a pas été déclaré dans le Serveur DNS.
Si les host ne se réfèrent pas à un Serveur DNS, il faut alors spécifier à chacun d‘eux la correspondance entre nom de host et adresse IP dans un fichier hosts, qui doit alors être présent sur chaque host.
Si la résolution fonctionne, vérifier que les deux host voient bien leur passerelle par défaut (un petit ping suffira) et que cette passerelle est bien celle sensée router les datagrammes. Si tel est le cas et que la connexion est impossible entre les deux hosts, c‘est que la passerelle ne route pas les datagrammes. Pour cela, vérifier les routes de la passerelle et éventuellement ajouter la route pour spécifier la manière de router les datagrammes entre les deux hosts (rare) ou plutôt les deux sous-réseaux logiques. Cette route est à ajouter à la table de routage de la passerelle (c‘est elle qui s‘occupe du routage des paquets) : le Firewall par exemple ou le Routeur.
On peut dailleurs accéder au routage de toute station ou Serveur ayant le protocole TCP/IP.

Pour afficher la table de routage IP d‘un Unix FreeBSD ou Mac OSX, ouvrir un terminal et saisir la commande netsat -nr puis Entrer. La commande est identique pour les deux Systèmes d‘exploitation, ainsi que les résultats suivants :
production# netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif  Expire
default 172.16.1.248 UGS 0 139 fxp0
127.0.0.1 127.0.0.1 UH 0 587 lo0
172.16.1.0/24 link#2 UC 0 0 fxp0
172.16.1.1 00:02:b2:ca:dc:64 UHLW 1 48 lo0
172.16.1.10/32 link#2 UC 0 0 fxp0
192.168.16.0/24 link#1 UC 0 0 bge0
192.168.16.10/32 link#1 UC 0 0 bge0
192.168.16.80/32 link#1 UC 0 0 bge0
Internet6:
Destination Gateway Flags Netif  Expire
::1 ::1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 U lo0
fe80::1%lo0 link#6 UHL lo0
ff01:6::/32 fe80::1%lo0 UC lo0
ff02::%lo0/32 fe80::1%lo0 UC lo0
production#
Remarque : Avec Linux Fedora ouvrir un terminal et saisir la commande route puis Entrer, on obtient :
[root@serveur root]# route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.0.0
* 255.255.255.0
U 0 0 0 eth0
172.16.1.0
* 255.255.255.0
U 0 0 0 eth0
192.0.0.0
* 255.255.0.0
U 0 0 0 eth1
169.254.0.0
* 255.255.0.0
U 0 0 0 eth1
127.0.0.0
* 255.0.0.0
U 0 0 0 lo
default
192.0.1.2 0.0.0.0
UG 0 0 0 eth1
[root@serveur root]#
Interprétation :

Destination ou Network adress

Ce champ correspond à l‘adresse de destination et peut contenir :
Une adresse machine
Une adresse de sous-réseau
Une adresse de réseau
Une passerelle par défaut
Genmask ou Netmask

Ce champ définit la portion d‘adresse réseau qui correspond à l‘itinéraire. Le masque étant codé en binaire, un 1 spécifie que l‘adresse doit correspondre (un 0 exprime qu‘il ne requiert pas nécessaire une correspondance d‘adresse). Par exemple, 255.255.255.255 correspond à un ordinateur, car tous les bits de l‘adresse doivent correspondre. Ce qui veut dire que l‘adresse de destination du paquet à router doit correspondre exactement à l‘adresse réseau pour que cet itinéraire soit utilisé.

Autre exemple, une adresse de réseau 172.16.8.0 à un masque de réseau de 255.255.192.0. Ce masque précise que les deux premiers octets de l‘adresse doivent correspondre exactement. En binaire, 192 correspond à 0x11000000, ce qui veut dire que les deux premiers bits du troisième octet doivent correspondre aussi. C‘est un masque de réseau pour un itinéraire de sous-réseau.

Passerelle ou Gateway adress

Ce champ indique ou le paquet doit être envoyé. Cela peut correspondre à une carte réseau locale ou à un Routeur du sous-réseau local.

Iface ou Interface (loopback)

Ce champ correspond à l‘adresse de la carte réseau qui émet le paquet. 127.0.0.1 est l‘adresse de rebouclage logiciel.

Metric

Ce champ correspond au nombre de nœuds à franchir pour atteindre la destination. Tout élément d‘un réseau local est un nœud et chaque Routeur traversé est un nœud supplémentaire. Ce champ permet de déterminer le meilleur itinéraire.

Ajouter une route à la table de routage IP

Un routeur est un système qui transmet les paquets d‘une interface à une autre. Une dissension de Linux avec FreeBSD est le fonctionnement de la Pile TCP/IP implémentée de manière plus pertinente et élaborée, qui sait agir comme un Routeur si ce besoin est requis, ci-dessous la syntaxe correspondante du fichier /etc/rc.conf :

gateway_enable="YES"        # Set to YES if this host will be a gateway

Avec FreeBSD pour ajouter une route dans la table de routage d‘un Serveur :

# route add -net 192.168.2.0/24 192.168.1.2

Maintenant notre Routeur FreeBSD peut joindre n‘importe quelle machine du réseau 192.168.2.0/24.

Dans cet exemple, une information de routage ne sera pas conservée si vous redémarrez votre Serveur FreeBSD. L‘addition d‘une route statique doit se faire dans le fichier /etc/rc.conf :

static_routes="net0 net2"
route_net0="-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.2.0/24 192.168.2.1"


Comme on le constate, nous pouvons avoir plus d‘une chaîne descriptive dans la variable static_routes cela permet de créer plusieurs routes statiques.


Avec Linux pour ajouter une route à la table de routage d‘un Serveur ou d‘une Station de travail :

Route Add 199.199.41.0 mask 255.255.255.0 199.199.40.1 metric 2

La route ci-dessus précise que, pour atteindre le sous-réseau 199.199.41.0 avec un masque de 255.255.255.0, il faut passer par la passerelle 199.199.40.1 et qu‘il faudra traverser deux nœuds.

Remarque : Si on n‘ajoute pas -p comme commutateur, la route disparaîtra au prochain reboot de la machine, cette option enregistre une route de manière permanente.

Autre exemple :

Route Add -p 62.160.38.11 mask 255.255.255.255 192.168.0.5

La route précédente est une translation d‘adresse pour une machine : en effet, le masque 255.255.255.255 impose que l‘adresse entière de la destination doit correspondre, il s‘agit donc d‘un host. En l‘occurrence, cet host est 192.168.0.5. Ainsi, cette route signifie que lorsqu‘on accède, par exemple avec une connexion Internet distante, sur l‘adresse 62.160.38.11, on redirige en fait vers l‘adresse interne 192.168.0.5.

Remarque : Les routes se modifient en général sur les passerelles (Serveur servant de Routeur, Firewall, Routeur matériel, etc.) qui sont les machines se chargeant physiquement du routage des datagrammes. Un host standard du réseau n‘a pas à router ses datagrammes lui-même, il doit seulement pouvoit faire sa résolution du Nom de host de son adresse IP pour savoir adresser un host distant.

Voir l‘article sur l‘utilisation de Webmin - Ajouter une « Route IP » dans un Serveur Linux


Article connexe du sujet

Datagramme IP
Description du Protocole TCP/IP et Classes d‘Adresses Réseaux Privés
RFC 1918 - Classes d‘Adresses Privées
BIND Système Nom Domaine - FreeBSD
FreeBSD - Installer et Configurer version 8.4-RELEASE
Configuration Oracle VM VirtualBox pour FreeBSD-8.4
Serveur Virtuel FreeBSD-8.4 dans Mac OSX Snow Leopard

Auteur
Eric Douzet
Début de page
bl br
C-extra.com v. 1.2.2 © 2000-2014, tous droits réservés  –  Mise à jour le 12 Avril 2014 Infologisme.com