DNS працює з хостом, але не з wget


10

TL; DR

У мене склалася дивна ситуація, коли я можу робити пошук DNS на деяких хостах, але не на інших. Це, мабуть, пов’язане з резолюцією.conf, що має один запис сервера імен, що вказує на мій сервер імен, і інший, який, імовірно, пов'язаний з docker, але я не знаю, як це виправити.

Проблема

Я читав чудове вступ Стефана Грабера до 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 з дуже малою кількістю додаткових пакетів, встановлених в основному хості. Докер встановлений і працює, але контейнери не встановлені. Цікаво, що я нещодавно перезавантажив ядро ​​4.8.6, щоб перевірити іншу проблему, з якою у мене виникло, і з цим ядром я міг отримати доступ до images.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/used.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

1
/etc/resolv.confзазвичай є символьним посиланням на Ubuntu, це нормально. Що /etc/nsswitch.confмістить?
муру

@muru Я додав його вище (це не є символьним посиланням)
DrAl

2
@ThatGuy Дякую за це. Це не працюватиме з кожним сервером (оскільки це залежить від того, чи буде сервер доглядати за доменним іменем) - у цьому випадку я можу просто використовувати canonical.images.linuxcontainers.org так чи інакше. Однак мені також потрібно було б переконати lxc image listі lxc launchвикористовувати це замість вбудованої адреси.
DrAl

1
@DrAl, Це вперше побачити resolveключове слово хостів, здається, що це неправильно. У вас має бути щось на кшталт hosts: files dns [!UNAVAIL=return]або якщо у вас встановлений mDNS files dns mdns4_minimal [NOTFOUND=return] mdns4. ви можете видалити [NOTFOUND=return]або [!UNAVAIL=return], це все одно за замовчуванням, якщо нічого не залишається для запиту.
user.dz

1
@ user.dz, я спробував видалити це (хоча це налаштування за замовчуванням, встановлене моєю установкою, оскільки я жодного разу не торкався цього файлу). Це, здається, дозволяє wget працювати (хоча через кілька секунд затримки "вирішення images.linuxcontainers.org). Дякую! Будь-яка ідея, чому це, можливо, було додано до мого /etc/nsswitch.conf? Список пакетів, які я встановлений на сервері, вказаний у посиланні у розділі "ПК" вище.
DrAl

Відповіді:


2
  • Це перший раз, коли бачите resolveключове слово хостів, це здається неправильним. Ви повинні мати щось подібне

    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.


1
Цікаво, дякую. Я спробував видалити "вирішити", і це wgetстало набагато швидше, тому, схоже, саме це було причиною проблеми. Мій рядок хостів у nsswitch.conf тепер просто має "файли dns".
DrAl

1
Я dpkg-query -l '*resolve*'перевіряв і виявив, що libnss-resolveвстановлено, тому я встановив aptitudeі запустив, aptitude why libnss-resolveі це говорить i ubuntu-standard Recommends libnss-resolve.
DrAl

1
@DrAl, який реліз це? У U16.04 немає такої залежності між ubuntu-standard& libnss-resolve.
user.dz

1
Це дає нам трохи світла про поточну установку, але у вас є остання помилка, а це означає, що це ще одна помилка (systemd-разрешено / nss-resolution не є надійною). Чи працює у вас службаsystemctl status systemd-resolved.service
user.dz

1
@DrAl, тому він використовує типові настройки, з man resolved.conf, це означає, що ми повернулися до /etc/resolv.conf: /. resolveповинен мати той же ефект, що і dnsв nsswitch.conf.
user.dz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.