DNS funktioniert mit Host, aber nicht mit wget

10

TL; DR

Ich habe eine seltsame Situation, in der ich DNS-Lookups auf einigen Hosts durchführen kann, auf anderen jedoch nicht. Dies scheint damit zu tun zu haben, dass resolv.conf einen Nameserver-Eintrag hat, der auf meinen Nameserver verweist, und einen anderen, der vermutlich mit Docker zu tun hat, aber ich bin nicht sicher, wie ich das beheben soll.

Das Problem

Ich habe Stéphane Grabers hervorragende Einführung in LXD gelesen und wollte es ausprobieren. Deshalb habe ich:

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

Ich habe es mit allen Standardeinstellungen konfiguriert. Ich tippte dann:

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

Einige Tests

Ich habe versucht, über einen Webbrowser auf einem anderen PC auf diese Adresse zuzugreifen, und es hat einwandfrei funktioniert. Also dachte ich, dass etwas mit der DNS-Einrichtung nicht stimmt, aber:

$ 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

Also habe ich wget versucht:

$ 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"

was mich denken ließ, dass es ein Problem mit meiner Internetverbindung gab, aber wenn ich us.images.linuxcontainers.org benutze (was ich irgendwo im Web erwähnt habe):

$ 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]

Ich habe auch canonical.images.linuxcontainers.org ausprobiert, was (laut hostoben) der Alias ​​von images.linuxcontainers.org ist und das auch funktioniert hat. Es sieht also so aus, als ob hostimages.linuxcontainers.org nachgeschlagen werden kann, während wgetund lxcnicht, aber wget kann auf canonical.images.linuxcontainers.org und die meisten anderen Websites zugreifen, die ich ausprobiert habe.

$ 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]

Ich habe auch versucht wget -4und wget -6waren, IPv6 Probleme auszuschließen, aber die Ergebnisse des gleichen oder so. Schließlich habe ich einige andere Programme ausprobiert, w3maber auch dort keinen Unterschied.

Mir fehlt offensichtlich etwas; Kann mir jemand einen Rat geben, warum ich die Bilderliste nicht lxcherunterladen kann?

Der PC

Der PC ist eine relativ neue Installation unter Ubuntu Server 16.10 mit sehr wenigen zusätzlichen Paketen, die auf dem Haupthost installiert sind. Docker ist installiert und läuft, aber es sind keine Container aktiv. Interessanterweise habe ich kürzlich einen Neustart in Kernel 4.8.6 durchgeführt, um ein anderes Problem zu testen. Mit diesem Kernel konnte ich auf images.linuxcontainers.org zugreifen, aber Docker wurde nicht gestartet, sodass ich mich frage, ob dies möglicherweise mit Docker zu tun hat .

Aufbau

/etc/resolv.confsieht so aus (aber aus irgendeinem Grund, den ich nicht kenne, ist eigentlich ein Symlink zu /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

Wenn ich den ersten aufgelisteten Nameserver abfrage, erhalte ich das gleiche Ergebnis, als würde ich die Nameserver-Adresse nicht anhängen:

$ 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

Wenn ich die zweite abfrage, tritt eine Zeitüberschreitung auf, ohne einen Server zu erreichen:

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

Wenn ich den zweiten abfrage, aber den kanonischen Namen verwende, funktioniert er und tritt dann eine Zeitüberschreitung auf ???

$ 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

Bearbeiten 1:

/etc/nsswitch.conf sieht aus wie das:

# /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

Bearbeiten 2

Die modifizierte nsswitch.conf sieht nun folgendermaßen aus:

# /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

Bearbeiten 3

Inhalt von /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
DrAl
quelle
1
/etc/resolv.confist normalerweise ein Symlink unter Ubuntu, das ist normal. Was /etc/nsswitch.confenthält?
Muru
@muru Ich habe es oben hinzugefügt (dies ist kein Symlink)
DrAl
2
@ThatGuy Danke dafür. Dies funktioniert nicht mit jedem Server (da es davon abhängt, ob der Server nach dem Domainnamen Ausschau hält) - in diesem Fall könnte ich sowieso nur canonical.images.linuxcontainers.org verwenden, da dies zu funktionieren scheint. Ich müsste jedoch auch überzeugen lxc image listund lxc launchdies anstelle der eingebauten Adresse verwenden.
DrAl
1
@ DrAl, Dies ist das erste Mal, dass resolvedas Schlüsselwort "hosts" angezeigt wird. Es scheint falsch zu sein. Sie sollten so etwas wie hosts: files dns [!UNAVAIL=return]oder wenn Sie mDNS installiert haben files dns mdns4_minimal [NOTFOUND=return] mdns4. Sie können entfernen [NOTFOUND=return]oder [!UNAVAIL=return], es ist sowieso die Standardaktion, wenn nichts mehr abzufragen ist.
user.dz
1
@ user.dz, ich habe versucht, dies zu entfernen (obwohl dies die Standardeinstellung meiner Installation ist, da ich diese Datei noch nie berührt habe). Dies scheint zu ermöglichen, dass wget funktioniert (allerdings nach ein paar Sekunden Verzögerung beim Auflösen von images.linuxcontainers.org). Vielen Dank! Irgendeine Idee, warum dies zu meiner /etc/nsswitch.conf hinzugefügt wurde? Die Liste der Pakete, die ich habe Die Installation auf dem Server ist in einem Link im Abschnitt "Der PC" oben aufgeführt.
DrAl

Antworten:

2
  • Dies ist das erste Mal, dass resolvedas Schlüsselwort "hosts" angezeigt wird. Es scheint falsch zu sein. Du solltest so etwas haben

    hosts: files dns [NOTFOUND=return]
    

    oder wenn Sie mDNS installiert haben

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Sie können entfernen [NOTFOUND=return]oder [!UNAVAIL=return], es ist sowieso die Standardaktion, wenn nichts mehr abzufragen ist.

  • Nun, nach einigem Graben konnte ich feststellen, dass es ein neues NSS-Modul für mich gibt

    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.
    

    Sie könnten es am Ende irgendwie installieren und nicht mit den von Ihnen erwähnten Paketen. Es gibt kein Paket, das davon abhängt.

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

    Aber ich kann momentan nichts sagen, warum systemd-resolvedwar unzuverlässig. Es ist besser, es als Fehler zu melden systemd.

user.dz
quelle
1
Interessant, danke. Ich habe versucht, "Entschlossenheit" zu entfernen, und das ist wgetviel schneller geworden. Es sieht also so aus, als ob dies das Problem verursacht hat. Meine Hosts-Zeile in der nsswitch.conf hat jetzt nur noch "files dns".
DrAl
1
Ich habe immer dpkg-query -l '*resolve*'überprüft, ob libnss-resolvedas installiert ist, also habe ich es installiert aptitudeund ausgeführt aptitude why libnss-resolveund es steht i ubuntu-standard Recommends libnss-resolve.
DrAl
1
@ DrAl, welche Version ist das? Ich habe U16.04 keine solche Abhängigkeit zwischen ubuntu-standard& libnss-resolve.
user.dz
1
Das gibt uns etwas Licht über das aktuelle Setup, aber Sie haben das letzte Update, was bedeutet, dass dies ein weiterer Fehler ist (systemd-Resolution / nss-Auflösung ist unzuverlässig). Haben Sie seinen Dienst ausgeführtsystemctl status systemd-resolved.service
user.dz
1
@DrAl, also werden Standardeinstellungen verwendet, von man resolved.conf, das heißt, wir sind zurück zu /etc/resolv.conf: /. resolvesollte den gleichen Effekt haben wie dnsin nsswitch.conf.
user.dz