Wheezy : traceroute vers adresse invalide : réponse locale

Tags: #<Tag:0x00007f47eda1fe28>

Bonjour,

J’ai un serveur en wheezy (faut pas se moquer : je doit changer de serveur, pas le courage de faire la miseà jour).

Mon problème est que le serveur local répond à toutes les demandes.

belar:~# cat /etc/hostname 
belar.example.net
belar:~# dig existepas.example.org

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> existepas.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 3621
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;existepas.example.org.		IN	A

;; AUTHORITY SECTION:
example.org.		2038	IN	SOA	sns.dns.icann.org. noc.dns.icann.org. 2017042736 7200 3600 1209600 3600

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jun 26 16:31:24 2017
;; MSG SIZE  rcvd: 93

belar:~# traceroute existepas.example.org
traceroute to existepas.example.org (91.**.**.**), 30 hops max, 60 byte packets
 1  belar.example.net (91.**.**.**)  0.032 ms  0.013 ms  0.012 ms

Il y a bien bind9 sur le serveur, mais dig ne montre pas de soucis.

# cat /etc/resolv.conf 
nameserver 127.0.0.1
nameserver 213.186.33.99

(c’est une vieux kimsufi sinon).

Une idée ?

Ce ne serait pas le serveur DNS d’OVH défini en second qui renvoie cette réponse comme le ferait un bon gros DNS menteur ? dig ne suit pas le même processus de résolution que le résolveur de la libc utilisé par la plupart des applications.

Non, semble t’il :

# dig existepas.example.org @213.186.33.99

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> existepas.example.org @213.186.33.99
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 15060
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;existepas.example.org.		IN	A

;; AUTHORITY SECTION:
example.org.		3600	IN	SOA	sns.dns.icann.org. noc.dns.icann.org. 2017042736 7200 3600 1209600 3600

;; Query time: 85 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Mon Jun 26 18:17:53 2017
;; MSG SIZE  rcvd: 93

J’ai eu un problème un peu équivalent sur un poste local, mais j’avais une ligne search dans le resolv.conf

Denis

L’adresse IP retournée par la résolution de existepas.example.org est celle de la machine elle-même ?

Je suppose que tu as déjà regardé dans /etc/hosts ? De toute façon on ne peut pas utiliser de caractères génériques, donc ça ne pourrait pas le faire avec n’importe quel nom inexistant.

Si ça ne vient pas du DNS ni du fichier hosts, il faut explorer les autres sources de résolution de nom définies dans /etc/nsswitch.conf.

Au pire, tu peux faire un strace -f sur l’exécution de la commande pour voir comment elle obtient cette adresse.

Oui, mais en fait pour n’importe quelle adresse qui n’existe pas …

Si l’adresse n’existe pas : c’est l’adresse du serveur lui même qui est retourné.

sinon, pour les retours :

# cat /etc/nsswitch.conf

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

et strace -o testping.trace -f ping -c1 nexistepas.example.org

résulta brut non modifié https://bin.shnoulle.net/?da32527b41f58693#i48Ft/tgqx1kGHF5zH5IiRv9RfogZUdcumHtAZhNyv4=

Je me gourre ou c’est bind qui retourne 127.0.0.1 à la ligne 118 ?

Si je ne me gourre : voici ou cela plante https://bin.shnoulle.net/?1793937819a3ed0a#gnOlOciJjmU9kAJ9z4wqBnQ6BVikNTBo/c3GAGr/3JY= (comparaison avec example.org)

Heu , je suis un peu perdu là.

Tu as fait la requête avec le domaine example.org ou avec le domaine de ton serveur ?
Visiblement ce domaine a un wildcard qui fait une alias vers le nom canonique du serveur.
Ça pourrait aider de voir les paquets DNS complets en passant à strace l’option pour ne pas tronquer les données.

C’est juste l’adresse du paquet DNS, lue dans resolv.conf.

Je ne comprend pas ? J’ai fait la requête sur belar.gsill.net (nom du serveur). Qui n’a que 2 wildcard (

*.ferme.gsill.net.	IN	CNAME	ferme
*.gsill.net.		IN	CNAME	www

Pour la sortie complète, je n’ai trouvé que -s strsize : je l’ai passé à 1024 ?

https://bin.shnoulle.net/?adc7ad5bd9ecc8b5#w79EFMNSxZ+i/eY3U38nOXJWj6pY+vkflawA0MLvNhk=

Sinon, peut être du à ma grande méconnaissance de l’ipv6 ?

# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1	localhost.localdomain localhost
#91.121.100.144	ks29115.kimsufi.com
91.121.100.144 belar.gsill.net
82.233.193.172 shnoulle.gsill.net
2001:41d0:1:9990::1 belar.gsill.net
2001:41d0:1:9990::2 belar.gsill.net
2001:41d0:1:9990::4 belar.gsill.net
# The following lines are desirable for IPv6 capable hosts
#(added automatically by netbase upgrade)
::1     ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

A propos : merci beaucoup :slight_smile:

Avec le contenu partiel des messages DNS, je ne comprenais pas pourquoi le résolveur semblait faire deux fois une requête DNS pour nexistepas.example.org, et pourquoi après avoir reçu la seconde réponse ping envoyait un paquet ICMP à l’adresse de ton serveur.

Avec le contenu complet des messages DNS, tout s’éclaire. Note qu’on aurait pu aussi faire une capture des paquets DNS avec tcpdump, tshark/wireshark ou autre, ou activer les logs des requêtes sur le serveur BIND.

La réponse à la première requête disait que le nom de domaine nexistepas.example.org n’existe pas. Jusque là, normal. Mais ensuite le résolver envoie une nouvelle requête en ajoutant le domaine gsill.net, soit nexistepas.example.org.gsill.net, et cette fois le serveur répond avec l’enregistrement wildcard *.gsill.net.

Comment l’éviter ?

  • en mettant un point à la fin du nom de domaine “nexistepas.example.org.”, ce qui signalera qu’il est déjà pleinement qualifié et qu’il ne faut pas y ajouter le domaine.
  • ou en définissant le domaine de recherche avec search ou domain comme étant le domaine racine “.”. Par défaut c’est le domaine du nom de domaine de la machine, donc gsill.net.

Merci ! Merci ! Merci !

# cat /etc/resolv.conf 
search .
nameserver 127.0.0.1
nameserver 213.186.33.99

et donc

belar:~# ping -c1 nexistepas.example.org
ping: unknown host nexistepas.example.org
belar:~# ping -c1 example.org
PING example.org (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_req=1 ttl=55 time=100 ms

--- example.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 100.143/100.143/100.143/0.000 ms

C’est dans le man en fait : https://linux.die.net/man/5/resolv.conf

Le jour on on se voit quelque part, t’hésite pas à me demander un coup à boire :).