Introduction au routage





#!/bin/handwriting
#File written at 04/01/00 by flowerz, this doc is Y2K compliant
#MAC power*f_u_c_k_i_n_g*book is not compliant with me

= Introduction au routage =

Ce petit document a ete ecrit dans un but precis , celui d'informer. De donner a un certain d'entre vous des idees (@&#! bon ce mac ca fait 3 fois qu'il me plante a la gueule avec mon texte fini donc cette fois je tacherai d'etre bref...). En gros des idees et des direction pour utiliser,s'amuser, exploiter le routage qui offre d'enorme possibilites.

= INDEX =

    1 - Presentation
    2 - Routage Statique
    3 - Routage Dynamique
    4 - Cas Particuliers (ICMP redir, Source routing)
    5 - Internet, et AS (Autonomous System)
    6 - Amusons nous....>=>

= Fin INDEX =

Note: Ce document ne vous expliquera pas le fonctionnement mais donnera une idee du fonctionnement. pour en avoir un gout plus precis reportez vous au rfc qui repondent en general a toutes les questions.

I Presentation

Pour commencer je ne serai pas sans vous presenter internet, vous y etes ,vous y vivez, cet espace est gouverne par certaine regles, dont certaines vous permettent d'envoyer vos paquets a l'autre bout de la planete avec la surete (ahem!!) que vos paquets arrivent.

Ceci graaaaace a la magie du routage IP, he vii!!

Alors il faut savoir 2 choses c est que le routage sur internet est hierarchise, je veux dire par la que chaque fournisseur fait son routage (en interne) et que par la suite un routage est mis place entre les != fournisseurs(AS).

Comment ca marche, et comment un routeur il route: le routeur recoit un paquet en provenance de A sur une de ses interfaces a destination de B

    1) il regarde si l'adresse destination B appartient a un meme reseau que l'adresse (1a) d'une de ses interfaces si oui then send the packet a cette interface (1b. ici if1) a moin qu une route particuliere soit donne pour cette destination (genre route add -host 172.31.29.25 gw 172.31.33.7) Si l'adresse dest n'appartient a aucun des rezo ou il a une de ses interfaces il envoie sur la route par default (1c).

pour pas faire chier on va garder des classe C et pas subnetter une classe C en sous reseaux de X ips (et pis chuis feignant la pas envie de reflechir pour calculer le netmask)

if0=172.31.33.1                 A=172.31.33.7
if1=172.31.32.1                 B=172.31.32.15
if2=172.31.31.1
if3=172.31.30.1(default route)

                |
        (1a)>>  |  if0
                |______
        (1b)<<  |  if1
                |______  ROUTEUR
                |  if2
                |______
        (1c)<<  |  if3
                |

Voila un exemple tout bete de routage.

II Routage Statique

C'est un des moyens les plus simple et basique de diriger ses paquets sur un ou vers un reseau. Les possibilites sont restreinte certes, mais non negligeable. Pour le fonctionnement tout le monde doit le connaitre, il se base sur la comparaison de l'adresse destination avec la table de routage (statique). Vous devez donc definir une table de routage faisant correspondre a un reseau, un host , une route particuliere. Le netmask connu de tous, vous permet de subnetter votre reseau et par consequent les routes, s en trouvent alterŽ. l'option gw(gateway) vous permet de preciser le prochains hop a contacter pour joindre le host destination. D'autres options vous permettent de definir une priorite basique sur des routes :

root ~#route add -net 194.174.53.0 gw 130.79.200.1 eth0 metric 0 (1)
root ~#route add -net 194.174.53.0 gw 194.47.43.1 eth0 metric 1 (2)

root ~#route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags  Metric  Ref     Use Iface
194.174.53.0    130.79.200.1   255.255.255.0      U      0      0       0   eth0
194.174.53.0    194.47.43.1    0.0.0.0            UG     1      0       0   eth0

dans cet exemple :

la route (1) sera la route emprunte pour joindre le reseau 194.174.53.0 si la passerelle est joignable, si la passerelle est injoingnable les paquets passerons sur la route (2). Si une QoS a ete definie , le routage sera effectue selon la priorite du(es) services , un peu comme dans IPv6 avec l en-tete priority. Le kernel linux propose encore d 'autre options tel que le policy routing permettant de faire du routage par services, host, protocoles definissant la meilleur route a prendre pour tel ou tel type de traffic.

III Le Routage Dynamique

