Amusant : les différents serveurs DNS n'ont pas la même politique BGP
pour de l'anycast. Ce RFC recommande un numéro d'AS différent par
site. Que devrait faire l'AFNIC (qui n'a pas cette politique) ?

http://www.bortzmeyer.org/6382.html

----------------------------

Auteur(s) du RFC: Danny McPherson, Ryan Donnelly, Frank Scalzo (Verisign)

----------------------------


Ce court RFC propose un changement radical dans la gestion des annonces 
BGP par les services "anycastés". Actuellement, ils utilisent presque 
tous un seul numéro d'AS pour tous les nœuds d'un nuage "anycast". 
Notre RFC 6382, au contraire, suggère d'utiliser un numéro d'AS par 
nœud.

Comme l'explique la section 2 de notre RFC, l'"anycast" (RFC 4786) est 
désormais une technique banale. Elle permet notamment d'augmenter 
sérieusement la résistance aux dDoS. Dans le monde du DNS, l'"anycast" 
est particulièrement répandu (par exemple, .fr n'a plus que deux 
serveurs "unicasts", tous les autres sont "anycastés").

L'"anycast" fonctionnant en injectant la même route, via BGP, depuis 
des points différents du réseau, on peut se demander s'il faut que tous 
ces points annonçent le préfixe depuis le même AS, ou bien si chacun 
doit utiliser un AS différent ? Aujourd'hui, la quasi-totalité des 
services "anycastés" utilisent un seul numéro d'AS pour tous leurs 
points de présence (POP). VeriSign (la boîte des auteurs du RFC) est un 
des rares acteurs à le faire, pour certains de leurs serveurs. Cela a 
notamment l'avantage de préserver une ressource rare : les numéros d'AS 
n'étaient codés que sur seize bits. Cela facilite également la 
configuraion des routeurs. Et, aujourd'hui, cela évite des ennuis avec 
les systèmes d'alarme BGP <http://www.bortzmeyer.org/alarmes-as.html>, 
qui pourraient couiner en voyant le même préfixe avoir plusieurs AS 
d'origine. Hurricane Electric fournit ainsi une liste des préfixes 
annoncés par plusieurs AS 
<http://bgp.he.net/report/multi-origin-routes>. Même chose chez Cymru 
<http://www.cymru.com/BGP/incon_asn_list.html>. Comme illustré par un 
exposé à NANOG en 2001 
<http://www.nanog.org/meetings/nanog23/abstracts.php?nm=nanog23&pt=OTc3J
m5hbm9nMjM=>, c'était plutôt considéré comme une erreur.

Mais cette politique a aussi des défauts : lorsqu'un routeur BGP voit 
arriver une annonce pour un préfixe "anycasté", il ne sait pas 
exactement de quel n&#339;ud elle vient. Cela peut compliquer le déboguage 
des problèmes. Certains services ont un mécanisme pour identifier le 
serveur (RFC 5001 pour le DNS, ou bien le traditionnel quoique non 
normalisé hostname.bind dans la classe CH). Et, évidemment, on peut 
toujours utiliser traceroute pour trouver où se trouve telle instance 
"anycast". Essayons avec un serveur DNS "anycasté", d.nic.fr, depuis 
une machine située dans le Missouri :

% dig +nsid @d.nic.fr SOA fr.
...
; NSID: 64 6e 73 2e 6c 79 6e 32 2e 6e 69 63 2e 66 72  (d) (n) (s) (.) (l) (y) 
(n) (2) (.) (n) (i) (c) (.) (f) (r)
...
 C'est donc dns.lyn2.nic.fr qui a répondu.
Et on confirme qu'on touche l'instance de
Lyon (cette machine a surtout des instances
en métropole et dans les DOM-TOM et aucune aux États-Unis) :


# tcptraceroute d.nic.fr 53
Selected device eth0, address 208.75.84.80, port 43778 for outgoing packets
Tracing the path to d.nic.fr (194.0.9.1) on TCP port 53 (domain), 30 hops max
 1  208.75.84.1  0.000 ms  0.000 ms  0.000 ms
 2  host123.datotel.com (208.75.82.123)  0.000 ms  0.000 ms  0.000 ms
 3  stl-c1-g1-15.datotel.com (208.82.151.29)  10.000 ms  0.000 ms  0.000 ms
 4  stl-e2-g0-2.datotel.com (208.82.151.13)  0.000 ms  0.000 ms  0.000 ms
 5  vlan100.car2.StLouis1.Level3.net (4.53.162.121)  0.000 ms  0.000 ms  0.000 
