TL; DR
Mam dziwną sytuację, w której mogę wyszukiwać DNS na niektórych hostach, ale na innych nie. Wydaje się, że jest to związane z plikiem resolv.conf, który ma jeden wpis serwera nazw wskazujący na mój serwer nazw, a drugi, który prawdopodobnie ma związek z dokerem, ale nie jestem pewien, jak to naprawić.
Problem
Czytałem doskonałe wprowadzenie Stéphane Graber do LXD i chciałem go wypróbować. Dlatego zrobiłem:
$ sudo usermod -a -G lxd <myusername>
$ newgrp lxd
$ sudo lxd init
Skonfigurowałem go ze wszystkimi ustawieniami domyślnymi. Potem napisałem:
$ lxc image list images:
error: Get https://images.linuxcontainers.org/streams/v1/index.json: lookup images.linuxcontainers.org: no such host
Niektóre testy
Próbowałem uzyskać dostęp do tego adresu z przeglądarki internetowej na innym komputerze i działało dobrze. Pomyślałem, że coś jest nie tak z konfiguracją DNS, ale:
$ 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
Więc spróbowałem 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"
co sprawiło, że pomyślałem, że wystąpił problem z moim połączeniem internetowym, ale jeśli korzystam z us.images.linuxcontainers.org (o czym wspomniałem gdzieś w Internecie):
$ 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]
Próbowałem również canonical.images.linuxcontainers.org, który (zgodnie z host
powyższym) jest tym, co images.linuxcontainers.org jest aliasem i to też działało, więc wygląda na to, że host
może wyszukiwać images.linuxcontainers.org, podczas gdy wget
i lxc
nie może, ale wget
mogę uzyskać dostęp do canonical.images.linuxcontainers.org i większości innych stron, które próbowałem.
$ 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]
Ja również próbowałem wget -4
i wget -6
aby wykluczyć problemy z IPv6, ale wyniki były takie same w obu kierunkach. W końcu wypróbowałem kilka innych programów, w3m
ale nie ma też żadnej różnicy.
Oczywiście czegoś mi brakuje; czy ktoś może zaoferować jakąkolwiek poradę, dlaczego nie mogę lxc
pobrać listy obrazów?
PC
Komputer jest stosunkowo nową instalacją z systemem Ubuntu Server 16.10 z bardzo małą liczbą dodatkowych pakietów zainstalowanych na głównym hoście. Docker jest zainstalowany i działa, ale nie ma żadnych kontenerów. Co ciekawe, ostatnio zrestartowałem się do jądra 4.8.6, aby przetestować inny problem, który miałem i przy pomocy tego jądra mogłem uzyskać dostęp do images.linuxcontainers.org, ale okno dokujące nie uruchomiło się, więc zastanawiam się, czy może to mieć związek z dokerem .
Konfiguracja
/etc/resolv.conf
wygląda to tak (ale z jakiegoś powodu nie jestem świadomy, tak naprawdę jest dowiązaniem symbolicznym /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
Jeśli wykonam kwerendę na pierwszym wymienionym serwerze nazw, otrzymam taki sam wynik, jak w przypadku, gdy nie dołączę adresu serwera nazw:
$ 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
Jeśli wykonam kwerendę drugą, upłynie limit czasu, nie osiągając serwera:
$ host images.linuxcontainers.org 127.0.0.53
;; connection timed out; no servers could be reached
Jeśli zapytam drugą, ale użyję nazwy kanonicznej, to zadziała, a następnie upłynie limit czasu ???
$ 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
Edycja 1:
/etc/nsswitch.conf
wygląda tak:
# /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
Edytuj 2
Zmodyfikowany plik nsswitch.conf wygląda teraz tak:
# /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
Edytuj 3
Zawartość /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
/etc/resolv.conf
jest zwykle dowiązaniem symbolicznym na Ubuntu, to normalne. Co/etc/nsswitch.conf
zawieralxc image list
ilxc launch
korzystać z tego zamiast wbudowanego adres.resolve
słowo kluczowe hosts, wydaje się nieprawidłowe. Powinieneś mieć coś takiegohosts: files dns [!UNAVAIL=return]
lub jeśli masz zainstalowany mDNSfiles dns mdns4_minimal [NOTFOUND=return] mdns4
. możesz usunąć[NOTFOUND=return]
lub[!UNAVAIL=return]
, i tak jest to akcja domyślna, jeśli nic nie zostało do zapytania.Odpowiedzi:
To jest pierwszy raz, kiedy
resolve
słowo kluczowe hosts wydaje się nieprawidłowe. Powinieneś mieć coś takiegolub jeśli masz zainstalowany mDNS
Możesz usunąć
[NOTFOUND=return]
lub[!UNAVAIL=return]
, i tak jest to akcja domyślna, jeśli nic nie pozostało do zapytania.Po kopaniu odkryłem, że jest dla mnie nowy moduł NSS
libnss-resolve
Możesz skończyć jakoś go zainstalować, a nie z wspomnianymi pakietami. Od tego nie zależy żadna paczka.
Ale nie mogę teraz nic powiedzieć, dlaczego to
systemd-resolved
było niewiarygodne. Lepiej zgłosić to jako błądsystemd
.źródło
wget
to znacznie szybciej, więc wygląda na to, że to właśnie powodowało problem. Moja linia hostów w pliku nsswitch.conf ma teraz po prostu „pliki dns”.dpkg-query -l '*resolve*'
sprawdzałem i znalazłem, żelibnss-resolve
jest zainstalowany, więc zainstalowałemaptitude
i uruchomiłemaptitude why libnss-resolve
i tak mówii ubuntu-standard Recommends libnss-resolve
.ubuntu-standard
&libnss-resolve
.systemctl status systemd-resolved.service
man resolved.conf
, co oznacza, że wróciliśmy do/etc/resolv.conf
: /.resolve
powinien mieć taki sam efekt jakdns
wnsswitch.conf
.