Ce matin, l'hébergeur Oxalide a été en
panne pendant environ une heure et demie, entraînant
l'indisponibilité d'un grand nombre de sites Web, notamment de la
presse française.
C'est ainsi que 20 Minutes, l'Express, le Parisien, Slate,
Mediapart, Marianne, FranceInfo (mais pas Charlie
Hebdo) ont été injoignables. Comme tous les zexperts,
je ne sais pas ce qui s'est passé donc je vais me contenter de
dire ce que j'ai observé.
Plusieurs de ces sites Web renvoyaient un message
« 504 Gateway Time-out - nginx » qui est le
message typique de CloudFlare lorsque leurs
relais n'arrivent pas à joindre le site réel (CloudFlare n'est pas
un CDN, ils n'ont pas une copie du site
Web, ils servent juste d'écran, notamment en cas de
dDoS).
Oxalide avait arrêté d'envoyer des annonces
BGP, le protocole qui sert à annoncer au
reste de l'Internet qu'on est joignable. (Pourquoi ? Ne me posez
pas la question, j'ai dit que je n'en savais rien.) Voici le
looking glass de
Hurricane Electric, http://lg.he.net
, pendant la panne, le
préfixe IP
91.208.181.0
est inconnu :
Voyons les annonces BGP pendant la période de la panne. On
utilise pour cela les données de RouteViews. Elles sont en binaire, au format
MRT (RFC 6396), il faut les transformer en texte avec bgpdump. On sait
d'après Twitter l'heure approximative de la panne, on va donc récupérer
le fichier, le transformer en texte et le fouiller :
% wget ftp://archive.routeviews.org/route-views.linx/bgpdata/2015.01/UPDATES/updates.20150116.0845.bz2
% bgpdump updates.20150116.0845 > updates.20150116.0845.txt
Et explorons ce fichier, avec un
éditeur ordinaire. On voit bien la panne. L'annonce du préfixe
91.208.181.0/24
a commencé à être perturbée vers
08:51:01 UTC. À noter qu'il existe deux types
de mise à jour BGP dans un message, l'annonce de nouvelles routes
(
ANNOUNCE
) et le retrait de routes qui ne sont
pus bonnes (
WITHDRAW
). Paradoxalement, la
disparition d'une route (ici celle vers
91.208.181.0/24
) se traduit d'abord par des
ANNOUNCE
avant d'avoir le premier
WITHDRAW
. En effet, les routeurs BGP tentent de
passer par un autre chemin et relaient d'abord les autres informations
qu'ils ont, avant de renoncer et de retirer la route. Une panne se
signale donc d'abord par une floppée
d'
ANNOUNCE
. La première était :
TIME: 01/16/15 08:51:01
TYPE: BGP4MP/MESSAGE/Update
FROM: 195.66.224.21 AS6939
TO: 195.66.225.222 AS6447
ORIGIN: IGP
ASPATH: 6939 8218 47841
NEXT_HOP: 195.66.224.21
ANNOUNCE
91.208.181.0/24
À 08:51:01 (UTC), le routeur
195.66.224.21
transmet à son pair
195.66.225.222
une nouvelle
route vers
91.208.181.0/24
, car il vient de
perdre celle qu'il connaissait avant. Dans les secondes qui suivent,
des tas d'autres routeurs font pareil avant de se résigner, et de
retirer la route :
TIME: 01/16/15 08:51:10
TYPE: BGP4MP/MESSAGE/Update
FROM: 195.66.224.175 AS13030
TO: 195.66.225.222 AS6447
WITHDRAW
...
91.208.181.0/24
...
Attention au passage lorsque vous lisez l'attribut
ASPATH
(chemin d'AS), il se
lit de droite à gauche, l'AS d'origine est 47841 (Oxalide).
Une heure et demie après, la route vers
91.208.181.0/24
réapparait (avec les deux autres
préfixes IPv4 habituels d'Oxalide) :
TIME: 01/16/15 10:20:13
TYPE: BGP4MP/MESSAGE/Update
FROM: 195.66.224.51 AS6453
TO: 195.66.225.222 AS6447
ORIGIN: IGP
ASPATH: 6453 1299 47841
NEXT_HOP: 195.66.224.51
ANNOUNCE
95.131.136.0/21
146.185.40.0/21
91.208.181.0/24
En regardant le
looking glass, on voit que tout est revenu :
Enfin, presque, Emile Aben me fait remarquer
qu'IPv6 a mis plus de temps, le préfixe
2a02:c70::/32
n'est revenu que vers 11:15
UTC.
Des articles sur cette panne :