| Réseaux IP: la pratique | Vincent Defert - 1 Déc. 1998 |
Pour relier une machine à un réseau, il faut bien sûr l'avoir dotée d'une carte réseau correctement réglée (c'est à dire sans conflit avec les autres périphériques), mais il faut ensuite indiquer au système d'exploitation comment l'utiliser. Ceci se déroule en 3 étapes: chargement du driver, configuration de l'interface et configuration du routage.
La première chose à faire est de charger le driver permettant le dialogue avec la carte. Ceci se fait avec la commande modprobe suivie du nom du driver et des paramètres (adresse d'entrées-sortie, interruption, etc) de la carte si besoin.
Par exemple, "modprobe 3c59x" chargera le driver de la carte 3COM 3C590 (carte PCI: pas de paramètres) et "modprobe smc-ultra io=0x300" chargera le driver d'une carte SMC Ultra configurée pour utiliser l'adresse d'E/S 0x300 (les autres paramètres sont détectés).
A partir de ce moment, le système d'exploitation "connait" la carte sous le nom de /dev/eth0 (ou /dev/ethn si c'est la (n + 1) ème carte). Si la machine contient plusieurs cartes, elles sont numérotées dans l'ordre où elles sont détectées. Dans ce cas (ex. routeur ou firewall), il faudra noter quelque part l'adresse Ethernet (en général marquée sur les cartes) pour s'y retrouver.
Maintenant que le système est capable de dialoguer avec la carte, il faut lui fabriquer une "carte d'identité" pour qu'elle soit reconnue du système et des autres machines. C'est ce qu'on appelle "configurer une interface".
On indique au système à l'aide de la commande ifconfig l'adresse IP de la carte ainsi que son netmask et son adresse de broadcast si ces éléments ne peuvent pas être déduits de son adresse IP. Par exemple, si votre adresse est 192.168.0.5, la commande à utiliser sera:
ifconfig eth0 192.168.0.5
ou sous une forme plus complète:
ifconfig eth0 192.168.0.5 netmask 255.255.255.0 broadcast 192.168.0.255
La commande ifconfig supporte d'autres options d'usage moins courant. Reportez-vous à sa page de manuel pour plus de détails.
Le système sait maintenant comment utiliser l'interface et connait son "identité IP". Reste à lui dire quand l'utiliser: c'est le rôle de la commande route. Dans le cas de notre exemple, il faudrait l'utiliser de la façon suivante:
route add -net 192.168.0.0 eth0
Elle ajoute une entrée à la table de routage (option add) indiquant que les paquets à destination du réseau (option -net) n° 192.168.0.0 doivent être envoyés à l'interface eth0.
Si le masque de sous-réseau indiqué par votre administrateur diffère de celui normalement associé à la classe de l'adresse (c'est ce qu'on appelle un réseau "Classless", technique servant à éviter le gaspillage des adresses IP en utilisant les adresses d'une plage donnée dans plusieurs sous-réseaux physiques différents), vous devrez aussi utiliser l'option netmask:
route add -net 192.168.0.0 netmask 255.255.255.0 eth0
Enfin, si votre réseau est relié à l'Internet ou un d'autre réseaux, il vous faudra indiquer une route par défaut permettant d'aiguiller les paquets ne correspondant à aucune autre entrée de la table de routage vers une passerelle appropriée. Exemple:
route add default gw 192.168.0.1 netmask 0.0.0.0
La commande route supporte d'autres options d'usage moins fréquent. Reportez-vous à sa page de manuel pour plus de détails.
Pour vérifier que tout fonctionne, utilisez la commande ping suivie de l'adresse (ou du nom) d'une autre machine du même réseau. Cette commande ne s'arrête que si vous appuyez sur Ctrl-C.
nenette:~# ping 192.168.0.32 PING 192.168.0.32 (192.168.0.32): 56 data bytes 64 bytes from 192.168.0.32: icmp_seq=0 ttl=128 time=0.6 ms 64 bytes from 192.168.0.32: icmp_seq=1 ttl=128 time=0.4 ms 64 bytes from 192.168.0.32: icmp_seq=2 ttl=128 time=0.4 ms 64 bytes from 192.168.0.32: icmp_seq=3 ttl=128 time=0.4 ms 64 bytes from 192.168.0.32: icmp_seq=4 ttl=128 time=0.4 ms 64 bytes from 192.168.0.32: icmp_seq=5 ttl=128 time=0.4 ms --- 192.168.0.32 ping statistics --- 6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.6 ms nenette:~#
Si vous n'obtenez pas de lignes semblables, c'est que vote interface est probablement mal configurée. Tapez ifconfig sans paramètres, vous devez obtenir quelque chose comme:
nenette:~# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:5735 errors:0 dropped:0 overruns:0 frame:0
TX packets:5735 errors:0 dropped:0 overruns:0 carrier:0 coll:0
eth0 Link encap:Ethernet HWaddr 00:A0:24:B7:B9:6F
inet addr:192.168.0.5 Bcast:194.206.79.255 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:269963 errors:0 dropped:0 overruns:0 frame:0
TX packets:177320 errors:0 dropped:0 overruns:0 carrier:0 coll:98
Interrupt:10 Base address:0xd800
nenette:~#
Si ce n'est pas le cas, revoyez le chargement du driver ou la configuration de l'interface. Si tout est correct, il s'agit d'un problème de routage. La commande route -n (l'option -n évite les requêtes DNS pour afficher des noms à la place des adresses: un seul problème à la fois, s'il vous plaît!):
nenette:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 248 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 113 lo nenette:~#
Si votre réseau est relié à l'Internet ou un autre réseau, il vous faut aussi tester la communication avec l'extérieur en faisant un ping sur une machine située à l'extérieur (par exemple: 192.48.96.9 (ftp.uu.net)). Si ça ne fonctionne pas, pas de panique: il est possible que ce soit parce que vous êtes derrière un firewall qui bloque les requêtes ICMP. Il vous faudra alors utiliser la commande ftp pour vérifier que la liaison avec l'extérieur est possible:
nenette:~# ftp 192.48.96.9 Connected to 192.48.96.9. 220 ftp.UU.NET FTP server (Version wu-2.4(4) Mon Jan 6 13:57:37 EST 1997) ready. Name (192.48.96.9:root):
Si vous obtenez un message de ce type, c'est que tout fonctionne et vous pouvez faire Ctrl-C pour interrompre. En cas de message d'erreur, c'est qu'il y a sans doute un problème de routage. Pour le vérifiez, utilisez route -n, qui doit vous afficher quelque chose comme:
nenette:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 248 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 113 lo 0.0.0.0 192.168.0.1 0.0.0.0 UG 1 0 1446 eth0 nenette:~#
Si la dernière ligne manque, vous n'avez pas de route par défaut et il vous est impossible de "sortir" de votre réseau. Il faut donc faire un "route add default gw ...".
Si la dernière ligne est bonne mais que ça ne fonctionne pas, c'est peut-être parce que votre routeur est hors service, qu'il y a un problème sur la ligne ou chez votre fournisseur de connectivité. Il vous faut utiliser la commande traceroute pour le vérifier:
nenette:~# traceroute -n 192.48.96.9 traceroute to 192.48.96.9 (192.48.96.9), 30 hops max, 40 byte packets 1 192.168.0.1 9.754 ms 9.461 ms 8.046 ms 2 195.6.244.14 60.885 ms 48.924 ms 90.517 ms 3 194.206.126.244 50.503 ms 48.97 ms 120.122 ms 4 194.206.126.2 55.655 ms 52.213 ms 58.908 ms 5 208.213.229.130 588.303 ms 589.843 ms 589.611 ms 6 208.213.229.129 599.564 ms 599.763 ms 600.749 ms 7 208.213.229.226 629.167 ms 599.284 ms 599.383 ms 8 195.10.40.34 599.152 ms 599.289 ms 631.011 ms 9 157.130.34.217 642.326 ms 715.072 ms 653.724 ms 10 146.188.160.62 595.143 ms 590.433 ms 659.247 ms 11 146.188.160.181 649.863 ms 700.901 ms 617.067 ms 12 137.39.253.86 600.835 ms 599.379 ms 590.867 ms 13 192.48.96.9 607.071 ms 589.221 ms 603.156 ms nenette:~#
Cette commande affiche toutes les machines par lesquelles passe les paquets pour atteindre la machine-cible. Elle ne fonctionnera que si les requêtes ICMP peuvent "passer" au travers d'éventuels firewalls, ce qui est le cas lorsqu'on met en place les premières machines d'une installation (il n'y a encore rien à protéger ;).
La première ligne correspond à votre passerelle (souvent un routeur). Si elle n'est même pas affichée, vous n'aurez pas à chercher bien loin: vérifier et/ou réinitialiser le routeur, se renseigner auprès de la société qui vous loue la ligne spécialisée pour qu'ils vérifient son état. La seconde ligne correspond en général au routeur de votre fournisseur de connectivité, et ainsi de suite. Dans ce cas, contactez votre fournisseur.
Pour finir, taper des adresses IP n'est pas un problème quand il s'agit de faire quelques tests, mais ce n'est pas acceptable en fonctionnement normal. La conversion de noms en adresses IP est faite par un dispositif appelé "resolver", qu'il faut configurer et auquel il faut fournir des informations.
En général, on rencontre 2 types de situations: le réseau local de petite taille et les installations plus grandes ou connectées à Internet. Dans le premier cas, il suffit de remplir une petite table de correspondance dans chaque machine (fichier /etc/hosts). Dans le second cas, on utilise en général un serveur de noms.
Le fichier /etc/hosts contient des lignes de la forme "adresse nom alias1 alias2 ...". Par exemple:
192.168.0.1 nenette nenette.mynett.fr 192.168.0.2 moumoune moumoune.mynett.fr 192.168.0.3 pupuce pupuce.mynett.fr
Si vous utilisez un serveur de noms, il vous faudra créer ou modifier le fichier /etc/resolv.conf. Vous y indiquerez votre nom de domaine par défaut (pour compléter automatiquement les noms de machines abrégés) et l'adresse IP de votre serveur de noms. Exemple:
domain mynett.fr nameserver 192.168.0.1
Notez que vous pouvez mettre jusqu'à 3 serveurs de noms, en ajoutant autant de lignes "nameserver", au cas où le premier serait hors service (ou les 2 premiers).
A partir de maintenant, vous pouvez taper "ping moumoune" ou "traceroute pupuce" sans problème. C'est beau la technique, non?
Maintenant que votre système est fonctionnel, il ne reste plus qu'à ajouter les commandes de configuration nécessaires (modprobe, ifconfig et route) à un des scripts de démarrage de votre machine, celui-ci dépendant de la distribution utilisée (ex. /etc/rc.d/rc.inet1 avec la Slackware). Vous remarquerez que vous avez pu effectuer toutes ces manipulations sans redémarrer votre machine ni gêner aucun des programmes en cours d'exécution. Sympatique, non? En tous cas, ça facilite énormément les essais!
Notez que selon les distributions, il existe des utilitaires aux noms évocateurs (ex. netconfig) évitant de devoir saisir tout cela à la main. Cependant, en cas de problème, il est indispensable de maîtriser tout ce qui précède pour pouvoir s'en sortir. L'idéal est donc de faire votre premier essai "à la main", comme décrit ici, pour vérifier par l'expérience si vous avez tout assimilé. Ensuite, au lieu de modifier vous-même les scripts de démarrage, utilisez plutôt l'utilitaire fourni par votre distribution.