ms
 6  ae-4-4.ebr2.Chicago1.Level3.net (4.69.132.190)  10.000 ms  9.999 ms  10.000 
ms
 7  ae-5-5.ebr2.Chicago2.Level3.net (4.69.140.194)  0.000 ms  9.999 ms  9.999 ms
 8  ae-6-6.ebr2.Washington12.Level3.net (4.69.148.145)  10.000 ms  19.999 ms  
19.999 ms
 9  ae-5-5.ebr2.Washington1.Level3.net (4.69.143.221)  19.999 ms  19.999 ms  
29.998 ms
10  ae-44-44.ebr2.Paris1.Level3.net (4.69.137.61)  89.994 ms  99.994 ms  
109.994 ms
11  ae-22-52.car2.Paris1.Level3.net (4.69.139.227)  109.994 ms  99.994 ms  
99.994 ms
12  JAGUAR-NETW.car2.Paris1.Level3.net (212.73.207.162)  109.993 ms  99.995 ms  
99.994 ms
13  dns.lyn2.afnic.cust.jaguar-network.net (78.153.224.126)  119.993 ms  
119.993 ms  139.992 ms
14  d.nic.fr (194.0.9.1) [open]  109.994 ms  119.993 ms  109.993 ms

Autre essai, avec un serveur de la racine du DNS,
L.root-servers.net, largement
"anycasté". Depuis un fournisseur en France :


% dig +nsid @l.root-servers.net SOA .
...
; NSID: 6c 79 73 30 31 2e 6c 2e 72 6f 6f 74 2d 73 65 72 76 65 72 73 2e 6f 72 67 
 (l) (y) (s) (0) (1) (.) (l) (.) (r) (o) (o) (t) (
-) (s) (e) (r) (v) (e) (r) (s) (.) (o) (r) (g)

On touche lys01.l.root-servers.org. Comme son
opérateur, l'ICANN, utilise (comme beaucoup),
les codes aéroport pour nommer les machines, on
voit qu'elle est également à Lyon (LYS est l'aéroport de
cette ville). Depuis une machine d'un autre
FAI français, la même requête renvoie
lux01.l.root-servers.org, ce qui situe le
n&#339;ud "anycast" au Luxembourg. Et, en testant depuis la
machine missourienne citée plus haut, on atteint
lax12.l.root-servers.org soit Los Angeles.


Ces techniques sont toutefois imparfaites. Or, les services "anycast" 
ont des vulnérabilités paticulières. Par exemple, l'injection de routes 
pirates dans BGP par un méchant est plus difficile à détecter (cf. 
section 5). L'"anycast" a besoin d'outils de déboguage puissants, pour 
venir à bout des problèmes de routage, volontaires ou involontaires, 
qui peuvent se manifester. Pire, on peut avoir des cas où les 
différentes instances d'un même nuage 
<http://www.bortzmeyer.org/detournement-racine-pekin.html> "anycast" ne 
répondent pas exactement la même chose, et il est dans ce cas crucial 
de pouvoir identifier sans aucune ambiguïté celles qui sont 
différentes.

Avant la recommandation officielle, un petit détour de terminologie 
(section 1). Parmi les termes importants (lire le RFC 4786 pour plus de 
détails) :
* *Bassin d'attraction* ("catchment"), terme emprunté à l'hydrographie 
(la zone dont toutes les eaux finissent dans une rivière donnée), 
désigne la partie de l'Internet qui envoie ses paquets à un n&#339;ud (une 
instance "anycast") donné,
* N&#339;ud local, instance d'un service "anycast" qui ne publie son préfixe 
que dans une partie de l'Internet (typiquement, uniquement les 
participants à un point d'échange donné, en utilisant la communauté BGP 
no-export). La recommandation de ce RFC s'applique à tous les n&#339;uds, 
locaux ou globaux,
* N&#339;ud global, instance qui annonce son préfixe à l'Internet entier.


Venons-en maintenant à la nouveauté de ce RFC. Il tient en une phrase 
(section 3), « *Il faudrait utiliser un numéro d'AS différent par 
n&#339;ud* ». Le but est de fournir un mécanisme discriminant les annonces. 
Si on a deux n&#339;uds, un en Chine (AS 65536) et un en Europe (AS 65551), 
et qu'on voit le préfixe "anycast" 192.0.2.64/26 annoncé depuis l'AS 
65536, on sait qu'on s'adressera à l'instance chinoise. On peut même 
filtrer sur l'AS d'origine pour éviter cela 
<http://www.bortzmeyer.org/detournement-racine-pekin.html>. 
L'utilisation de numéros d'AS différents permettra de choisir sa 
politique de routage.