Par opposition au routage statique, le routage dynamique permet une auto configuration des routes via des informations transitant sur le reseau, un ensemble de protocoles ont ete definis pour effectuer ces taches.
Deux grandes familles sont distinctes les protocoles de routage a vecteur distance(IGP:IGRP,RIP,EIGRP,etc...), et les protocoles de routage a etat de lien (OSPF), BGP(successeur d'EGP Exterior Gateway Protocol) etant un protocole de routage entre passerelles externe.
Comme nous le savons les routes statiques peuvent etre modifie a partir du moment ou l'on possede certain privilege et dependent d'une configuration des 2 cotes de la route. Les routes dynamiques se basant elles sur des informations concernant le reseau et transitant via le reseau peuvent certainement etre exploites.

A) les protocoles a vecteurs distance -theoriquement
ce type de protocole se contente d'avertir les routeurs voisins (cad directement connecte sur les interfaces) des reseaux qu'il sait atteindre, ainsi que de la distance pour les atteindre (flooding routing). Les routeurs voisins stockent les informations dans leur tables en rajoutant au distances 1 hop(celui pour joindre le dit routeur). De cette maniere chaque routeur annonce les routeur directement connecte et petit a petit chaque route est annonce sur chaque routeur.

          R6       R7
              \   /
		R1 ------ host0
            /        \
	R3		R2
    		       /   \
                    /         \
		R4		R5
				    \ 
					host1

Le routeur du reseau R1 sait atteindre R2,R3,R6 et R7, le routeur du reseau R2 dis au routeur de R1 qu'il sait atteindre R4 et R5. host1 fait partie de R5.
Donc pour atteindre host1 le routeur R1 qu appelle host0 sait qu'il doit contacter R2 (car il sait contacter R5)pour lui envoyer ses paquets et ceci sans que nous ayons eu a configurer les routes juste grace aux anonces RIP diffuse sur le reseau petit a petit.
Un exemple bete en gros =].

-les specs

3 GROS protocoles sont connus et utilise dans cette categorie: RIP (Routing Information Protocol),IGRP(Interior Gateway Routing Protocol),EIGRP(Extended Interior etc..)

RIP possede quelques limitations:

    * il limite le nombre de hop a 15
    * impose un masque de sous reseau unique pour le reseau
    * il ne prend pas en compte le type de liaison (debit, reponse etc.) mais uniquement le nombre de sauts, les choix ne sont donc pas forcement les plus judicieux dans certain cas.

IGRP est une version evolue de RIP avec moin de limitation (www.cisco.com pour plus d'info).
EIGRP c est une version encore ameliore d'IGRP qui supprime les limitation du nombre de sauts et tiens egalement compte du debit,charge,reponse d 'un lien.

B) Les protocoles a etat de liens

Ce sont les protocoles de nouvelles generations, charge d effectue un routage plus intelligent ( je suis loin de les connaitre parfaitement mais bon je vais vous en parler comme je peux ), ils sont en gros charges d'annoncer l'etat d un lien physique, conduisant a une map complete de la charge et de la topologie du reseau. Avec ce genre d 'information eterogene sur les differents lien d'un reseau on peut trouver la route la plus efficace.

Voila pour un presentation rapide, plus d'information sont contenu dans les RFC que vous trouverez n'importe ou sur le net, pour comprendre et utiliser ces protocoles. Je parlerai de BGP dans la partie Internet et AS il devra etre introduit en meme tps que la notions d'AS.

IV Cas Particulier

Bon le routage n est pas base que sur des routes(mais a 90% quand meme =]), le protocoles ICMP joue un role de chef d'orchestre quand a l evaluation de la charge sur certain lien, il peut egalement prevenir du mauvais choix d'une route (ICMP redir) ou d'une surcharge d'une passerelle (Source Quench) certain routeur tiennent compte de ces messages pour changer "eventuellement" votre route vers une certaine destination.

ICMP redirection :
Ce message est genere quand il detecte qu'un autre hote est en train d'utiliser la machine comme passerelle, alors qu'une route bien plus courte existe.

Exemple:

                                               host2
       Network0                               /
	  |                                /
	host1                            gw2 
          |_______________________________|
			       |
			      gw1(default)

