web-dev-qa-db-fra.com

DNS fonctionne avec Host, mais pas avec wget

TL; DR

J'ai une situation étrange où je peux effectuer des recherches DNS sur certains hôtes mais pas sur d'autres. Cela semble être lié au fait que resolv.conf ait une entrée de serveur de noms qui pointe vers mon serveur de noms et une autre qui est probablement liée au menu fixe, mais je ne sais pas comment le corriger.

Le problème

J'ai lu l'excellente introduction de Stéphane Graber à LXD et je voulais l'essayer. Par conséquent, j'ai fait:

$ Sudo usermod -a -G lxd <myusername>
$ newgrp lxd
$ Sudo lxd init

Je l'ai configuré avec tous les paramètres par défaut. J'ai ensuite tapé:

$ lxc image list images:
error: Get https://images.linuxcontainers.org/streams/v1/index.json: lookup images.linuxcontainers.org: no such Host

Quelques tests

J'ai essayé d'accéder à cette adresse à partir d'un navigateur Web sur un autre PC et cela a bien fonctionné. J'ai donc pensé que quelque chose n'allait pas avec la configuration DNS, mais:

$ Host images.linuxcontainers.org
images.linuxcontainers.org is an alias for canonical.images.linuxcontainers.org.
canonical.images.linuxcontainers.org has address 91.189.91.21
canonical.images.linuxcontainers.org has address 91.189.88.37
canonical.images.linuxcontainers.org has IPv6 address 2001:67c:1560:8001::21
canonical.images.linuxcontainers.org has IPv6 address 2001:67c:1562::41

Alors j'ai essayé wget:

$ wget https://images.linuxcontainers.org/streams/v1/index.json
--2016-11-10 15:56:22--  https://images.linuxcontainers.org/streams/v1/index.json
Resolving images.linuxcontainers.org (images.linuxcontainers.org)... failed: Name or service not known.
wget: unable to resolve Host address "images.linuxcontainers.org"

ce qui m'a fait penser qu'il y avait un problème avec ma connexion Internet, mais si j'utilise us.images.linuxcontainers.org (que j'ai vu mentionnée quelque part sur le Web):

$ wget https://us.images.linuxcontainers.org/streams/v1/index.json
--2016-11-10 15:57:26--  https://us.images.linuxcontainers.org/streams/v1/index.json
Resolving us.images.linuxcontainers.org (us.images.linuxcontainers.org)... 91.189.91.21, 2001:67c:1562::41
Connecting to us.images.linuxcontainers.org (us.images.linuxcontainers.org)|91.189.91.21|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3086 (3.0K) [application/json]
Saving to: "index.json"

index.json                                100%[==================================================================================>]   3.01K  --.-KB/s    in 0s

2016-11-10 15:57:26 (8.36 MB/s) - "index.json" saved [3086/3086]

J'ai aussi essayé canonical.images.linuxcontainers.org, qui (selon Hostci-dessus) est ce dont images.linuxcontainers.org est un alias et qui a également fonctionné, ce qui donne l'impression que Hostpeut rechercher des images images.linuxcontainers.org, avec wgetlxcne peut pas mais wget peut accéder à canonical.images.linuxcontainers.org et la plupart des autres sites que j'ai essayés.

$ wget https://canonical.images.linuxcontainers.org/streams/v1/index.json
--2016-11-10 16:02:28--  https://canonical.images.linuxcontainers.org/streams/v1/index.json
Resolving canonical.images.linuxcontainers.org (canonical.images.linuxcontainers.org)... 91.189.91.21, 91.189.88.37
Connecting to canonical.images.linuxcontainers.org (canonical.images.linuxcontainers.org)|91.189.91.21|:443... connected.
ERROR: no certificate subject alternative name matches
        requested Host name "canonical.images.linuxcontainers.org".
