DNS funciona com o host, mas não com o wget

10

TL; DR

Eu tenho uma situação estranha em que posso fazer pesquisas de DNS em alguns hosts, mas não em outros. Isso parece estar relacionado ao resolv.conf ter uma entrada de servidor de nomes apontando para o meu servidor de nomes e outra presumivelmente para fazer com o docker, mas não tenho certeza de como consertá-lo.

O problema

Eu tenho lido a excelente introdução de Stéphane Graber ao LXD e queria experimentar. Portanto, eu fiz:

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

Eu configurei com todas as configurações padrão. Eu digitei:

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

Alguns testes

Eu tentei acessar esse endereço de um navegador da web em outro PC e funcionou bem. Então imaginei que algo deve estar errado com a configuração do DNS, mas:

$ 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

Então eu tentei 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"

que me fez pensar que houve um problema com a minha conexão com a internet, mas se eu usar-me.images.linuxcontainers.org (que eu vi mencionar em algum lugar na web):

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

Eu também tentei canonical.images.linuxcontainers.org, que (de acordo com host acima) é o que images.linuxcontainers.org é um alias de e que funcionou também, então parece que host pode procurar imagens. linuxcontainers.org, enquanto wget e lxc não podem, mas wget podem acessar canonical.images.linuxcontainers.org e a maioria dos outros sites que eu tentei.

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

Eu também tentei wget -4 e wget -6 para descartar problemas de IPv6, mas os resultados foram os mesmos de qualquer maneira. Finalmente eu tentei alguns outros programas como w3m mas também não houve diferença.

Eu obviamente estou perdendo alguma coisa; Alguém pode oferecer algum conselho sobre porque eu não consigo obter lxc para baixar a lista de imagens?

O PC

O PC é uma instalação relativamente nova rodando o Ubuntu Server 16.10 com pouquíssimos pacotes adicionais instalados no host principal. O Docker está instalado e em execução, mas nenhum contêiner está ativo. Curiosamente, eu reiniciei recentemente no kernel 4.8.6 para testar outro problema que estava tendo e com esse kernel eu poderia acessar o images.linuxcontainers.org, mas o docker não iniciava, então estou pensando se isso poderia ser feito com o docker .

Configuração

/etc/resolv.conf se parece com isso (mas por algum motivo eu não estou ciente, é na verdade um link simbólico para /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

Se eu consultar o primeiro servidor de nomes listado, recebo o mesmo resultado, como se não acrescentasse o endereço do servidor de nomes:

$ 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

Se eu consultar o segundo, ele expirará sem atingir um servidor:

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

Se eu consultar o segundo, mas usar o nome canônico, ele funciona e expirará ???

$ 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

Editar 1:

/etc/nsswitch.conf é assim:

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

Editar 2

O nsswitch.conf modificado agora está assim:

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

Editar 3

Conteúdo do /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
    
por DrAl 10.11.2016 / 17:14

1 resposta

3
  • Esta é a primeira vez que ver resolve hosts palavra-chave, parece errado. Você deveria ter algo como

    hosts: files dns [NOTFOUND=return]
    

    ou se você tiver o mDNS instalado

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Você pode remover [NOTFOUND=return] ou [!UNAVAIL=return] ; é a ação padrão, de qualquer maneira, se nada for deixado para consultar.

  • Bem, depois de algumas escavações, descobri que existe um módulo NSS novo para mim

    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.
    

    Você pode acabar instalando de alguma forma e não com os pacotes que você mencionou. Não há pacote depende disso.

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

    Mas não posso dizer nada agora, porque systemd-resolved não era confiável. É melhor denunciá-lo como bug em systemd .

por user.dz 27.11.2016 / 14:13