
Nous allons commencer par un cas tellement simple qu'il ne justifie pas réellement d'utiliser BGP. Nous avons un AS d'un petit opérateur et celui d'un fournisseur de connectivité plus gros. Si vous êtes dans la sitation du petit opérateur, vous ne pouvez pas commencer à faire du BGP comme cela : il vous faudra un numéro d'AS et des adresses IP[22]
Contrairement aux IGP (qui ne regardent que vous), les EGP comme BGP nécessitent une coordination centralisée : vos routes vont en effet apparaitre dans un espace commun, la DFZ (Default-Free Zone), l'ensemble des routeurs qui n'ont pas de route par défaut. Les ressources étant rares dans la DFZ (surtout en IPv4), une attribution coordonnée est nécessaire, avec son inévitable (?) paperasserie.
Les numéros d'AS sont des entiers stockés sur 16 bits. Il ne peut donc y en avoir que 65535 au niveau mondial, ce qui est très peu. Genuity a obtenu le 1, Gitoyen a eu, beaucoup plus récemment, le 20766.
Les adresses IP, quant à elles, sont encore plus rares, en IPv4 (en IPv6, elles s'obtiennent au contraire très facilement et c'est une puissante motivation pour passer à IPv6).
Ces deux types de ressources s'obtiennent auprès des RIR (Regional Address Registry) et il en existe actuellement quatre : ARIN en Amérique du Nord, LACNIC en Amérique du Sud, APNIC en Asie-Pacifique et RIPE-NCC en Europe[23].
Je parlerai surtout du RIPE-NCC (Réseaux IP Européens - Network Coordination Center)[24] car c'est celui que je connais le mieux.
Le RIPE-NCC est un registre : il attribue des ressources (adresses IP - v4 et v6 - et numéros d'AS, notamment) et garde trace de ces allocations. Il gère une base de données de ces ressources, accessible publiquement par le protocole whois (RFC 0954). Par exemple, pour connaitre le "propriétaire"[25] de l'AS 20766 : whois -h whois.ripe.net AS20766
aut-num: AS20766as-name: GITOYEN-MAIN-AS descr: The main Autonomous System of Gitoyen (Paris, France). admin-c: SB4267-RIPE
tech-c: GI1036-RIPE remarks: Looking Glass: http://lookinglass.gitoyen.net/
import: from AS12876
action pref=100; accept AS-TISCALIFR export: to AS12876 announce AS-GITOYEN ...
| Le serveur whois présente les données sous un format attribut:valeur. Ici, l'attribut aut-num vaut AS20766. D'autres protocoles, comme celui en cours d'étude au sein du groupe de travail Crisp, de l'IETF, présenteront ces mêmes données de manière différente. |
| La base contient des informations sociales sur les personnes ou organismes à contacter en cas de problèmes. Ces informations sont accessibles via un handle, un identificateur, ici le mien. |
| La base contient aussi des commentaires en texte libre. |
| L'objet contient des informations sur la politique de routage de l'AS. Elles sont exprimées en langage RPSL (RFC 2622 et RFC 2650). Ici, on apprend que Gitoyen échange des routes avec l'AS 12876, Tiscali. |
Si on veut savoir de qui dépend l'adresse IPv4 192.134.7.250 , on fait un : whois -h whois.ripe.net 192.134.7.250
inetnum: 192.134.0.0 - 192.134.7.255 netname: NIC-FR-BLOC descr: AFNIC descr: c/o INRIA descr: Domaine de Voluceau, Rocquencourtdescr: BP 105, 78153 Le Chesnay CEDEX, France admin-c: NFC1-RIPE tech-c: NFC1-RIPE ...
| Cette adresse postale n'est plus valable depuis longtemps mais cela illustre bien la méfiance avec laquelle il faut lire le contenu de ces bases. |
On voit que cette adresse a été allouée à l'AFNIC. Essayons-en une autre :
whois -h whois.ripe.net 81.6.7.35
inetnum: 81.6.7.0 - 81.6.7.63
netname: HUGIT-G-CH-NET
descr: Hug-IT, Aadorf, Switzerland
country: CH
admin-c: MH2254-RIPE
tech-c: gnoc3-ripe
...
Ici, l'objet RIPE reflète une affectation à un client. Le fournisseur d'accès est (notez l'option -L[26] pour avoir les réseaux moins spécifiques) :
whois -h whois.ripe.net -L 81.6.7.35
inetnum: 81.6.0.0 - 81.6.63.255
netname: CH-GREEN-20020613
descr: PROVIDER LOCAL REGISTRY
descr: Green Connection AG
country: CH
admin-c: GH36-RIPE
tech-c: OB22-RIPE
...
Pour obtenir des ressources analogues, adresses IP ou bien numéro d'AS, il faut s'adresser à un LIR (Local Internet Registry), c'est-à-dire un membre de RIPE qui a autorité pour demander (en les justifiant !) des ressources et qui gère les objets le concernant dans la base du RIPE-NCC[27]. Bien sûr, vous pouvez devenir LIR vous même mais c'est coûteux et cela nécessite une équipe rompue aux interactions avec une bureaucratie internationale. Souvent, vous ferez donc appel à un LIR (la liste figure sur le site Web du RIPE-NCC) qui demandera pour vous. Sans doute vous laissera t-il remplir une partie des formulaires de demande comme celui qui suit, notamment la section où vous justifiez votre demande d'adresses.
Reply-To: noc@gitoyen.netFrom: Stephane Bortzmeyer <bortzmeyer@gitoyen.net> To: hostmaster@ripe.net Cc: noc@gitoyen.net Subject: NEW address assignment (and allocation) needed X-NCC-RegID: fr.gitoyen #[ OVERVIEW OF ORGANISATION TEMPLATE ]# Gitoyen is made of five Internet providers (Netaktiv, Gandi, Globenet, Placenet and FDN). The legal status is a French GIE (Groupement d'Intérêt Economique). All of the members are currently connected by other providers but intend to use only Gitoyen in the near future. We will need IP addresses for the infrastructure of Gitoyen and for its members, which will in turn assign addresses to some customers. This request of assignment is for Gitoyen only. http://www.gitoyen.net/ (in French only) #[ REQUESTER TEMPLATE ]# name: Stéphane Bortzmeyer organisation: Netaktiv country: FR phone: +33 140137920 e-mail: noc@gitoyen.net #[ USER TEMPLATE ]# name: Stéphane Bortzmeyer organisation: Gitoyen country: FR phone: +33 140137920 e-mail: noc@gitoyen.net #[ CURRENT ADDRESS SPACE USAGE TEMPLATE ]#
Addresses Used Prefix Subnet Mask Size Current 1-yr 2-yr Description 0 0 0 0 Totals II. The Request
#[ REQUEST OVERVIEW TEMPLATE ]# request-size: 64 addresses-immediate: 24 addresses-year-1: 48 addresses-year-2: 64 subnets-immediate: 2 subnets-year-1: 2 subnets-year-2: 2 inet-connect: Gitoyen will connect in a few days, at the POPs Sfinx and Telehouse2 in Paris. country-net: FR private-considered: Yes request-refused: No PI-requested: Yes address-space-returned: No #[ ADDRESSING PLAN TEMPLATE ]# Addresses Used Prefix Subnet Mask Size Immediate 1-yr 2-yr Description 0.0.0.0 255.255.255.224 32 12 24 32 Gitoyen main presence points at Sfinx 0.0.0.0 255.255.255.224 32 12 24 32 Gitoyen main presence points at Telehouse2 64 24 48 64 Totals III. Database Information #[ NETWORK TEMPLATE ]# inetnum: netname: Gitoyen-main descr: Gitoyen main presence points in Paris country: FR admin-c: SB4267-RIPE tech-c: GI1036-RIPE status: ASSIGNED PI notify: noc@gitoyen.net #[TEMPLATES END]# IV. Optional Information A request for an AS is pending: NCC#2001052545. We will use BGP and connect to 3 upstream providers. We do not had any allocation yet, so it is a request both for an allocation and an assignment. We expect to have an AS IPV6 during 2002 and migrate to ipv6 end of 2003. This request is only for Gitoyen central infrastructure. Requests for IP addresses for members will follow. (Members already have IP addresses, unlike Gitoyen, an will return them.)
Une fois que vous aurez votre numéro d'AS et vos adresses IP, vous pourrez préparer votre configuration.
Elle peut être aussi simple que (sur un Unix avec Quagga) :
hostname myrouter router bgp 20766 bgp router-id 80.67.160.1 network 80.67.160.0/19 neighbor 213.248.70.225 remote-as 1299 log file /var/log/zebra/bgpd.log
Ici, on déclare son propre numéro d'AS, on donne au routeur un router ID[28], on indique le ou les réseaux que l'on va annoncer et le ou bien les voisins avec qui on va établir une session BGP. Chaque voisin doit être accessible directement, sans routage[29].
C'est tout pour une première configuration. Les points à noter :
Contrairement à OSPF, on doit annoncer exactement le préfixe réseau que l'on veut diffuser. Le routeur ne tiendra pas compte des routes réelles (le routeur qui fait du BGP avec le reste du monde n'a pas forcément une interface avec tous vos réseaux : pour les joindre, il compte sur un IGP, comme OSPF). Cela peut dépendre du routeur, toutefois donc, si votre routeur n'annonce pas la route spécifiée par network, vous pouvez toujours vérifier ce point.
L'adresse IP du voisin et son AS vous ont été communiqués par lui. Le nombre de possibilités de malentendus est très élevé en matière de réseau, surtout lorsqu'un suédois vous dicte une adresse IP en anglais au téléphone. Il est donc prudent de relire plusieurs fois sa configuration.
Une fois la session établie, vous devez voir arriver des routes. Ici, le journal de Quagga, si vous avez inclus un debug bgp updates dans la configuration :
2003/02/21 06:28:32 BGP: 213.248.70.225 rcvd 193.9.124.0/22 2003/02/21 06:28:32 BGP: 213.248.70.225 rcvd UPDATE w/ attr: nexthop 213.248.70.225, origin i, path 1299 3356 13126 12842
En vous connectant à la console de Quagga, vous devriez voir les annonces (le réseau 193.9.124.0/22 a été choisi au hasard) :
myrouter> show ip bgp 193.9.124.0 BGP routing table entry for 193.9.124.0/22Paths: (1 available, best #1, table Default-IP-Routing-Table) Advertised to non peer-group peers: 62.220.128.140 80.67.160.39 208.3.246.225 1299 5400 15410 5554
213.248.70.225
from 213.248.70.225
(213.248.71.184
) Origin IGP, localpref 100, valid, external, best Last update: Sun Feb 23 17:19:53 2003
Avec les commandes ci-dessus, on peut afficher les routes reçues. Normalement, elles sont installées dans la table de routage du routeur (netstat -rn sur Unix) et utilisées par celui-ci lors du forwarding (traceroute une-adresse-IP pour vérifier).
Maintenant, comment savoir si nos routes à nous sont bien annoncées ? Le plus simple est d'utiliser un looking glass (voir la section intitulée « Les looking glasses »).
Bien sûr, BGP avec un seul voisin n'a guère d'intérêt. On va donc configurer deux sessions :
hostname myrouter router bgp 20766 bgp router-id 80.67.160.1 network 80.67.160.0/19 neighbor 213.228.3.248 remote-as 13049 neighbor 213.228.3.227 remote-as 8975 log file /var/log/zebra/bgpd.log
Maintenant, nous avons deux sessions différentes et les routes sont apprises par deux voisins différents.
myrouter> show ip bgp 193.9.124.0 BGP routing table entry for 193.9.124.0/22 Paths: (2 available, best #2
, table Default-IP-Routing-Table) 13049 1299 5400 15410 5554 213.228.3.248
Origin IGP, localpref 100, valid, external Last update: Sun Feb 23 17:19:53 2003 8975 5400 15410 5554 213.228.3.227 Origin IGP, metric 1625, localpref 100, valid, external, best Last update: Sun Feb 23 17:20:02 2003
| Nous avons maintenant plusieurs routes possibles (ici, deux). Tous les voisins n'annoncent pas forcément toutes les routes et donc, même avec plusieurs voisins, on peut n'avoir qu'une seule route. |
| Comme il y a plusieurs routes possibles, il va falloir en choisir une. L'algorithme de sélection est décrit en la section intitulée « Sélection de routes ». Ici, c'est l'AS path le plus court qui a emporté la décision. |
| Ici, l'adresse IP du voisin. |
Pour voir les routes apprises d'un voisin particulier :
myrouter> show ip bgp neighbors 213.248.70.225 received-routes BGP table version is 0, local router ID is 80.67.160.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 3.0.0.0213.248.70.225 0 1299 7018 80
i *> 6.1.0.0/16 213.248.70.225 0 1299 701 668 7170 1455 i
BGP fonctionne de la même façon avec IPv6. Notons que la configuration de Quagga est un peu plus difficile, il faut spécifier l'address family :
router bgp 65532 neighbor fec0:ff:200::1 remote-as 100 address-family ipv6 network fec0:fe::/32 neighbor fec0:ff:200::1 activate exit-address-family
On voit alors des sessions BGP au dessus d'IPv6 :
myrouter> show ipv6 bgp summary
BGP router identifier 10.4.200.2, local AS number 65532
5 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
fec0:ff:200::1 4 100 20 22 0 0 0 00:17:43 1
Total number of neighbors 1
et des routes IPv6 :
myrouter> show ipv6 bgp
BGP table version is 0, local router ID is 10.4.200.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Metric LocPrf Weight Path
*> 2001:910::/32 0 0 100 i
fec0:ff:200::1(fe80::206:5bff:fef1:529b)
*> fec0:fe::/32 32768 i
::
Total number of prefixes 2
D'autres systèmes d'exploitation auront des commandes différentes. Pour donner une idée, voici une configuration sur un routeur Extreme :
config bgp add network 192.168.2.0/24 config bgp as-number 65002 config bgp routerid 192.168.1.2 enable bgp create bgp neighbor 192.168.1.1 remote-AS-number 65000 enable bgp neighbor all
[22] Nous verrons plus tard comment utiliser des ressources privées si vous n'arrivez pas à obtenir de telles ressources publiques - un problème fréquent en Afrique, par exemple.
[23] Il y a eu des discussions pour la création d'un RIR en Afrique, Afrinic, mais qui n'ont pas encore débouché sur quelque chose de concret.
[24] Qu'on appelle souvent RIPE tout court par abus de langage : normalement, le RIPE est une association des opérateurs, le RIPE-NCC étant le RIR.
[25] Les RIR précisent bien que les adresses ne sont que prêtées : vous n'en êtes pas le propriétaire.
[27] Les LIR assurent cette tâche avec un sérieux très variable et c'est pour cela que la base est souvent erronnée.
[28] Il n'est pas nécessaire de spécifier un router ID. Le routeur en choisit un automatiquement parmi les adresses IPv4 de la machine. Mais le choisir explicitement comme étant l'adresse "principale" de la machine aidera au déboguage, par exemple lors d'un show ip bgp neighbor.
[29] La règle exacte est moins stricte, dans certains cas, il est possible d'atteindre un voisin BGP via plusieurs sauts.