Bon imaginons le host1 avec une table de routage simple et incomplete. pour envoyer ses packets a host2 il utiliserait sa route par default (etant donne que host2 pas dans le meme sous reseau) ici gw1, mais gw1 se rend compte que la route est mauvaise, renvoie le packet a gw2 et envoie un message ICMP redir a host1 lui disant que la route pour host2 vers gw2 est meilleure.
C'est un message lie au module de routage, permettant de corriger les erreurs (frequentes?) de routages statiques.

Source Routing

Comme son nom l indique permet de forger un packet, avec la totalite de la route devant etre suivi par le packet a l'interieur de celui ci. N'ayant moi meme jamais forger de packet source route, je serai incapable de donner plus d'information. Il faut savoir que ca existe et la RFC (a lire!!!) vous donnera plus d'information sur le fonctionnement et la construction de ce genre de packets, l'imagination fera le reste.

V Internet, et AS (Autonomous System)

Comme dis dans la presentation on met en oeuvre 2 type de routage le routage propre au fournisseur d'acces (en interne) et le routage entre les != fournisseur d'acces.
Avant de vouloir echanger des informations entre fournisseur, il faut deja router entre les clients d'un meme fournisseur. Chaque client met en place son routage en interne puis choisi une route par default vers le fournisseur.

Bon ca sera plus clair avec un schema :

	 _______                    BGP4
	| ASXXX |___________________________________________
	| ISP1  |					    |
	|_______|                                           |
						         ___|___
		\				        |ASYYY  |
		  \ 			         ______	| ISP2  |
		    \  BGP4		       / BGP4   |_______|
                      \                      /
		        \	 _______   /           (*) default route
			  \ _  _|ASZZZ  |_
			      |_ OUR ISP__|
			        |_______| \
                  ______________/  |  |     \__________
                 /                 |  |                \
	       /                   |   \ (*)             \(*)
             /(*)              (*)/      \                 \
      _____/_____          _____/_____     \___________    __\________
        Router 1            Routeur 2         Routeur 3      Routeur 4
           |                    |                 |              |
	  RIP	              EIGRP             IGRP            OSPF
        Reseau A             Reseau B          Reseau C        Reseau D
  

Bon reprenons!!
Je vais essayer d'etre un maximum synthetique et clair!!
1) les client mettent en place leur routage interne et donnent la route par default vers le fournisseur.
2) le fournisseur choisi un proto de routage pour interconnecter (automatiquement) tout ses clients. Il connecte ses clients pour que les routes s'annonces entre eux
3) le routage s 'effectue donc a l'interieur du fournisseur OUR ISP pour une interconnexion efficace entre tous ses clients et que la configuration sache se mettre en place seule (sans gerer des tonnes de routes statiques)
4) Les clients mettent un proto de routage interne a leur propre reseau et le fournisseur demande a ses clients de configurer leur routeur afin d'interoperer avec les siens. Donc entre les clients on est d'accord que la connection (du a la propagation des routes) se fera sans blemes. 5)lorsqu'un client voudra acceder a un reseau chez un autre ISP, il mettra en jeu le systeme des routes par default de son ISP.

Voila pour la partie routage interne.

Maintenant le routage entre ISP comment se passe t il? Des informations sur les reseaux que gerent chaque ISP sont echange par ces protocoles particuliers (que je connais peu) appele protocoles de passerelles externes tel que EGP(le premier du genre) et BGPv4 le plus utilise a present.
Pour pouvoir mettre en place ces systemes d'autogestion entre les passerelles des fournisseur et qu elles puissent echanger les informations les concernant, il a fallu mettre en place le concept d'AS (Autonomous System).
Chaque fournisseur, entite possedant un reseau public consequent et autonome se voit attribue par l'InterNIC, un numero unique qui est le numero d'AS. pour chaque route entre AS on y associe le numero de l AS origine de cette route.
La notion d'AS fait apparaitre encore une nouvelle notion et une nouvelle notation, la notation CIDR (Classless InterDomain Routing)

Exemple:

notation CIDR      |     Masque correspondant     |   Reseaux Couvert
______________________________________________________________________
10.0.0.0/8	   |	     255.0.0.0            |      10.0.0.0
10.0.0.0/7	   |         254.0.0.0            | 10.0.0.0;11.0.0.0
etc...

cela s'apparente au subnetting sur une classe (c est pareil :).

