DNS работает с хостом, но не с wget

10

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 может искать изображения. 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 с очень мало дополнительных пакетов , установленных на главном хосте. Докер установлен и запущен, но контейнеры не установлены. Интересно, что я недавно перезагрузился в ядро ​​4.8.6, чтобы проверить еще одну проблему, с которой я столкнулся, и с этим ядром мог получить доступ к изображениям.linuxcontainers.org, но докер не запустился, поэтому мне интересно, может ли это быть связано с докером .

Конфигурация

/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
    
задан DrAl 10.11.2016 в 16:14
источник

1 ответ

3
  • Это первый раз, когда вы видите ключевое слово resolve hosts, это кажется неправильным. У вас должно быть что-то вроде

    hosts: files dns [NOTFOUND=return]
    

    или если вы установили mDNS

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Вы можете удалить [NOTFOUND=return] или [!UNAVAIL=return] , это действие по умолчанию в любом случае, если ничего не осталось, чтобы запросить.

  • Хорошо, после некоторого копания я мог обнаружить, что для меня есть новый модуль 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.
    

    Вы могли бы как-то его установить, а не с указанными вами пакетами. От этого не зависит пакет.

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

    Но я ничего не могу сказать прямо сейчас, почему systemd-resolved было ненадежным. Лучше сообщить об этом как ошибку в systemd .

ответ дан user.dz 27.11.2016 в 13:13
источник