Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

L'Internet, ça ne marche pas de partout

Première rédaction de cet article le 13 août 2020
Dernière mise à jour le 16 août 2020


Lorsqu'une panne survient et empêche l'accès à une ressource sur l'Internet, il y a parfois discussion car certaines personnes disent « mais non, pour moi, ça marche », alors que la victime originelle insiste « je te dis que c'est cassé ». Les deux peuvent avoir simultanément raison. Les pannes peuvent dépendre d'où vous vous trouvez, mais elles dépendent surtout de votre réseau d'accès à l'Internet. Voyons un exemple concret avec une panne affectant Algérie Télécom et qui empêche, par exemple, les abonnés d'Orange en France d'accéder à http://cetic.dz/.

Avant de tester depuis plusieurs endroits, il faut s'assurer qu'on dispose d'un moyen fiable de tester. Beaucoup de gens font une confiance aveugle à la commande ping mais ils ont tort : les paquets ICMP de type Echo qu'elle utilise peuvent être bloqués par un pare-feu hargneux, sans que les autres services soient affectés. Dans le cas de cetic.dz, le signalement initial portait sur un problème DNS et on aurait donc pu tester avec des requêtes DNS mais, ici, ce n'est pas la peine : les machines en cause, 193.251.169.83 et 193.251.169.84 répondent en ICMP Echo :

% ping -c 3 193.251.169.83

PING 193.251.169.83 (193.251.169.83) 56(84) bytes of data.
64 bytes from 193.251.169.83: icmp_seq=1 ttl=50 time=81.2 ms
64 bytes from 193.251.169.83: icmp_seq=2 ttl=50 time=79.2 ms
64 bytes from 193.251.169.83: icmp_seq=3 ttl=50 time=79.3 ms

--- 193.251.169.83 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 79.184/79.875/81.183/0.953 ms
  

Depuis un réseau où ça ne marche pas :

% ping -c 3 193.251.169.83
PING 193.251.169.83 (193.251.169.83) 56(84) bytes of data.

--- 193.251.169.83 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2052ms
  

Bon, nous avons un problème variable : à certains endroits, ça marche, à d'autres pas. Dans des cas comme cela, lorsque les gens discutent sur un forum quelconque du problème, ceux et celles qui ont compris que le problème dépendait du point de mesure précisent souvent leur expérience en indiquant leur ville (« depuis Marseille, ça marche »). C'est une erreur car ce n'est en général pas la localisation géographique qui compte mais plus souvent le réseau d'accès, donc le FAI ou plus exactement l'AS. Il est curieux que même sur une liste de diffusion de professionnels du réseau comme NANOG, les gens qui signalent une panne indiquent plus souvent leur ville que leur AS… Pour M. Toutlemonde, comme il ne connait pas en général son AS, indiquer le FAI est plus utile.

Donc, ici, on a une panne qui dépend de l'endroit. Comment la tester ? J'ai utilisé des comptes sur deux machines différentes, connectées à des opérateurs différents. Mais si on n'a pas des comptes partout, on fait comment ? Eh bien le plus simple est d'utiliser les sondes RIPE Atlas, ces petits boitiers installés par des volontaires un peu partout et qui peuvent effectuer des mesures actives, créés par exemple via le logiciel Blaeu. Demandons à cent sondes Atlas de pinguer 193.251.169.84 :

% blaeu-reach --requested 100 193.251.169.84
98 probes reported
Test #26682471 done at 2020-08-13T12:10:32Z
Tests: 245 successful tests (83.6 %), 0 errors (0.0 %), 48 timeouts (16.4 %), average RTT: 111 ms
  

On aurait dû avoir à peu près 100 % de succès mais on n'a que 84 %. Et, surtout, cela dépend du réseau. Si on essaie depuis Orange (AS 3215) :

% blaeu-reach --requested 100 --as 3215 193.251.169.84
96 probes reported
Test #26682501 done at 2020-08-13T12:12:04Z
Tests: 3 successful tests (1.0 %), 0 errors (0.0 %), 285 timeouts (99.0 %), average RTT: 139 ms   
  

On a cette fois quasiment uniquement des échecs. Depuis un autre opérateur (ici, Free), tout marche :

% blaeu-reach --requested 100 --as 12322 193.251.169.84
98 probes reported
Test #26683832 done at 2020-08-13T14:08:11Z
Tests: 293 successful tests (99.7 %), 0 errors (0.0 %), 1 timeouts (0.3 %), average RTT: 52 ms
  

