ifconfig I/F : cette commande donne la configuration de toutes les
interfaces IP actives sur la machines quand le paramètre I/F est omis ou d'une interface
précise si le paramètre I/F est indiqué avec un nom d'interface valide comme
"eth0" par exemple.
ifconfig I/F IPADR netmask IPMASQ broadcast IPDIFF, où I/F
est le nom de l'interface, sous Linux ethx (x est un nombre...) pour une interface
ethernet et lo pour l'interface de bouclage, IPADR est l'adresse IP attribuée
à l'interface, IPMASQ est le masque de réseau/sous-réseau et IPDIFF est
l'adresse de broadcast de l'interface. Cette commande va configurer une interface
et commencer à remplir les différentes tables internes de la machine. On
retrouve ici les paramètres qui ont étés définis comme importants auparavant.
ifconfig I/F down, où I/F est le nom de l'interface. par exemple eth0.
Cette commande va fermer l'interface correspondante au niveau IP. Le matériel et le
pilote associé vont continuer à travailler sans que la couche
IP ne collecte ou n'envoie d'information à la couche physique, et sans pour autant avoir effacé la
configuration de l'interface au niveau IP
.
ifconfig I/F up, c'est la commande effectuant l'ouverture de
l'interface I/F au niveau IP en utilisant la configuration déjà effectuée.
D'autres options existent bien sûr mais pour une configuration simple, les
trois formes données ici effectuent tout le travail. Pour de plus amples
renseignements se reporter à la commande man ifconfig. Les options
supplémentaires seront ajoutées au fil de la présentation lorsque cela sera
nécessaire.
Sur une machine connectée à un réseau IP, il faut toujours créer l'interface de
bouclage par la commande ifconfig avec lo comme interface,
255.0.0.0 comme masque réseau et 127.0.0.1 comme adresse réseau.
Si besoin plusieurs interface de bouclage peuvent être crées pour des besoins précis.
L'usage des options arp, -arp peut être intéressant pour
sécuriser un réseau : l'option -arp permet d'interdire à la fois l'usage
du protocole ARP par la couche IP mais aussi d'interdire les réponses à une requête
ARP. La commande arp, valide par défaut à l'usage de la commande
ifconfig, permet l'activation du protocole ARP. Une machine ne
connaissant pas auparavant l'adresse physique d'une autre machine précise sur le réseau
ne pourra communiquer avec celle-ci. La machine où le protocole ARP aura été
inhibé ne pourra d'ailleurs pas non plus communiquer avec qui que se soit sur
le réseau. Normalement le remplissage de la table de correspondance entre les
adresses IP et les adresses physiques est fait automatiquement et son contenu a une
durée de vie de quelque minutes mais est rafraîchi tant que le réseau est en
activité. Il faut, quand le protocole ARP est inhibé, remplir la table de
correspondance à la main ou via un fichier de configuration prédéfini ou seront
présentées les adresses de toutes les machines avec lesquelles il va falloir
communiquer. On utilise pour cela la commande ARP sous les formes suivantes :
arp -n -a permet de lire la table actuelle,
arp -d IPaddress permet d'effacer la correspondance d'adresse pour une
machine présente dans la table,
arp -s IPaddress ETHaddress temp/pub permet de fixer la correspondance
d'adresse pour une machine. Si l'option temp est indiquée : cette correspondance sera
temporaire et sera effacée sous quelques minutes. En son absence la correspondance
sera fixe dans la table. Et si l'option pub est indiquée : la machine répondra à
toute demande d'adresse ARP sur l'adresse physique donnée.
arp -f fichier permet de fixer la table de correspondance pour un grand
nombre de machine via l'usage d'un fichier de configuration. Chaque machine sera déclarée sur une ligne de la forme
IPaddress ETHaddress temp/pub. Ce fichier est souvent le fichier
/etc/ethers.
Comme toujours se reporter a man arp pour plus d'information.
Il est a noter que si le resolver fonctionne, (ce qui permet de traduire des
les adresses IP en nom de machines lisibles), les adresses IP peuvent être
remplacées par le nom de la machine.
Et dans le cas ou le resolver ne fonctionne pas, il faut ajouter
l'option -n à la commande arp pour consulter la table et enlever cette option
dans le cas contraire.
Avec ces deux commandes ifconfig et arp, la machine dispose
d'une interface réseau IP sur ethernet. Il reste maintenant à s'assurer que les
données que l'on y envoie sont bien envoyées la où il le faut, et
qu'elle peuvent arriver à leur destinataire...
Le routage
Le routage concerne l'art et la manière de configurer un ensemble de machines
pour faire transiter des information sur un réseau ou un ensemble de réseau et que
les données arrivent à leurs destinataires respectifs. Là aussi plusieurs façon de
faire sont possibles, mais avec une unique commande UNIX route. Et cette
commande sans paramètre permet d'afficher de suite le contenu des table de routage
de la machine. Comme pour la commande arp, il faut ajouter le paramètre -n
: le resolver ne fonctionne pas encore ; nous ne l'avons pas encore configuré ! Plusieurs cas de routage sont à notre disposition et les principaux sont les suivants :
Le routage direct "immédiat". Il est issu de la commande ifconfig
et la commande route -n nous montre qu'après avoir configuré une interface,
une route vers le réseau qui lui correspond est automatiquement créée. On peut noter
le champ à 0 de l'adressage machine et le U qui indique que l'interface est
UP donc fonctionnelle. A noter : certaines vieilles versions d'O.S. demande une
configuration manuelle de cette route et nous retombons dans un cas cité plus loin.
Le routage machine. Il s'agit ici de décrire le moyen d'accès
pour chaque machine n'appartenant pas à notre propre réseau et avec laquelle
il va falloir communiquer en indiquant explicitement par quel routeur passer.
La configuration de la route vers une machine précise se fait par
la commande route add -host IPhost gw IPrelais metric n
qui va signifier de router toute connexion vers une machine à une adresse précise vers
le routeur placé à l'adresse IPrelais, et qui relaie les transmissions d'un réseau sur
l'autre.
Le paramètre metric indique le coût de la transmission :
plus la valeur est grande plus le coût est grand ou plus il y a de routeurs à
traverser. Une valeur de 0 force une route précise. D'autres valeurs laissent
d'éventuels daemons de routage choisir la route la plus optimisée. L'information
metric est souvent à négliger dans les cas courants
.
Ceci dit : ce genre de configuration peut être très
vite fastidieuse à réaliser surtout au niveau de routeurs qui doivent connaître
toutes les routes possibles pour toutes les machines avec éventuellement plusieurs routeurs au milieu du parcours.
La commande route -n affichera un H pour indiquer qu'il s'agit d'une route vers une machine précise.
Il est a noter que le paramètre metric peut aussi être utilisé dans la
configuration de la couche IP et permet à certains daemons de choisir une route en fonction du coût dans la transmission via telle ou telle interface si la
machine dispose de plusieurs interfaces (par exemple une interface rapide et une interface lente de secours).
Pour supprimer une route vers une machine la commande
est simplement route del -host IPhost.
Le routage réseau Pour palier, aux défauts de la
méthode précédente, il existe le routage par réseau ou il va être indiqué qu'un
réseau/sous-réseau complet est accessible via tel ou tel routeur appelle le plus souvent gateway. La commande
associée est route add -net IPreseau netmask IPmasque gw IPrelai où
IPreseau est l'adresse du réseau à atteindre IPmasque le masque réseau de celui-ci
et IPrelai l'adresse du routeur.
Une consultation de la table de routage par la
commande route -n va afficher l'indicateur G a coté de l'indicateur
U pour indiquer la présente d'une gateway pour tout un réseau.
Avec une seule commande il est alors facile
de remplacer un lot de commande d'adressage direct. Le paramètre
metric peut aussi être configuré pour ce type de routage.
Ici pour toute machine
du réseau cible, la machine émettrice va remplir ses paquets IP avec l'adresse
de la machine cible mais va donner l'adresse physique du routeur. Celui-ci va
récupérer les trames ethernet qui lui sont destinées et en confier le contenu
à sa couche IP qui lors du dépaquetage va constater que le paquet n'est pas pour lui
et va renvoyer le paquet complet vers une de ses interface qu'il détermine avec
sa propre table de routage, et en plaçant sa propre adresse physique comme source dans la nouvelle
trame ethernet, et même chose au retour. Le routeur peut être configuré pour défragmenter les
paquets IP car toutes les interfaces n'ont pas obligatoirement la même taille de paquets !
De cette façon les donnée arrivent toujours à bon port.
La commande pour détruire
une route de ce type est simplement route del -net IPreseau.
Le paramètre
metric peut aussi être configuré pour ce type de routage.
configuration des routeurs La configuration la plus simple des routeurs
reste la configuration par réseau où tout réseau est routé via une de ses multiples
interfaces comme pour une simple machine mais ici toutes les routes possibles
devront avoir été prise en compte. La solution du routage par réseau est beaucoup
plus simple à ce niveau la déclaration de chaque interface du routeur par
ifconfig créera la route gérant le réseau correspondant ; il suffira ensuite de router les réseaux distants en indiquant les gateways nécessaires.
Le routeur ici commence à avoir un rôle très central.
Il faut noter que
l'IPFORWARDING doit avoir été configuré dans le noyau, via une variable du fichier
/proc par la commande :
echo "1" > /proc/sys/net/ipv4/ip_forward. l'envoi d'un "0" dans
cette variable va inhiber la fonction et donc
le routeur ne sera plus qu'une machine comme une autre sur les réseaux à qui il est connecté.
Si cette variable n'est pas
présente dans le fichier /proc c'est tout simplement que ce mode de fonctionnement a été
interdit lors de la compilation du noyau. Il faut donc activer cette option et
recompiler un nouveau noyau.
Le routage avec redirection. Il s'agit ici d'un concept encore plus
simple qui se résume en quelques mots : "tout ce dont je ne connais pas la route est
à envoyer à un routeur qui se débrouillera pour faire le relais".
La commande a
utiliser ici fait appel à une route spéciale la route par défaut (default en anglais). Et la commande de configuration devient : route add
default gw IPrelai avec IPrelai l'adresse du routeur sur le réseau local.
La table de routage peut se résumer à deux commandes : la route crée par ifconfig et
cette route par défaut.
Il aussi possible de noter que certains routeurs sont capable d'émettre des
commande ICMP de redirection de routage (ICMP redirect) modifiant dynamiquement
les tables de routage si plusieurs réseaux sont empilés et que des routeurs créent
des raccourcis. De cette façon le routeur par défaut est délesté d'une partie des transactions au profit d'un routeur plus optimisé pour des routes bien précises. Ces ajouts de routes sont fixes !!! Si une route est ajoutée, puis que le routeur
correspondant vienne à tomber en panne : l'ancienne route par default ne sera pas réutilisée et donc un réseau peut donc être coupé du reste monde ! Je n'ai pas encore pu tester cette forme de routage mais les
variables correspondantes sont positionnées dans le noyau : dans /proc/sys/net/ipv4/conf se trouve les répertoires de configuration de toutes les interfaces IP
et il est possible d'accéder au variables accept_redirects,
send_redirects et secure_redirect qui sont déjà positionnées à "1".
Il n'y aurait pas à s'étonner dans certains cas que de nouvelles gateways soient
crées dynamiquement dans les tables des machines à coté de la passerelle par défaut.
Dans tout les cas, dans ce type de configuration, toute panne de routeur est
"bloquante" et il faut soit remettre le routeur en marche soit modifier les tables
de routage de chaque machine pour utiliser un autre routeur.
Nous avons déjà entrevu la commande pour supprimer une route précise, la
commande correspondante pour supprimer la route par défaut est simplement route
del default.
Configuration du routeur pour le routage par redirection. Il n'y pas de changement pour les routeurs : ce sont les seules machines a devoir ne pas utiliser
de routes par défaut sauf pour le cas ou un réseau n'y est pas connecté ; auquel cas,
il peut être simple d'envoyer les demandes de communications n'aboutissant pas ici
vers un autre routeur comme cela est fait sur internet.
Le routage par procuration. Il s'agit en fait d'un concept très simple
faisant fureur chez les présidents d'association loi 1901... Le principe est le
suivant "Me fait pas ch**r, y'en a marre de ce truc là : je balance tout sur le
réseau, débrouillez vous pour que ca passe", aussi appelé familièrement
proxy-arp : le routage va se faire sur l'adresse physique et
non plus sur l'adresse IP. La commande associée est la suivante :
route add default dev ethx où ethx est le nom de l'interface.
Lorsqu'un accès à une machine va être nécessaire, la machine locale va effectuer
une requête ARP pour connaître l'adresse physique de la machine cible. Sur le réseau
en question toutes les machines présentes vont pouvoir répondre pour ce qui les concerne tandis qu'un routeur aura son protocole ARP modifié pour s'approprier les
requêtes ARP restantes. La machine source verra donc en réponse soit l'adresse physique du
routeur soit l'adresse physique d'une machine sur son propre réseau. Dans le cas
d'un accès vers un autre réseau, les paquets IP seront dirigés vers le routeur, qui
lors de leur inspection va découvrir une adresse IP ne le concernant pas et va
transmettre la communication sur une autre interface choisie d'après ses propres
tables de routage.
Le principal défaut reste un principe un peu bizarre et dépendant d'un
réseau physique répondant à un protocole ARP. Les avantages résident dans une seule
configuration pour tout le monde, ne dépendant d'aucune configuration routeur par
default, et surtout insensible à la panne d'un seul routeur.
Configuration du routeur pour le routage par procuration. Sur une machine
Linux, il n'y a qu'une seule commande à activer le mode prxy_arp :
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp dans le répertoire
all pour affecter toutes les interfaces IP et donc fonctionner en proxy arp sur tous les réseaux connectés au routeur ou dans les répertoires
correspondant à chaque interface pour une activation individuelle. Le routeur doit
aussi embarquer des tables de routage plus classique...
Les daemons de routage. Il faut signaler au passage l'existence de
daemons de routage permettant de réaliser un routage dynamique au niveau des tables
de routage correspondantes. Mais il s'agit d'un thème hors présentation car traitant
de la couche applicative du réseau.
On a donc pu voir qu'un réseau simple ou un réseau plus complexe avec le routeur
pouvait se faire relativement simplement sous Linux à l'aide des commandes de base
d'UNIX. Arrivé à ce point si aucune erreur de configuration n'a été fait il est
possible de considérer que le réseau fonctionne dans son aspect le plus rustique.
Il reste maintenant à vérifier son fonctionnement et à se donner un peu de confort
en configurant les couches supérieures du réseau.
On peut noter qu'un routeur ne demande qu'à se voir ajouter une fonction de
NAT/masquerading pour cacher un ou plusieurs réseaux complets derrière une seule
machine (cas d'un accès internet unique pour plusieurs machines), qui peut aussi embarquer un firewall de façon à protéger tous ces réseaux
d'une intrusion.
Vérifier le fonctionnement de son petit réseau.
Pour contrôler le fonctionnement basique d'un réseau, il existe classiquement
trois commandes ping, traceroute et netstat.
Les deux
premières reposent sur le protocole ICMP et permettent de vérifier l'accessibilité
d'une machine ou d'un routeur, ainsi que la bonne traversée des routeurs.
Ces deux commandes acceptent l'adresse IP de la machine cible ou le
nom de cette machine si le resolver fonctionne.
La commande ping donne le temps
de transmission d'un aller-retour : quelques millisecondes pour de l'ethernet, sous
40ms pour du RNIS et quelques minutes pour la radio...
La commande traceroute, elle, va afficher l'adresse de toutes les machines traversées avec les temps correspondants.
Ces deux commandes permettent de vérifier si les différentes
machines sont accessibles et si les routeurs sont "traversables". En cas de problème,
il faut toujours penser à vérifier qu'une machine est bien accessible via le routage,
mais aussi vérifier que la route dans le sens inverse est valide et que la cible
peut répondre.
Il est a noter que "pinger" et "tracerouter" en continu des machines sur internet est
parfois considéré comme un acte "aggressif"... attention ou vous mettez les pattes.
La dernière commande netstat va vous permettre de consulter toutes les
tables interne concernant le réseau IP et ce pour toutes les couches. Il n'y a
juste qu'à conseiller la lecture du résultat de man netstat pour en
apprécier toutes les options.
Maintenant il est vraiment possible de considérer que le réseau fonctionne avec des machines Linux provenant de distributions raisonnables ou les fichiers de
configuration de la couche UDP/TCP sont correctement installés car relativement
immuables. La caisse à outil de base s'est un peu remplie et il reste donc à se
donner un peut de confort dans la rusticité ambiante.
Les fichiers de configuration de la couche UDP/TCP et au delà.
Il s'agit en fait d'abord des fichiers /etc/services et /etc/protocols
qui doivent être présents et qui pour /etc/protocols déclare les différents
numéros de protocoles et qui pour /etc/services contient la déclaration de
tous les services disponibles sur un réseau IP standard. Ces deux fichiers sont
normalement identiques sur toutes les machines de toute la planète ! Sauf
peut-être chez certains groupes très individualistes et pas très communiquatifs.
Si ces fichiers vous manquent, vous pouvez soit les copier depuis une autre machine,
soit les réécrire à partir des informations données par man protocols et
man services et données par les RFC.
Une autre fonction à configurer dans le système IP d'une machine est le
resolver qui a pour rôle de convertir les noms de machines humainement
lisibles et mémorisables par les adresses IP correspondantes utilisables par le
réseau IP. Le premier fichier pouvant être utile est le fichier
/etc/hostname qui contient comme son nom l'indique le nom de la machine.
Les deux fichiers suivants /etc/hosts et /etc/networks contiennent
les tables de correspondance entre les noms de machines et leurs adresse IP, ainsi
que la correspondance des adresses IP des réseaux et de leurs noms. Pour le format
exact du contenu de ces fichiers : toujours se reporter à la commande
man associée... ou aux RFCs ou au premier bon bouquin qui passe par là.
Les ébauches de ces fichiers
contenus dans les distributions courantes permettent d'en comprendre souvent la
structure grâce aux commentaires qui y sont placés.
Deux fichiers permettent de régler le fonctionnement du resolver sans
avoir à le recompiler à chaque changement :
/etc/host.conf et /etc/nsswitch.conf. host.conf à une structure relativement bien fixée pour les besoins courants et indique de, d'abord, chercher dans le
fichier /etc/hosts, puis de chercher via un serveur externe (un DNS) dont l'adresse
sera indiquée dans le
fichier /etc/resolv.conf avec la mention nameserver IPDNS ou IPDNS
est l'adresse IP du serveur de nom externe. Sa documentation exacte est
consultable par la commande man resolv.conf. Le fichier /etc/nsswitch.conf
a le même rôle que
/etc/host.conf et est apparu avec la dernière librairie C de Linux contenant le code du resolver en lui même. Sa documentation est consultable par la commande
`info libc "Name Service Switch".
Il y aune dernière couche affectée à la sécurité des accès réseau qu'il faut
surveiller si rien ne marche au niveau applications : le noyau peut interdire ou laisser passer des communications via le réseau en fonction des informations contenues
dans les fichiers /etc/hosts.allow et /etc/hosts.deny dont la documentation est disponible via la commande man hosts_acces. Ces deux fichiers
permettent ou interdisent explicitement ou non l'accès à certains services par
certaines machines, certains réseaux, etc. Si les fichiers sont vide, aucun blocage
n'aura lieu.Mais dans ce cas là, toute requête réseau même étrangère (cas d'une machine ou d'un réseau connecté à internet) sera acceptée !
Il reste ensuite à lancer les applications liées au réseau ou aux clients, les
daemons réseau fournissant en continu les différents services voulus par
l'utilisateur. Mais ceci est déjà un autre histoire.
Conclusion : on se sent déjà mieux... la base du réseau fonctionne et devrait
maintenant permettre de faire tourner les applications nécessaire à l'utilisateur.
Petit exercice La configuration d'un réseau avec sous-réseau et routeur
Ou "Petit conte de fée dans une ferme collective sibérienne"
Il s'agit simplement d'aider
la famille ours vivant en Sibérie dans une ferme collective, à installer le réseau
familial ! La direction de la ferme leur fait prendre l'adresse réseau de classe C
192.168.55.0 et l'accès vers le reste de la ferme se fait par une machine à l'adresse
192.168.0.1. Il faut savoir que papa ours utilise un cluster de 6 machines pour
calculer la probabilité qu'a une tartine de miel de finir sur la mauvaise face lors d'une
chute, que maman ours écrit un livre sur la tartine de miel à travers les âges et donc a
un serveur documentaire et une station de travail, et que les oursons jouent à
"cake 24 : scratch the bee" en réseau. Et tous se doivent d'accéder au réseau de la ferme collective.
Bien sur, il y a le traditionnel invité, qui après avoir essayé le cluster de papa ours (trop dur !), la station de travail de maman ours (trop colorée !), et les machines des oursons (trop stressantes !), décide qu'il va utiliser son portable... Je tiens à vous rassurer ce n'est pas Boucle d'or(tm-Perrault) partie négocier un contrat pour un dessin animé...
mais un personnage nommé Le Prez'(tm-Le CULTe) qui ne se posant pas de question envoie tout sur son interface réseau sans aucune autre considération de routage et qui se déplace souvent en bande dont les membres sont souvent aussi équipés de portables.
Il faut savoir que si tous sont sur le même brin ethernet, le cluster de papa ours est bloqué par la saturation du réseau, que maman ours hurle parce
qu'elle doit attendre pour visualiser ses références iconographiques, et que pour
les oursons il est impensable qu'une abeille vole de façon saccadée. L'usage de switches
ethernet efficace n'est pas possible pour la famille ours car trop chers et d'approvisionnement trop difficile...
A vous de trouver une solution et de faire le plan d'adressage et d'écrire les
scripts de configuration pour chaque machine. Note : toute la famille en tant que fermiers progressistes
convaincus utilise Linux : mais il n'y a aucune obligation de répondre en utilisant
l'alphabet cyrillique.
That's all folks !