|
|
Les réseaux
Cette page présente plusieurs aspects qui concernent les réseaux informatiques.
Elle tente de répondre à quelques questions que se posent parfois les internautes, ou aborde
des sujets plus pointus ou ambigüs sur les réseaux.
Les informations ou définitions apportées ne sont en aucune manière des sources fiables. Elles ne
sont que le reflet de ce que je connais ou pense, ce qui n'est absolument pas une garantie en
aucune manière.
Sommaire:
1- Présentation d'un dialogue TCP/IP
2- Les dénominations qui ne veulent rien dire et brouillent les esprits
3- Datagramme IP ou paquet IP ?
4- Traceroute ou traceroute ?
5- Routeurs, switchs, bridges, hubs. Différences et points communs
6- Mise en place d'une double connexion ADSL avec Linux
7- Mise en place simple d'un firewall sous windows
8- Mise en place d'un serveur sécurisé sous OpenBSD
9- Mise en place d'une solution de sauvegarde incrémentale sécurisée
10- Cours TCP/IP complet au format pdf
11- Création d'un package Debian pour l'outil arp-sk
Le document suivant présente de façon simplifiée le déroulement d'une connexion entre un utilisateur
et un serveur web, pour mieux comprendre ce qui se passe lorsque vous utilisez votre navigateur
préféré.
Présentation d'un dialogue TCP/IP
Un problème majeur dans les réseaux est que chacun fait sa petite tambouille dans son coin sans
se mettre d'accord avec ses petits camarades. Il y a bien des groupes ou des documents qui
normalisent les usages sur Internet, mais ils ne sont d'une part pas toujours respectés (combien de
produits ne respectent pas les RFC aujourd'hui ?) et les constructeurs ont parfois besoin de plus
de réactivité pour sortir des produits et sortent des normes à leur sauce avant que la normalisation
officielle ait pu être mise en oeuvre (IPsec, SplitMLT, ISL, etc.)
Il faut aussi ajouter à cela les néologismes inventés par les constructeurs et souvent mal adaptés
aux fonctions associées des produits dans le but de faire une nouvelle offre commerciale plus
attractive. Le client final se retrouve perdu dans tous ces termes techniques qui décrivent tout
et surtout n'importe quoi... (Commutateur niveau 3, firewall personnel, VPN MPLS, etc.)
Cela amène une certaine confusion dans le monde des réseaux, et bien chanceux sont ceux qui arrivent
à s'y retrouver dans ce brouillard ambiant :-)
PS: J'ai bien conscience que ces idées sont polémiques et méritent une réflexion approfondie. Je
suis donc tout à fait d'accord sur le fait que ces idées sont très subjectives et ne sont pas
partagées par tous. Cependant, je les ai toutes discutées avec des amis ou sur les newsgroups
sans jamais trouver d'arguments forts en faveur d'une idée contraire. Je suis par ailleurs
ouvert à toute discussion sur les sujets évoqués et joignable à l'adresse mail en bas de la
page.
Le commutateur niveau 3
Arf, avec ce genre de barbarisme, on commence fort. Le terme commutateur est employé pour désigner
l'équipement de couche 2 (en se basant sur le modèle OSI) qui est utilisé pour connecter les
machines d'un réseau. On utilise par ailleurs la description "de niveau 3" pour identifier les
éléments ayant trait à la couche 3 du modèle OSI. N'est-ce pas paradoxal de rapprocher deux notions
de couches différentes au sein d'un terme désignant un produit unique ? Et ainsi, que peut donc bien
être un commutateur de niveau 3 ?
Une définition de Fluide Glacial correspond assez bien:
"J'en ai rêvé, Sony l'a fait... un petit amas de n'importe quoi"
Effectivement, et malheureusement, non content d'associer des idées contradictoires, ce terme pousse
le vice jusqu'à représenter différents équipements !! ou du moins, différentes technologies bien
distinctes les unes des autres (routage par ASICs, MLS, MPLS, etc.)
Alors comment peut-on se faire une idée de ce que représente un commutateur niveau 3 ?
Pour ma part, je vois un commutateur niveau 3 comme un routeur qui va vite. Effectivement, un
commutateur niveau 3 effectue une tâche de couche 3 qui est le routage. On peut donc le définir
comme un routeur. Et je vois le terme "commutateur" qu'on lui a associé plus comme une stratégie
commerciale pour le différencier d'un routeur simple (routeur rapide c'est pas hyper vendeur quand
même)
Enfin bon, c'est bien dommage de ne pas avoir choisi une nouvelle dénomination à base de routeur,
et d'avoir utilisé des termes qui représentent mal le produit et brouillent les esprits :-(
Le firewall personnel
A venir
Les VPNs MPLS
Poutaniou !!!
Encore une fois, il semblerait que les besoins commerciaux d'attirer le pigeon aient pris le dessus
sur le bon sens.
MPLS (MultiProtocol Label Switching) est une technologie permettant de mettre en place des pseudos
circuits virtuels sur un réseau entre différents points d'entrée de ce réseau. Cela se fait
notamment en mettant un "label" dans la trame Ethernet permettant d'identifier la route à utiliser
plus rapidemment. Pour simplifier, cela permet de créer un tuyau entre deux points pour que les
informations envoyées ne passent pas ailleurs que dans le tuyau. Cela peut sembler simple, mais les
possibilités associées à cette technologie sont extrèmement intéressantes.
Par ailleurs, un VPN (Virtual Private Network, ou Réseau Privé Virtuel) permet la création d'un
circuit virtuel _sécurisé_ entre deux points. Encore une fois pour simplifier, cela permet de
créer une tuyau entre deux points sur un réseau public non sûr, et de faire comme si ces deux
points étaient directement connectés ! Le tuyau est transparent, la sécurité du transfert des
données sur ce tuyau est garantie par le VPN.
Il faut avouer que les définitions sont assez proches. Cependant, il existe une différence majeure
entre les deux notions qui est qu'on associe une notion de sécurité à celle d'un VPN
(Authentification, Intégrité, Confidentialité) alors qu'il n'en existe pas en ce qui concerne MPLS.
Toutes les expressions employant le terme VPN devraient refléter le niveau de sécurité associé de
la technologie employée, comme VPN IPsec par exemple. Mais ce n'est pas toujours le cas, et
notamment avec MPLS.
Ce n'est pas comme si c'était extrèmement grave non plus, mais le risque, qui se concrétise souvent,
est que des personnes mettent en place du MPLS en pensant sécuriser leurs transactions. On en
arrive là encore à des légendes urbaines sur le sécurité de MPLS et à la mise en place de réseaux
non sécurisés alors qu'ils le devraient.
Donc par pitié, ne parlez plus de VPN MPLS mais tout simplement de tunnel MPLS qui est un terme bien
plus approprié.
On entend souvent parler de datagramme IP ou de paquet IP, mais laquelle de ces deux appellations
est la bonne ?
La réponse est: les deux.
Le datagrame représente l'unité d'information propre au protocole IP. On utilise le terme datagramme
lorsque chacune des unités d'information envoyées est indépendante l'une de l'autre et que l'envoi
se fait en mode non connecté. Chacun des datagrammes envoyés est donc indépendant des autres et peut
être acheminé différemment.
Maintenant, pourquoi utiliser alors un autre terme ? La réponse provient notamment de l'utilisation
de la fragmentation. Un datagramme peut être découpé pendant son parcours en plusieurs fragments
pour pouvoir circuler correctement sur le réseau. On se retrouve alors avec plusieurs datagrammes
qui contiennent chacun l'ensemble de l'information nécessaire à leur transport sur le réseau, mais
qui ne doivent pas être confondus avec le datagramme d'origine. Comment différencier alors le
datagramme d'origine des différents datagrammes qui proviennent de sa fragmentation ?
Le choix a donc été d'utiliser le terme "paquet" pour signifier l'unité d'information circulant sur
le réseau, et "datagramme" pour représenter l'unité d'information mise en forme par la couche IP
au niveau de la machine émettrice, et réceptionnée par la machine destination.
Pour récapituler, lorsqu'une machine souhaite envoyer une information sur le réseau, la couche IP
forme un datagramme. Et lorsque la machine envoit cette information sur le réseau, on parle de
paquet IP. La machine destination réceptionne un ou plusieurs paquets IP et forme le datagramme
d'origine.
La question est posée, et comme dirait Desproges, il ne reste plus qu'à poser la réponse.
Bon, ok, la question n'est pas vraiment explicite, et je ne veux en aucun cas savoir qui est
meilleur de traceroute ou traceroute, mais juste présenter l'application traceroute, ses principes,
et pourquoi ses implémentations diffèrent et peuvent embrouiller la compréhension de la chose.
Tout d'abord, présentons traceroute
Traceroute est une application qui permet de déterminer à un instant t les différentes passerelles
que vous utilisez pour joindre une autre machine sur Internet. Exemple:
Traceroute www.google.fr
1 <1 ms <1 ms <1 ms 192.168.0.254
2 27 ms 26 ms 24 ms 1.240.39-62.rev.gaoland.net [62.39.240.1]
3 26 ms 25 ms 25 ms 5-193-118-80.kaptech.net [80.118.193.5]
4 24 ms 25 ms 25 ms V3994.c1cbv.gaoland.net [212.94.162.209]
5 24 ms 24 ms 27 ms V4975.core1.itx.gaoland.net [212.94.161.178]
6 27 ms 26 ms 26 ms lambdanet-france.sfinx.tm.fr [194.68.129.164]
7 28 ms 28 ms 27 ms PZU-1-pos033.fr.lambdanet.net [217.71.96.233]
8 38 ms 39 ms 37 ms F-1-pos300.de.lambdanet.net [217.71.96.33]
9 38 ms 68 ms 38 ms F-8-eth100-0.de.lambdanet.net [217.71.105.110]
10 39 ms 37 ms 37 ms Google-F.de.lambdanet.net [217.71.111.38]
11 68 ms 68 ms 67 ms 216.239.48.146
12 69 ms 71 ms 70 ms 216.239.49.18
13 68 ms 66 ms 67 ms 66.102.11.99
Itinéraire déterminé.
On voit ainsi les différents routeurs par lesquels on passe pour atteindre la machine www.google.fr.
Comment ca marche ?
Pour comprendre le fonctionnement de traceroute, il faut connaître le principe du TTL de l'en-tête
IP. Un champ est réservé dans l'en-tête IP qui a une certaine valeur comprise entre 0 et 255 (cette
valeur peut varier selon les systèmes d'exploitation) Lors du passage par un routeur, ce TTL est
décrémenté de 1. Lorsque le TTL vaut 0, le datagramme (ou paquet ;-) ) est jeté à la poubelle.
Ainsi, si jamais un paquet IP se ballade indéfiniment sur le réseau à cause par exemple d'une boucle
de routage, il sera détruit au bout d'un moment, quand le TTL vaudra 0. Et ce qui est plus fort,
c'est que la machine qui a détruit le paquet prévient l'émetteur en lui envoyant un paquet ICMP
TTL exceeded.
Le rapport avec traceroute ? Et bien traceroute se base sur ce principe pour déterminer les
différentes machines présentes sur un chemin.
Si je veux savoir quelle est la cinquième machine par laquelle je passe pour atteindre www.google.fr,
il me suffit d'envoyer un paquet IP avec un TTL de 5. Ainsi, lors du passage par le cinquième
routeur, le TTL vaudra 0 et le routeur me renverra un paquet ICMP time exceeded en me disant
"Je suis tel routeur, et j'ai jeté ce paquet à la poubelle car le TTL vallait 0"
Ainsi, pour connaître l'ensemble des routeurs par lesquels je passe pour atteindre www.google.com,
il me suffit d'emmettre successivement des paquets IP avec des TTL croissant de 1 à x jusqu'à
atteindre la destination. Chacun des routeurs rencontrés me renverra alors un paquet ICMP TTL
exceeded me permettant de l'identifier.
Traceroute est donc basé sur de l'ICMP
Oui, mais non, c'est un peu plus compliqué que cela.
Comme nous l'avons vu, traceroute se base sur deux étapes différentes. D'une part, l'envoi d'un
paquet IP avec un certain TTL, et d'autre part, la réception d'un message d'erreur ICMP TTL
exceeded. Il faut donc bien décoreller ces deux étapes.
Pour aller dans le sens de l'affirmation précédente, la seconde étape est bien à base d'ICMP. Par
contre, si on précise bien que la première doit se faire par l'envoi d'un paquet IP, il n'est
rien mentionnée sur les protocoles supérieurs. Et c'est ici que ça dérape...
Le choix du protocole permettant de générer l'erreur ICMP est laissé libre. Ainsi, on peut tout
aussi bien utiliser du TCP, de l'ICMP ou de l'UDP, selon son choix et ses besoins. Mais le résultat
n'est pas toujours le même selon que tel ou tel traffic est filtré ou non.
Donc dire que traceroute est un protocole qui se base sur ICMP est un peu restrictif et risque
d'amener des erreurs de compréhension. Par exemple, si vous filtrez l'UDP, que vous laissez passer
l'ICMP et que votre application traceroute se base sur l'envoi de datagrammes UDP, il y a de
fortes chances pour que ca ne fonctionne pas :-(
Des fois, ça marche bizarrement...
Il y a des fois des traceroutes qui donnent des résultats bizarres. Mais il y a toujours une
explication. Prenons l'exemple suivant:
Traceroute www.google.fr
1 <1 ms <1 ms <1 ms 192.168.0.254
2 27 ms 26 ms 24 ms 1.240.39-62.rev.gaoland.net [62.39.240.1]
3 26 ms 25 ms 25 ms 5-193-118-80.kaptech.net [80.118.193.5]
4 24 ms 25 ms 25 ms V3994.c1cbv.gaoland.net [212.94.162.209]
5 24 ms 24 ms 27 ms V4975.core1.itx.gaoland.net [212.94.161.178]
6 27 ms 26 ms 26 ms lambdanet-france.sfinx.tm.fr [194.68.129.164]
7 28 ms 28 ms 27 ms PZU-1-pos033.fr.lambdanet.net [217.71.96.233]
8 38 ms 39 ms 37 ms F-1-pos300.de.lambdanet.net [217.71.96.33]
9 38 ms 68 ms 38 ms F-8-eth100-0.de.lambdanet.net [217.71.105.110]
10 39 ms 37 ms 37 ms Google-F.de.lambdanet.net [217.71.111.38]
11 39 ms 37 ms 37 ms Google-F.de.lambdanet.net [217.71.111.38]
12 68 ms 68 ms 67 ms 216.239.48.146
13 69 ms 71 ms 70 ms 216.239.49.18
14 68 ms 66 ms 67 ms 66.102.11.99
Itinéraire déterminé.
A en croire le résultat, il semblerait que l'on passe deux fois par le même routeur au dixième hop
Google-F.de.lambdanet.net, ce qui n'est pas très cohérent au niveau routage. Comment expliquer alors
ce résulat ?
Il se peut qu'il y ait plusieurs réponses à cette question mais l'une d'entre elles est plus
probable que les autres et provient des principes même du routage.
En effet, l'un des principes majeur du routage est que chaque paquet IP est routé indifféremment des
autres. Ainsi, il est possible que pour une même destination, deux paquets IP passent par deux
itinéraires différents, et arrivent tous deux à destination sans que la machine receptrice puisse
s'en rendre compte (je vous rappelle qu'aujourd'hui ce sont la plupart du temps des protocoles de
routage dynamiques qui sont utilisés et qu'une route évolue en temps réel)
C'est typiquement ce qui a pu se passer pour notre exemple de traceroute.
Il est tout à fait possible que lors de l'étape 11 (qui correspond à l'envoi d'un datagramme IP
avec un TTL de 11) le chemin emprunté ne soit pas le même que celui utilisé pour l'étape 10. Si
jamais le chemin emprunté passe par un routeur de plus avant l'étape 10, ce sera le même routeur
qui apparaîtra dans le traceroute (le dixième routeur pour le premier chemin sera aussi le
onzième pour le second chemin)
Par exemple, si une machine A veut dialoguer avec une machine B et a deux chemins possibles pour
l'atteindre:
A --> H --> I --> B
Ou
A --> H --> J --> I --> B
Si lors de l'envoi d'un datagramme avec un TTL de 2 c'est le premier chemin qui est utilisé, ce sera
le routeur I qui répondra. Et si lors de l'envoi d'un datagramme avec un TTL de 3 c'est le second
chemin qui est utilisé, ce sera encore le routeur I qui répondra !!
On verra donc apparaître deux fois le routeur I, comme deuxième et troisième routeurs traversés.
Conclusion
Comme nous avons pu le voir, l'application traceroute se sert d'une astuce au niveau du protocole IP
(ou du moins d'ICMP) pour obtenir la liste des routeurs traversés pour joindre une destination à un
instant t. Mais il faut être extrèmement vigilants avec cette définition puisque le résultat
effectif donné par traceroute n'est pas du tout celui escompté (la liste obtenue n'est pas
représentative d'un chemin utilisé à un instant t, mais l'enchaînement des routeurs utilisés
successivement à t, t+1, t+2, etc.)
Il faut donc garder à l'esprit cette différence pour comprendre l'application elle-même, mais aussi
ses résultats qui peuvent parfois être choquants...
Je vois souvent passer des questions sur les différences entre un hub et un switch, ou un swith
et un routeur. Il me semble donc bienvenu de qualifier une fois pour toutes ces termes qui
ne cachent pas de concepts bien compliqués.
Tout d'abord, il est nécessaire que vous ayez des notions de ce qu'est le modèle OSI et des
fonctionnalités associées aux différentes couches de ce modèle (ou du modèle TCP/IP)
Si ce n'est pas le cas, je vous invite à lire la faq sur le routage.
qui vous apportera les informations nécessaires sur ces couches.
Donc, pour commencer, nous allons parler des équipements de "connexion" qui permettent comme
le terme l'indique, de connecter des machines entre elles. Nous avons pour cela à notre
disposition des concentrateurs (ou hubs en anglais) des commutateurs (ou switchs en anglais)
ou des ponts (bridges en anglais)
Chacun des ces équipements a donc la même fonction, qui est de connecter des machines entre
elles, mais des caractéristiques bien différentes.
Le concentrateur, ou hub, est un équipement dit de couche 1 du modèle OSI, c'est à dire qu'il
travaille au niveau électrique de l'envoi du signal. C'est un boitier qui possède des prises
RJ45 femelles sur lesquelles on peut brancher des câbles à paires torsadées avec des prises
RJ45 mâles.
On voit ici un hub à gauche avec une prise RJ45 grossie à droite.
Le hub reçoit donc un signal électrique sur un de ses ports (une des prises RJ45 femelle) et
réémet le signal électrique reçu sur les autres ports pour que les machines connectées
reçoivent le signal. Ainsi, elles peuvent dialoguer entre elles par l'intermédiaire du hub.
Ce boîtier qui centralise la connexion des machines simule une topologie dite "en bus", où
toutes les machines connectées au média qui transmet l'information reçoivent le signal
transmis.
L'un des inconvénient de cet équipement est donc que le média qui permet le dialogue est
partagé entre toutes les machines. Elles utilisent toutes ce même média, et lorsque deux
signaux envoyés en même temps par deux machines se superposent, il en résultent une collision
au niveau du signal électrique qui devient alors incompréhensible. Plus il y a de machines et
plus la probabilité d'obtenir des collisions est importante. Ainsi le nombre de machines que
l'on peut connecter à un ou plusieurs hubs est limité. Le hub crée donc ce que l'on appelle un
domaine de collisions.
Les réseaux se développant de plus en plus, il est devenu important de trouvre une nouvelle
technologie permettant de s'affranchir de ce problème. Ainsi sont arrivés les ponts !
Le pont, ou bridge, est un équipement de couche 2. Cela veut dire qu'il est capable
d'interprêter les informations de couche 2 contenues dans la trame réseau, comme par exemple
Ethernet. Notamment, il peut lire les adresses MAC source et destination et savoir quelle
machine dialogue avec quelle autre, et dans ce cas, n'envoyer les informations qu'à la bonne
machine de destination. Ainsi, on réduit très fortement le risque de collisions. Par contre,
le pont n'a que deux ports. Il peut donc séparer un domaine de collisions en deux, pour limiter
le nombre de collisions. Il permet aussi dans certains cas de passer d'un protocole de couche
deux à un autre, par exemple d'Ethernet à token ring. Ainsi, on peut utiliser un pont pour
connecter deux domaines de collision, par exemple deux hubs. On augmente ainsi le nombre de
machines que l'on peut ajouter dans le réseau.
Mais si on peut faire un pont à deux ports, pourquoi pas à plusieurs ports ? et bien c'est ce
qui est mis en oeuvre dans un commutateur.
Le commutateur, ou switch, est donc aussi un équipement de couche 2. Il est ainsi capable
d'interprêter les informations de couche 2 contenues dans la trame réseau. Et en plus il a
x ports, ce qui fait qu'il sépare x domaines de collisions. Ainsi, on peut connecter des
machines entre elles par l'intermédiaire d'un switch, et quand elles voudront dialoguer
deux à deux, les autres ne verront pas le dialogue.
Un switch a donc un domaine de collision par port, et ont dit qu'il crée un domaine de
broadcast, car les broadcasts, qui sont des messages destinés à toutes les machines du réseau,
sont envoyés sur tous les ports du switch.
De plus, la plupart des switchs sont capables de garder en mémoire une trame si le port sur
lequel elles doivent l'envoyer est occupé. Ce mécanisme s'appelle en anglais du "store and
forward" (conserver et renvoyer) Nous n'avons donc plus de possiblités d'avoir des collisions !
Le switch permet donc de s'affranchir à la fois des problèmes de collisions, ainsi que de celui
du nombre de machines au sein d'un réseau (ou presque, aux broadcasts près :-)
Nous venons donc de voir différents équipements "de connexion" qui permettent de connecter
plusieurs machines entre-elles. Par contre, ils ne permettent pas à deux machines sur des
réseaux différents de dialoguer, cela ne peut se faire qu'à travers un routeur.
Un routeur est un équipement de couche 3 qui permet "d'interconnecter" des réseaux entre eux,
et donc de permettre aux différentes machines composant ces réseaux de dialoguer entre elles.
Il est donc non seulement capable de lire les informations de couche 3 d'un paquet IP, mais
aussi d'aiguiller un paquet vers un réseau ou un autre en fonction de l'adresse IP de
destination.
Les éléments à retenir sont:
- couche 1, hub
- couche 2, pont et switch
- couche 3, routeur
- un switch est un pont à plusieurs ports
- Un hub et un switch ont pour fonctionnalité commune de connecter des machines, et ont
souvent le même aspect physique (une boite avec des ports) mais ils ont des fonctionnalités
internes très différentes !!
- Chaque équipement travaillant à une couche différente du modèle OSI a une fonctionnalité
différente d'un autre. Ainsi, on ne peut pas comparer un routeur et un switch, ils ne
sont pas faits pour effectuer la même fonction. C'est comme comparer des carotes et des
petit-pois :-)
Si vous aussi vous rencontrez des termes ou des étrangetés réseau, merci de me les signaler :-)
Dans le cadre des cours de réseau que je donne à In'Tech INFO, j'apprends
aux élèves la technologie d'arp cache poisonning lors d'un TP. Pour ce faire, j'utilise le
merveilleux outil arp-sk. Cependant, avec l'arrivée du non moins merveilleux scapy,
le développement de arp-sk a été arrêté.
Scapy étant plus complexe à prendre en main (car beaucoup plus complet et puissant) pour mes
petites têtes blondes fraîchement arrivées dans le monde des réseaux, je préfère continuer
à utiliser arp-sk pour mes TPs.
Il existait un package Debian maintenu par Clément Stenac, mais il semblerait que le lien
vers la ressource soit coupé. J'ai donc créé un .deb à partir des sources qui devrait vous
permettre de l'installer facilement avec dpkg.
Il est disponible ici: arp-sk_0.0.16-1_i386.deb
|