Premier réseau et première configuration

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]

Un peu de bureaucratie

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:      AS207661
as-name:      GITOYEN-MAIN-AS
descr:        The main Autonomous System of Gitoyen (Paris, France).
admin-c:      SB4267-RIPE2
tech-c:       GI1036-RIPE
remarks:      Looking Glass: http://lookinglass.gitoyen.net/3
import:       from AS128764
        action pref=100;
        accept AS-TISCALIFR
export:       to AS12876
        announce AS-GITOYEN
...
	 

1

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.

2

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.

3

La base contient aussi des commentaires en texte libre.

4

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, Rocquencourt1
descr:        BP 105, 78153 Le Chesnay CEDEX, France
admin-c:      NFC1-RIPE
tech-c:       NFC1-RIPE
...
	

1

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.net1
From: 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 ]#2


                                       Addresses Used 
Prefix          Subnet Mask      Size  Current 1-yr  2-yr  Description

                                  0          0    0     0   Totals

II. The Request3

#[ 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.)
      
1

L'essentiel de l'interaction avec le RIPE-NCC se fait par courrier électronique.

2

L'infrastructure était entièrement nouvelle. Mais si vous avez déjà un réseau, vous devrez le documenter ici.

3

Le gros morceau : il est recommandé de bien étudier le plan d'adressage (et de le rédiger) avant de le traduire en formulaire RIPE. Cela vous aidera également pour les discussions en interne ou bien si vous voulez solliciter de l'aide extérieure.

Une fois que vous aurez votre numéro d'AS et vos adresses IP, vous pourrez préparer votre configuration.

Configuration de BGP

Figure 1. Un seul fournisseur

Un routeur dans mon AS et un chez le fournisseur.

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/221
Paths: (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 55542
    213.248.70.2253 from 213.248.70.2254 (213.248.71.1845)
      Origin IGP, localpref 100, valid, external, best
      Last update: Sun Feb 23 17:19:53 2003
      
1

Nous avons bien une route pour ce réseau. Avec un réseau non annoncé ou bien filtré, nous aurions eu % Network not in table.

2

On voit ici la liste des AS par lesquels est passée l'annonce. BGP ne route pas entre réseaux mais entre AS. Cela n'est pas toujours optimal mais cela permet un strict contrôle de la politique de routage.

Ici, l'annonce a été émise par 5554, qui l'a transmise à 15410, puis à 5400 et 1299 avant qu'elle n'arrive chez nous.

3

Vous voyez ici le next hop, le routeur suivant pour atteindre ce réseau. C'est ce next hop qui sera mis comme intermédiaire dans la table de routage.

4

Vous voyez ici le routeur qui a fait l'annonce BGP. C'est souvent le même que le next hop.

5

Ici, le router ID du routeur qui a fait l'annonce.

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 »).

Plusieurs voisins

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 available1, best #22, table Default-IP-Routing-Table)

  13049 1299 5400 15410 5554
    213.228.3.2483
      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
                                         
1

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.

2

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.

3

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.01          213.248.70.225	            0 1299 7018 802 i
*> 6.1.0.0/16       213.248.70.225                0 1299 701 668 7170 1455 i
	
1

Malheureusement, Quagga, comme IOS, n'affiche pas la longueur du préfixe si celui-ci correspond aux anciennes classes A, B et C. Le préfixe 3.0.0.0 correspondant à une ancienne classe A, et le préfixe annoncé étant de longueur 8, la taille des anciennes classes A, Quagga n'indique pas la longueur.

2

Ici, l'AS path.

BGP avec IPv6

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
	

Autres routeurs

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.

[26] L'ensemble des options est documentée au RIPE.

[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.