DNS는 호스트와 작동하지만 wget과는 작동하지 않습니다


10

TL; DR

일부 호스트에서는 DNS 조회를 수행 할 수 있지만 다른 호스트에서는 수행 할 수없는 이상한 상황이 있습니다. 이것은 하나의 네임 서버 항목이 내 네임 서버를 가리키고 다른 네임 서버가 도커와 관련이있는 resolv.conf와 관련이있는 것 같지만 어떻게 수정 해야할지 모르겠습니다.

문제

나는 LXD에 대한 Stéphane Graber의 훌륭한 소개를 읽고 그것을 시도하고 싶었습니다. 따라서 나는했다 :

$ 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

일부 테스트

다른 PC의 웹 브라우저에서 해당 주소에 액세스하려고 시도했지만 정상적으로 작동했습니다. 그래서 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]

(I에 따라도 시도 canonical.images.linuxcontainers.org, host위의) images.linuxcontainers.org가의 별칭이며,이처럼 보이는 그래서, 너무 일 것입니다 host동안 할 수있는 조회 images.linuxcontainers.org wgetlxc할 수없는, 하지만 canonical.images.linuxcontainers.org 및 내가 시도한 대부분의 다른 사이트에 액세스 wget 할 수 있습니다.

$ 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 -4wget -6IPv6의 문제를 배제하기 위해,하지만 결과는 동일 하나의 방법이었다. 마지막으로 다른 프로그램도 시도 w3m했지만 아무런 차이가 없었습니다.

분명히 뭔가 빠졌습니다. 누구든지 lxc이미지 목록을 다운로드 할 수없는 이유에 대한 조언을 제공 할 수 있습니까?

PC

PC는 기본 호스트에 추가 패키지가 거의 설치되지 않은 Ubuntu Server 16.10을 실행하는 비교적 새로운 설치 입니다. Docker가 설치되어 실행 중이지만 컨테이너가 없습니다. 흥미롭게도, 최근에 커널 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/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

1
/etc/resolv.conf우분투의 심볼릭 링크는 보통 정상입니다. 무엇이 /etc/nsswitch.conf포함되어 있습니까?
muru November

@muru 위에 추가했습니다 (이것은 symlink가 아닙니다)
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에 추가되었을 지 모릅니다. 패키지 목록 서버에 설치된 것은 위의 "PC"섹션에 링크로 표시되어 있습니다
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의 호스트 행에 "files dns"가 있습니다.
DrAl

1
내가 사용 dpkg-query -l '*resolve*'확인하고 발견 libnss-resolveI가 설치되어 있으므로, 설치 aptitude및 실행 된 aptitude why libnss-resolve그것은 말한다 i ubuntu-standard Recommends libnss-resolve.
DrAl

1
@ DrAl, 이것은 어떤 릴리스입니까? 나는 U16.04 ubuntu-standard& 사이에 그러한 의존성을 갖지 않았다 libnss-resolve.
user.dz

1
현재 설정에 대한 정보를 제공하지만 마지막 수정 사항이 있습니다. 이것은 또 다른 버그를 의미합니다 (systemd-resolved / nss-resolve는 신뢰할 수 없음). 서비스가 실행되고 systemctl status systemd-resolved.service
있습니까

1
@DrAl,에서 기본값을 사용하므로 man resolved.conf다시 /etc/resolv.conf: / 에서 resolve와 동일한 효과를 가져야합니다 . dnsnsswitch.conf
user.dz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.