PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Blog Stéphane Bortzmeyer: Ah, il y a une différence entre nom de domaine et nom de machine ?

mercredi 25 novembre 2015 à 03:03
GuiGui's Show - Liens
« La question originale était de savoir pourquoi on pouvait faire une résolution DNS (par exemple avec dig) de nexistesurementpas.um.outlook.com alors que les commandes comme ping ne pouvaient pas utiliser ce nom :

% dig +short nexistesurementpas.um.outlook.com
*.um.outlook.com.glbdns2.microsoft.com.
wildcard-emeasouth.um.outlook.com.
157.55.9.252
   

On récupère bien une adresse IP (c'est pareil avec d'autres outils DNS comme host) mais :

% ping nexistesurementpas.um.outlook.com
ping: unknown host nexistesurementpas.um.outlook.com

Mais, alors, pourquoi est-ce que ping prétend que ce nom n'existe pas ? (Le problème n'est pas spécifique à ping, d'autres commandes comme telnet font le même diagnostic.)

L'explication est qu'il existe une différence entre les noms de domaine (domain names) et les noms de machines (host names). Les premiers permettent à peu près tous les caractères possibles (cf. RFC 2181, section 11, et regardez le nom &-funny-%-syntax-$.bortzmeyer.org pour s'en convaincre). Les seconds obéissent à une syntaxe bien plus restrictive, documentée dans le RFC 1123, section 2.1. En gros, un nom de machine est restreint à LDH (Letters, Digits and Hyphen). C'est pour cela que je peux résoudre le nom rigolo indiqué plus haut :

% dig +short +nodnssec '&-funny-%-syntax-$.bortzmeyer.org'
www.bortzmeyer.org.
204.62.14.153
   

Mais que je ne peux pas l'utiliser :

% ping '&-funny-%-syntax-$.bortzmeyer.org'
ping: unknown host &-funny-%-syntax-$.bortzmeyer.org

[...]

Le nom est en fait un pointeur (enregistrement DNS de type CNAME) vers un nom canonique, *.um.outlook.com.glbdns2.microsoft.com (qui, à son tour, pointe vers un autre nom canonique, wildcard-emeasouth.um.outlook.com, mais ce n'est pas important ici).

Or, le sous-programme getaddrinfo(), qu'appellent les applications pour résoudre un nom en adresse IP, teste la validité de ces noms. Sur les systèmes utilisant la GNU libc (ce qui est le cas de l'Ubuntu sur laquelle j'ai fait les tests), getaddrinfo est encore plus violent, il teste tous les noms de la chaîne. Arrivant au *.um.outlook.com.glbdns2.microsoft.com, il le rejette car contenant un caractère invalide, l'astérisque. Ainsi, la résolution échoue et le nom est considéré comme inconnu. (Les fanas du DNS noteront que, dans un fichier de zone, l'astérisque a un sens spécial, faisant du nom un joker. Mais ça n'a pas d'importance ici : c'est un caractère illégal, point.)

À noter que le résultat dépend du système d'exploitation utilisé car toutes les mises en œuvre de getaddrinfo ne sont pas aussi sévères. Apparemment, FreeBSD refuse ces noms, mais pas Mac OS ou Windows. Ainsi, sur Mac OS, même le nom le plus bizarre est accepté :  »
(Permalink)