To connect to canonical.images.linuxcontainers.org insecurely, use `--no-check-certificate'.

$ wget --no-check-certificate https://canonical.images.linuxcontainers.org/streams/v1/index.json
--2016-11-10 16:02:37--  https://canonical.images.linuxcontainers.org/streams/v1/index.json
Resolving canonical.images.linuxcontainers.org (canonical.images.linuxcontainers.org)... 91.189.88.37, 91.189.91.21
Connecting to canonical.images.linuxcontainers.org (canonical.images.linuxcontainers.org)|91.189.88.37|:443... connected.
WARNING: no certificate subject alternative name matches
        requested Host name "canonical.images.linuxcontainers.org".
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://uk.images.linuxcontainers.org/streams/v1/index.json [following]
--2016-11-10 16:02:37--  https://uk.images.linuxcontainers.org/streams/v1/index.json
Resolving uk.images.linuxcontainers.org (uk.images.linuxcontainers.org)... 91.189.88.37, 2001:67c:1560:8001::21
Connecting to uk.images.linuxcontainers.org (uk.images.linuxcontainers.org)|91.189.88.37|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3086 (3.0K) [application/json]
Saving to: "index.json.1"

index.json.1                              100%[==================================================================================>]   3.01K  --.-KB/s    in 0s

2016-11-10 16:02:38 (96.5 MB/s) - "index.json.1" saved [3086/3086]

J'ai également essayé wget -4 et wget -6 pour éliminer les problèmes IPv6, mais les résultats étaient les mêmes dans les deux cas. Enfin, j'ai essayé d'autres programmes comme w3m, mais il n'y a pas de différence non plus.

Je manque évidemment quelque chose; Quelqu'un peut-il donner des conseils sur les raisons pour lesquelles je ne peux pas obtenir lxcpour télécharger la liste d'images?

Le PC

Le PC est une installation relativement nouvelle sous Ubuntu Server 16.10 avec très peu de paquets supplémentaires installé dans l’hôte principal. Docker est installé et en cours d'exécution, mais aucun conteneur n'est en place. Fait intéressant, j'ai récemment redémarré le noyau 4.8.6 pour tester un autre problème que j'avais et avec ce noyau, je pouvais accéder à images.linuxcontainers.org, mais docker ne démarre pas. Je me demande donc si cela pourrait avoir un lien avec docker. .

Configuration

/etc/resolv.conf ressemble à ceci (mais pour une raison quelconque je ne suis pas au courant, est en fait un lien symbolique vers /run/resolvconf/resolv.conf):

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.1.254
nameserver 127.0.0.53
search lan

Si j'interroge le premier serveur de noms de la liste, j'obtiens le même résultat que si je n'ajoute pas l'adresse du serveur de noms:

$ Host images.linuxcontainers.org 192.168.1.254
images.linuxcontainers.org is an alias for canonical.images.linuxcontainers.org.
canonical.images.linuxcontainers.org has address 91.189.91.21
canonical.images.linuxcontainers.org has address 91.189.88.37
canonical.images.linuxcontainers.org has IPv6 address 2001:67c:1560:8001::21
canonical.images.linuxcontainers.org has IPv6 address 2001:67c:1562::41

Si j'interroge la seconde, elle expire sans atteindre un serveur:

$ Host images.linuxcontainers.org 127.0.0.53
;; connection timed out; no servers could be reached

Si j'interroge la seconde mais que j'utilise le nom canonique, cela fonctionne et le délai est écoulé ???

$ Host canonical.images.linuxcontainers.org 127.0.0.53
Using domain server:
Name: 127.0.0.53
Address: 127.0.0.53#53
Aliases:

canonical.images.linuxcontainers.org has address 91.189.88.37
canonical.images.linuxcontainers.org has address 91.189.91.21
;; connection timed out; no servers could be reached
;; connection timed out; no servers could be reached

Modifier 1:

/etc/nsswitch.conf ressemble à ceci:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files resolve [!UNAVAIL=return] dns
networks:       files

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

netgroup:       nis

Éditer 2

Le fichier nsswitch.conf modifié ressemble maintenant à ceci:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files resolve dns
networks:       files

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

netgroup:       nis

Éditer 3

Contenu de /etc/systemd/resolved.conf:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
#Domains=
#LLMNR=yes
#DNSSEC=no
#Cache=yes
10
DrAl
  • C’est la première fois que vous voyez le mot clé resolve hosts, cela semble faux. Vous devriez avoir quelque chose comme

    hosts: files dns [NOTFOUND=return]
    

    ou si vous avez installé mDNS

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Vous pouvez supprimer [NOTFOUND=return] ou [!UNAVAIL=return], il s’agit de toute façon par défaut si il ne reste plus rien à interroger.

  • Après quelques recherches, j'ai découvert un nouveau module NSS.

    libnss-resolve

    nss module to resolve names via systemd-resolved
    
    nss-resolve is a plugin for the GNU Name Service Switch (NSS) functionality
    of the GNU C Library (glibc) providing DNS and LLMNR resolution to programs via
    the systemd-resolved daemon (provided in the systemd package).
    
    Installing this package automatically adds resolve to /etc/nsswitch.conf.
    

    Vous pourriez finir par l'installer d'une manière ou d'une autre et non avec les paquets que vous avez mentionnés. Il n'y a pas de paquet qui en dépend.

    ~$ apt-cache rdepends libnss-resolve
    libnss-resolve
    Reverse Depends:
    

    Mais je ne peux rien dire pour l'instant, pourquoi systemd-resolved n'était pas fiable. Il est préférable de le signaler comme bogue dans systemd.

2
user.dz