Mais pourquoi est-ce que ça marche depuis Free et pas depuis Orange ? La première tentation est de suspecter un problème BGP, le protocole qui distribue les routes sur l'Internet. Le service RIPE Stat nous permet de voir le routage du préfixe concerné et, pour citer RIPE Stat, « At 2020-08-13 00:00:00 UTC, 193.251.169.0/24 was 100% visible (by 321 of 321 RIS full peers). ». Bref, le préfixe 193.251.169.0/24 est visible partout, et ne semble pas massivement filtré.

Mais attention, le RIS, réseau de routeurs sur lequel se base RIPE Stat n'est pas présent partout. Et, notamment, il ne semble pas présent chez OpenTransit, transitaire d'Orange et membre du même groupe. On notera en effet qu'un préfixe IP plus général, 193.251.160.0/20, est annoncé par la société OpenTransit. Et, en regardant le looking glass d'OpenTransit on ne voit que ce préfixe plus général, pas le /24. opentransit-algerietelecom.png

Il semble donc bien qu'OpenTransit n'accepte pas l'annonce BGP d'Algérie Télécom pour 193.251.169.0/24 et n'ait pas de route pour ce préfixe.

La faute à qui dans cette embrouille ? C'est évidemment difficile à dire. Le préfixe 193.251.160.0/20 est bien à Orange, comme on le voit avec whois :

% whois 193.251.160.0/20
...
inetnum:        193.248.0.0 - 193.253.255.255
netname:        FR-TELECOM-248-253
org:            ORG-FT2-RIPE
...
organisation:   ORG-FT2-RIPE
org-name:       Orange S.A.
  

Mais le préfixe plus spécifique 193.251.169.0/24 a bien été délégué proprement à Algérie Télécom :

% whois 193.251.169.0/24
...
inetnum:        193.251.169.0 - 193.251.169.255
netname:        Djaweb-Algerie-Telecom
descr:          Internet Service Provider of Algerie Telecom
country:        DZ
  

Il n'y a par contre pas d'objet « route » dans les IRR pour 193.251.169.0/24, on ne voit que la route du plus général /20 :

% whois -T route 193.251.169.0/24
...
route:          193.251.160.0/20
descr:          France Telecom
descr:          OPENTRANSIT
origin:         AS5511
  

Mais le préfixe 193.251.169.0/24 a un ROA (Route Origin Authorizations, une signature des ressources Internet pour garantir leur authenticité, cf. RFC 6482 :

% whois -h whois.bgpmon.net 193.251.169.0/24
...
Prefix:              193.251.169.0/24
Origin AS:           36947
Origin AS Name:      ALGTEL-AS, DZ
RPKI status:         ROA validation successful
...
  

Il n'aurait pas pu avoir ce ROA sans l'autorisation du titulaire du préfixe plus général (Orange). Donc, il se pourrait qu'il s'agisse d'un problème interne à Orange, une délégation d'un préfixe incomplètement faite.

Ah, et pour revenir au problème original, on m'avait signalé l'injoignabilité de cetic.dz en suspectant un problème DNS. En effet, le domaine cetic.dz ne fonctionne pas du tout depuis Orange. Mais c'est parce que ce domaine n'a que deux adresses IP pour ses serveurs de noms, les 193.251.169.83 et 193.251.169.84 cités plus haut, et que ces deux adresses sont injoignables depuis Orange. Le problème n'était donc pas de la faute des résolveurs d'Orange mais du routage.

J'en profite pour rappeler les bonnes pratiques de robustesse DNS : attention aux SPOF, ne faites pas comme cetic.dz, ne mettez pas tous vos serveurs DNS faisant autorité dans le même /29… Voici les serveurs de cetic.dz vus par check-soa. On pourrait croire qu'ils sont trois mais il n'y a en fait que deux adresses IP :

% check-soa cetic.dz
dns.cetic.dz.
	193.251.169.83: OK: 2020070604
	193.251.169.83: OK: 2020070604
ftp.cetic.dz.
	193.251.169.84: OK: 2020070604
raqdns.cetic.dz.
	193.251.169.83: OK: 2020070604
  

Sur ces bonnes pratiques de gestion de serveurs DNS, on fera bien de consulter le guide de l'AFNIC et celui de l'ANSSI.

Voilà, j'espère vous avoir convaincu que le débogage de problèmes Internet n'est pas toujours simple et que, quand on signale un problème, il faut donner le maximum de détails. Merci au signaleur du problème, ce fut une recherche intéressante. Et merci à Pierre Emeriaud, Pavel Polyakov et Radu-Adrian Feurdean pour leurs observations pertinentes.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)