bon donc l'InterNIC attribue un numero d'AS permettant de definir grace a la notation CIDR independament des classes
(classes A,B,C,D,etc.. que nous connaissons) des groupes de reseaux, d'adresses gere, pour finalement permettre un routage entre ceux ci. (je vais y arriver :).
BGP qui est le protocole gerant les routes, ne tiens plus compte du nombre de passerelles traverse mais desormais du nombres d'AS.
d'autre part celui ci se decompose en 2 partie permettant a plusieur machine de gere le routage bgp sur un AS.
iBGP est le protocole permettant au machine de gestion de discuter entre elles(i for InternalBGP i mean.. :).
eBGP (for ExternalBGP) permet la gestion avec les AS directement connecte. Le principe se rapproche des protocoles de routages Internes (RIP,OSPF etc..), mais au niveau des AS le tout etant d'avoir une table complete des AS pour arriver a une destination voulue tout en optimisant le traffic, donc le choix d'une route par rapport a une autre en fonction du debit ou ce genre de truc.

Bon ensuite poru rire un coup il vous est possible de voir comment le routage entre AS s'effectue au niveau de votre ISP, par exemple pour moi Cybercable, une ptit requete sur les server du RIPE pour avoir les numeros d'AS du mon ISP (ipw outils tres utile :)

rival ~$ipw 212.198.211.60
...

route:       212.198.0.0/16
descr:       CYBERCABLE
descr:       Lyonnaise Communication
descr:       Paris
origin:      AS6678 		<=== et voila le numero d AS de cybercable =]
mnt-by:      AS6678-MNT
changed:     adm-tech@cybercable.tm.fr 19980325
source:      RIPE
...
% Rights restricted by copyright. See http://www.ripe.net/ripencc/pub-services/db/copyright.html

Puis pour avoir les routes des AS entrants et les routes vers les AS suffit de faire un whois sur le numero d'AS en question :)

rival ~$whois AS6678

...
aut-num:     AS6678
descr:       CYBERCABLE
descr:       Cybercable / Lyonnaise Communications
descr:       20, Place des vins de France
descr:       75614 Paris Cedex 12
descr:       FRANCE
as-in:       from AS3256 200 accept ANY AND NOT {0.0.0.0/0}
as-in:       from AS8297 200 accept ANY AND NOT {0.0.0.0/0}
as-in:       from AS5594 200 accept ANY AND NOT {0.0.0.0/0}
as-in:       from AS5436 100 accept AS5436
as-in:       from AS2686 100 accept AS-IGNEMEA
as-in:       from AS6729 100 accept AS6729
as-in:       from AS2917 100 accept AS-OLEANE
as-in:       from AS8228 100 accept AS-CEGETEL AS-BTFR
as-in:       from AS6771 100 accept AS6771 AS6774 AS5432
as-in:       from AS3215 100 accept AS-RAIN
as-in:       from AS3342 100 accept AS-PLANETE
as-in:       from AS3259 100 accept AS-INETWAYFR
as-in:       from AS3256 100 accept AS6 AS789 AS1717 AS8332 AS5410
as-in:       from AS3256 100 accept AS5630 AS6727
as-in:       from AS6804 100 accept AS6804 OR {194.183.193.0/24}
as-in:       from AS6804 100 accept {194.183.194.0/24, 194.183.196.0/24}
as-out:      to AS3256 announce AS-CYBERCABLE
as-out:      to AS5436 announce AS-CYBERCABLE
as-out:      to AS6729 announce AS-CYBERCABLE
as-out:      to AS8297 announce AS-CYBERCABLE
as-out:      to AS5594 announce AS-CYBERCABLE
as-out:      to AS2686 announce AS-CYBERCABLE
as-out:      to AS2917 announce AS-CYBERCABLE
as-out:      to AS6729 announce AS-CYBERCABLE
as-out:      to AS8228 announce AS-CYBERCABLE
as-out:      to AS6771 announce AS-CYBERCABLE
as-out:      to AS3215 announce AS-CYBERCABLE
as-out:      to AS3342 announce AS-CYBERCABLE
as-out:      to AS3259 announce AS-CYBERCABLE
as-out:      to AS3256 announce AS-CYBERCABLE
as-out:      to AS6804 announce AS-CYBERCABLE
admin-c:     MGR20-RIPE
tech-c:      DP1707-RIPE
tech-c:      PJ187-RIPE
remarks:     -----------------------------------------------
remarks:     Cybercable / Lyonnaise Communications
remarks:     Peering requests/info should be sent to:
remarks:     noc@cybercable.fr
remarks:     -----------------------------------------------
mnt-by:      AS6678-MNT
changed:     pdg@euroconnect.fr 19990817
source:      RIPE
...

