TL; DR
Tengo una situación extraña en la que puedo hacer búsquedas de DNS en algunos hosts pero no en otros. Esto parece estar relacionado con resolv.conf que tiene una entrada de servidor de nombres que apunta a mi servidor de nombres y otra que presumiblemente tiene que ver con docker, pero no estoy seguro de cómo solucionarlo.
El problema
He estado leyendo la excelente introducción de Stéphane Graber a LXD y quería probarlo. Por lo tanto, hice:
$ sudo usermod -a -G lxd <myusername>
$ newgrp lxd
$ sudo lxd init
Lo configuré con todas las configuraciones predeterminadas. Luego escribí:
$ lxc image list images:
error: Get https://images.linuxcontainers.org/streams/v1/index.json: lookup images.linuxcontainers.org: no such host
Algunas pruebas
Intenté acceder a esa dirección desde un navegador web en otra PC y funcionó bien. Así que pensé que algo debe estar mal con la configuración de DNS, pero:
$ 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
Así que probé 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"
lo que me hizo pensar que había un problema con mi conexión a internet, pero si uso us.images.linuxcontainers.org (que vi mencionar en algún lugar de la 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]
También probé canonical.images.linuxcontainers.org, que (según lo host
anterior) es de lo que images.linuxcontainers.org es un alias y que también funcionó, por lo que parece que host
puede buscar images.linuxcontainers.org, mientras que wget
y lxc
no puede, pero wget
puede acceder a canonical.images.linuxcontainers.org y a la mayoría de los otros sitios que he probado.
$ 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]
También he intentado wget -4
y wget -6
para descartar problemas de IPv6, pero los resultados eran los mismos de cualquier manera. Finalmente probé algunos otros programas como w3m
pero tampoco hay diferencia allí.
Obviamente me estoy perdiendo algo; ¿Alguien puede ofrecer algún consejo sobre por qué no puedo lxc
descargar la lista de imágenes?
La PC
La PC es una instalación relativamente nueva que ejecuta Ubuntu Server 16.10 con muy pocos paquetes adicionales instalados en el host principal. Docker está instalado y en ejecución, pero no hay contenedores activos. Curiosamente, recientemente reinicié el kernel 4.8.6 para probar otro problema que tenía y con ese kernel pude acceder a images.linuxcontainers.org, pero docker no se inició, así que me pregunto si esto podría tener que ver con docker .
Configuración
/etc/resolv.conf
se ve así (pero por alguna razón no estoy al tanto, en realidad es un enlace simbólico a /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
Si consulto el primer servidor de nombres listado, obtengo el mismo resultado que si no agrego la dirección del servidor de nombres:
$ 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
Si consulto el segundo, se agota el tiempo de espera sin llegar a un servidor:
$ host images.linuxcontainers.org 127.0.0.53
;; connection timed out; no servers could be reached
Si consulto el segundo pero uso el nombre canónico, ¿funciona y luego se agota el tiempo de espera?
$ 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
Se ve como esto:
# /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
El nsswitch.conf modificado ahora se ve así:
# /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
Contenido de /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
generalmente es un enlace simbólico en Ubuntu, eso es normal. ¿Qué/etc/nsswitch.conf
contiene?lxc image list
ylxc launch
usar esto en lugar de la dirección integrada.resolve
palabra clave hosts, parece incorrecto. Debería tener algo comohosts: files dns [!UNAVAIL=return]
o si tiene instalado mDNSfiles dns mdns4_minimal [NOTFOUND=return] mdns4
. puede eliminar[NOTFOUND=return]
o[!UNAVAIL=return]
, de todos modos, es la acción predeterminada si no queda nada para consultar.Respuestas:
Esta es la primera vez que ve la
resolve
palabra clave hosts, parece incorrecto. Deberías tener algo comoo si tienes mDNS instalado
Puede eliminar
[NOTFOUND=return]
o[!UNAVAIL=return]
, de todos modos, es la acción predeterminada si no queda nada para consultar.Bueno, después de investigar un poco, podría encontrar que hay un módulo NSS nuevo para mí.
libnss-resolve
Podría terminar instalándolo de alguna manera y no con los paquetes que mencionó. No hay paquete depende de ello.
Pero no puedo decir nada ahora, por qué
systemd-resolved
no era confiable. Es mejor informarlo como errorsystemd
.fuente
wget
obtuve mucho más rápido, por lo que parece que eso fue lo que estaba causando el problema. Mi línea de hosts en nsswitch.conf ahora solo tiene "archivos dns".dpkg-query -l '*resolve*'
comprobar y encontré quelibnss-resolve
está instalado, así que instaléaptitude
y ejecutéaptitude why libnss-resolve
y dicei ubuntu-standard Recommends libnss-resolve
.ubuntu-standard
&libnss-resolve
.systemctl status systemd-resolved.service
man resolved.conf
, eso significa que volvemos a/etc/resolv.conf
: /.resolve
debería tener el mismo efecto quedns
ennsswitch.conf
.