Est-ce sans inconvénient ? Actuellement, le principal problème risque 
d'être les systèmes d'alarme 
<http://www.bortzmeyer.org/alarmes-as.html> qui s'inquiéteraient de ces 
différentes origines. Ainsi, BGPmon <http://bgpmon.net/>, par défaut, 
considère qu'une annonce depuis un autre AS que celui indiqué comme 
origine, est une attaque possible ("possible hijack") et il alarme. 
Toutefois, le même BGPmon permet d'indiquer plusieurs AS d'origine 
supplémentaire, ce qui lui permet de gérer la nouvelle politique. (Une 
société comme PCH a environ soixante localisations physiques dans le 
monde, Netnod <http://www.netnod.se/> en a cent : les enregistrer 
toutes comme origine possible, auprès d'un système d'alarme BGP, 
pourrait être fastidieux. À noter que la fonction "auto-detect" de 
BGPmon simplifie cela : comme l'explique l'auteur « "Just click on the 
prefix to edit it, then click on the little green icon next to the 
'Additional Origin AS' section. It will then show a popup with all 
additional origin ASn's we have in our database. You can then copy 
paste that line into the 'Additional Origin AS' field." ». Un exemple 
est donné par un serveur de .com, m.gtld-servers.net 
<http://www.bgpmon.net/autodetect_origin.php?prefix=192.55.83.0&length=2
4&originas=36618>.)

Autre inconvénient possible : la consommation excessive de numéros 
d'AS. Toutefois, depuis le RFC 4893, ceux-ci peuvent désormais être 
codés sur 32 bits et le risque d'épuisement disparait.

Après cette nouvelle recommandation de consommer un numéro d'AS par 
site, la section 4 du RFC rassemble divers conseils aux gérants de 
services "anycast" :
* Publier des informations sur la localisation physique de la machine 
(la méthode n'est pas précisée mais on peut penser aux enregistrements 
LOC du RFC 1876, peut-être en les attachant au nom obtenu par la 
requête NSID),
* Publier dans les IRR les informations sur les AS auxquels le n&#339;ud 
"anycast" s'interconnecte (par exemple en RPSL, RFC 4012).


Et la section 6 contient l'examen de divers points pratiques liés au 
déploiement de cette nouvelle politique. Les opérateurs de services 
"anycast" critiques ont été largement consultés avant la publication du 
RFC, ce qui ne veut pas dire qu'ils déploieront cette recommandation 
tout de suite (aucun n'a annoncé de plan précis et l'ISC a au contraire 
annoncé qu'ils ne le feraient pas 
<https://www.isc.org/community/blog/201109/origin-asn-anycasted-services
>, voir plus loin leur analyse). En gros, la nouvelle politique fera 
davantage de travail au début (obtenir les numéros d'AS - ce qui 
nécessitera probablement un changement dans la politique des RIR, 
ajouter une colonne pour le numéro d'AS dans la base de données des 
instances "anycast", penser à indiquer le bon numéro d'AS lorsqu'on 
fait une demande de "peering", changer les centaines de "peerings" 
existants, etc) mais simplifiera la surveillance du service, en 
permettant de trouver plus facilement l'origine d'une annonce.

Et pour finir, un exemple de ce que donne un excellent outil d'analyse 
existant, le RIS <http://www.ris.ripe.net/>, avec le serveur de .com 
déjà cité (annoncé par trois AS) : 
http://www.ris.ripe.net/dashboard/192.55.83.0/24.

Pour avoir un autre point de vue, l'ISC a expliqué le fonctionnement de 
l'anycast chez eux 
<http://www.isc.org/community/blog/201008/f-root-routing-how-does-it-wor
k-0>, une explication détaillée de la supériorité de leur système 
<http://www.mail-archive.com/grow@ietf.org/msg00886.html>, ainsi que 
leur liste de peerings <http://www.isc.org/community/peering>.

Merci à Jean-Philippe Pick pour sa relecture et pour les informations.

---------------------------
Liste de diffusion du FRnOG
http://www.frnog.org/

Répondre à