Et voila toutes les routes Sympa non ? >=]
Il vous reste plus qu a regarder a qui sont interconnecter chacun des provider pour savoir qui annonce les routes a qui et ptet s'amuser un peu...

VI Amusons nous un peu >=]

Je ne donnerai pas de commande, ni rien, j ai deja pu tester certain truc et des potes ont teste d'autres choses.
Je vous files les idees a vous de les mettres en place.
c est pas un HOWTO_use_routing_for_hax_the_white_house.

[Exemple 1]

Bon Cybercable a mis ses #@$!#@ de quotas en route, mais _MAIS_ :)
les quotas semble (normalement je confirme rien) se baser uniquement sur les connection TCP pour eviter de facturer les stream en UDP(real audio, media player, etc..) donc , _DONC_
utilisons ca pour pas avoir 9 Go de Download a la fin du mois a payer :)

donc la demarche est tout simple
1) tu te prend une machine cybercable en ip fixe, genre une machine ou t as acces ou alors une machine au boulot, ou a l'univ, enfin un truc fixe ou tu puisse poser 2 , 3 truc suceptibles de t aider :)

2)Tu te monte un VPN avec de l'UDP en prenant soit une adresse libre publique de ton boulot (si boulot tu utilise) ou alors apres tu pourras faire du masq sur ton ip de VPN,pour le VPN tcp over UDP, y a CIPE ou Vtun pour ceux que j'utilise (cf schema en dessous).

3)tu te fous une route vers le host ou tu connecte ton VPN via la gw cybercable genre :
route add -host ip_publique_remote gw gw_cybercable eth0

puis tu te fous une route par default via ton adresse de VPN ok ? route add default gw ip_de_vpn_distante

et le tour est joue :)

Schema Exemple 1
MODE classique
               (default route)
[-MOI-] <-- tcp/udp(pas facture) --> [GW] <--- tcp/udp --> [INTERNET]
[-MACHINE_FIXE-]

Dans ta config normale ta passerelle par default est celle de cybercable ok? Tout ton traffic tcp/udp passe par la gw, et donc toutes tes connections TCP sont facturables.

VPN powered
        
            
[-MOI-] <---- VPN UDP (only)  -------->  [GW]              
                                          |
              		                 UDP           
                                          |
		                    [MACHINE_FIXE] <-- tcp/udp --> [INTERNET]
Dans cette config tu route vers [MACHINE_FIXE] avec qui tu etablit ton VPN. Celle ci devient ta passerelle par default pour tout le traffic via son adresse de VPN (privee). Il te faut juste une route vers [MACHINE_FIXE] (son ip publique) avec comme gw celle de cybercable.

Voila le tour est joue :)
Tout bete routage statique, mais bon ca marche

NB: faut pas oublier de NATer le reseau privee sur [MACHINE_FIXE] pour pouvoir acceder au net via celle ci, config de NAT classique, je n y reviendrais pas.

    [Exemple 2]

Bon c est sur ca demande un certain nombre de trucs. deja te faut une machine , avec des ips que tu libere ou libres tu colle a nouveau un VPN vers la machine de la boite.

Pouf tu prend plusieurs de leurs adresses publiques pour etablir ton VPN tranquillos.
Ensuite tu fais la meme chose qu avant, tu definit une route par default vers le VPN et une route vers le host ou tu fais le VPN par cybercable (par exemple) ok ? apres, cad de l autre cote tu te route plusieur IP publique de la boite chez toi, donc tu aliase sur certaine de tes machines de ton LAN des ips de la boite !!!! et donc leur reverse (IN PTR) avec :) Tu peux aller sur le net avec leur ip tout en restant en local chez toi en gros tu t es route une partie de leur reseau via ton VPN @ home capito ?
ca peut servir pour avoir des ips tres zoli ou simplement pour etre un machine trusted sur un reseau qui n est pas le tiens. Ca prend un peu de tps et il te faut au moin etre root sur une machine de l'autre cote pour etablir ton VPN.
Ce fichier etait une introduction pas un cour je le rapelle et pis j espere que ca vous as appris qqes trucs ou plus si oui vous pouvez toujours m ecrire boah je filerai mon mail la prochaine fois Bon je suis fatigue je donnerai pas plus de precisions, Cya on passe au greetz qqes uns au moin :)

/* #dev*this*string*crypted,spoty, shado, ank, kewly, zlz, lionel, drN0 and the others >=] */