TL; DR
У меня странная ситуация, когда я могу выполнять поиск DNS на некоторых хостах, но не на других. Похоже, это связано с resolv.conf, в котором одна запись сервера имен указывает на мой сервер имен, а другая, вероятно, связана с докером, но я не уверен, как это исправить.
Эта проблема
Я читал отличное введение Стефана Грабера в LXD и хотел попробовать его. Поэтому я сделал:
$ sudo usermod -a -G lxd <myusername>
$ newgrp lxd
$ sudo lxd init
Я настроил его со всеми настройками по умолчанию. Затем я набрал:
$ lxc image list images:
error: Get https://images.linuxcontainers.org/streams/v1/index.json: lookup images.linuxcontainers.org: no such host
Некоторые тесты
Я попытался получить доступ к этому адресу из веб-браузера на другом ПК, и он работал нормально. Поэтому я подумал, что что-то не так с настройкой DNS, но:
$ 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
Итак, я попробовал 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"
что заставило меня думать, что была проблема с моим интернет-соединением, но если я использую us.images.linuxcontainers.org (о котором я упоминал где-то в сети):
$ 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]
Я также попробовал canonical.images.linuxcontainers.org, который (в соответствии с host
вышеизложенным) является тем, что images.linuxcontainers.org является псевдонимом, и это тоже сработало, поэтому, похоже, host
может искать images.linuxcontainers.org, хотя wget
и lxc
не может, но wget
может получить доступ к canonical.images.linuxcontainers.org и большинству других сайтов, которые я пробовал.
$ 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]
Я также пытался wget -4
и wget -6
исключить проблемы IPv6, но результаты были одинаковыми в любом случае. Наконец я попробовал некоторые другие программы, такие как, w3m
но без разницы там тоже.
Я явно что-то упускаю; Может кто-нибудь дать совет, почему я не могу lxc
загрузить список изображений?
ПК
ПК является относительно новой установкой под управлением Ubuntu Server 16.10 с очень небольшим количеством дополнительных пакетов, установленных на главном хосте. Docker установлен и работает, но нет контейнеров. Интересно, что я недавно перезагрузился в ядро 4.8.6, чтобы проверить другую проблему, с которой я столкнулся, и с этим ядром я мог получить доступ к images.linuxcontainers.org, но docker не запустился, поэтому мне интересно, может ли это быть связано с docker ,
конфигурация
/etc/resolv.conf
выглядит так (но по какой-то причине я не знаю, на самом деле это символическая ссылка /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
Если я сделаю запрос на первый из перечисленных серверов имен, я получу тот же результат, как если бы я не добавил адрес сервера имен:
$ 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
Если я сделаю запрос второй, он истекает без достижения сервера:
$ host images.linuxcontainers.org 127.0.0.53
;; connection timed out; no servers could be reached
Если я запрашиваю второе, но использую каноническое имя, оно работает, а затем время ожидания ???
$ 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
Изменить 1:
/etc/nsswitch.conf
выглядит так:
# /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
Редактировать 2
Модифицированный файл nsswitch.conf теперь выглядит так:
# /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
Редактировать 3
Содержимое /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
обычно это символическая ссылка на Ubuntu, это нормально. Что/etc/nsswitch.conf
содержит?lxc image list
иlxc launch
использовать это вместо встроенного адреса.resolve
ключевое слово hosts, кажется, что это неправильно. Вы должны иметь что-то вродеhosts: files dns [!UNAVAIL=return]
или, если у вас установлен mDNSfiles dns mdns4_minimal [NOTFOUND=return] mdns4
. Вы можете удалить[NOTFOUND=return]
или[!UNAVAIL=return]
, это действие по умолчанию в любом случае, если ничего не осталось для запроса.Ответы:
Это первый раз, когда вы видите
resolve
ключевое слово hosts, оно кажется неправильным. Вы должны иметь что-то вродеили если у вас установлен mDNS
Вы можете удалить
[NOTFOUND=return]
или[!UNAVAIL=return]
, это действие по умолчанию в любом случае, если ничего не осталось для запроса.Ну, после некоторых копаний я обнаружил, что есть новый для меня модуль NSS
libnss-resolve
Вы можете установить его как-нибудь, а не с упомянутыми вами пакетами. Там нет пакета зависит от этого.
Но сейчас я ничего не могу сказать, почему
systemd-resolved
был ненадежным. Лучше сообщить об этом как об ошибке вsystemd
.источник
wget
получил намного быстрее, так что, похоже, это было причиной проблемы. Моя строка hosts в файле nsswitch.conf теперь просто содержит «files dns».dpkg-query -l '*resolve*'
проверять и обнаружил, чтоlibnss-resolve
установлен, поэтому я установилaptitude
и запустил,aptitude why libnss-resolve
и он говоритi ubuntu-standard Recommends libnss-resolve
.ubuntu-standard
&libnss-resolve
.systemctl status systemd-resolved.service
man resolved.conf
это означает, что мы вернулись к/etc/resolv.conf
: /.resolve
должен иметь тот же эффект, что иdns
вnsswitch.conf
.