DNS bekerja dengan host, tetapi tidak dengan wget

10

TL; DR

Saya punya situasi aneh di mana saya bisa melakukan pencarian DNS pada beberapa host tetapi tidak yang lain. Ini tampaknya terkait dengan resolv.conf yang memiliki satu entri server nama yang menunjuk ke server nama saya dan yang lain yang mungkin berkaitan dengan buruh pelabuhan, tapi saya tidak yakin bagaimana cara memperbaikinya.

Masalah

Saya telah membaca pengantar Stéphane Graber yang luar biasa untuk LXD dan ingin mencobanya. Karena itu, saya melakukan:

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

Saya mengkonfigurasinya dengan semua pengaturan default. Saya kemudian mengetik:

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

Beberapa tes

Saya mencoba mengakses alamat itu dari browser web di PC lain dan itu berfungsi dengan baik. Jadi saya pikir ada yang salah dengan pengaturan DNS, tetapi:

$ 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

Jadi saya mencoba 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"

yang membuat saya berpikir bahwa ada masalah dengan koneksi internet saya, tetapi jika saya menggunakan us.images.linuxcontainers.org (yang saya lihat menyebutkan suatu tempat di 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]

Saya juga mencoba canonical.images.linuxcontainers.org, yang (menurut di hostatas) adalah apa images.linuxcontainers.org adalah alias dari dan itu bekerja juga, jadi sepertinya hostbisa mencari images.linuxcontainers.org, sementara wgetdan lxctidak bisa, tetapi wget dapat mengakses canonical.images.linuxcontainers.org dan sebagian besar situs lain yang pernah saya coba.

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

Saya juga sudah mencoba wget -4dan wget -6mengesampingkan masalah IPv6, tetapi hasilnya sama saja. Akhirnya saya mencoba beberapa program lain seperti w3mtetapi tidak ada perbedaan di sana juga.

Saya jelas melewatkan sesuatu; adakah yang bisa memberikan saran mengapa saya tidak bisa lxcmengunduh daftar gambar?

PC

PC adalah instalasi yang relatif baru yang menjalankan Ubuntu Server 16.10 dengan sangat sedikit paket tambahan yang diinstal pada host utama. Docker diinstal dan dijalankan tetapi tidak ada wadah yang menyala. Menariknya, saya baru-baru ini reboot ke kernel 4.8.6 untuk menguji masalah lain yang saya alami dan dengan kernel itu saya bisa mengakses images.linuxcontainers.org, tetapi buruh pelabuhan tidak mau memulai, jadi saya bertanya-tanya apakah ini mungkin ada hubungannya dengan buruh pelabuhan .

Konfigurasi

/etc/resolv.confterlihat seperti ini (tetapi karena beberapa alasan saya tidak menyadarinya, sebenarnya adalah symlink ke /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

Jika saya melakukan query server nama yang terdaftar pertama saya mendapatkan hasil yang sama seperti jika saya tidak menambahkan alamat server nama:

$ 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

Jika saya melakukan query yang kedua, itu akan habis tanpa mencapai server:

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

Jika saya meminta yang kedua tetapi menggunakan nama kanonik itu berfungsi dan kemudian habis ???

$ 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

Edit 1:

/etc/nsswitch.conf terlihat seperti ini:

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

Edit 2

Nsswitch.conf yang dimodifikasi sekarang terlihat seperti ini:

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

Edit 3

Isi dari /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
sumber
1
/etc/resolv.confbiasanya symlink di Ubuntu, itu normal. Apa yang /etc/nsswitch.confmengandung?
muru
@uru saya sudah menambahkannya di atas (yang ini bukan symlink)
DrAl
2
@ ThatGuy Terima kasih untuk itu. Ini tidak akan bekerja dengan setiap server (karena tergantung pada apakah server mencari nama domain) - dalam hal ini saya bisa menggunakan canonical.images.linuxcontainers.org karena ini sepertinya berfungsi. Namun, saya juga perlu meyakinkan lxc image listdan lxc launchmenggunakan ini alih-alih alamat bawaan.
DrAl
1
@DrAl, Ini pertama kali melihat resolvekata kunci host, sepertinya salah. Anda harus memiliki sesuatu seperti hosts: files dns [!UNAVAIL=return]atau jika Anda menginstal mDNS files dns mdns4_minimal [NOTFOUND=return] mdns4. Anda dapat menghapus [NOTFOUND=return]atau [!UNAVAIL=return], itu adalah tindakan default jika tidak ada yang tersisa untuk ditanyakan.
user.dz
1
@ user.dz, saya sudah mencoba menghapus ini (walaupun ini adalah pengaturan default oleh instalasi saya karena saya belum pernah menyentuh file ini sebelumnya). Ini tampaknya memungkinkan wget untuk bekerja (walaupun setelah beberapa detik menunda "resolving images.linuxcontainers.org). Terima kasih! Adakah ide mengapa ini mungkin telah ditambahkan ke /etc/nsswitch.conf saya? Daftar paket yang saya miliki diinstal ke server tercantum dalam tautan di bagian "The PC" di atas.
DrAl

Jawaban:

2
  • Ini pertama kalinya melihat resolvekata kunci host, sepertinya salah. Anda harus memiliki sesuatu seperti

    hosts: files dns [NOTFOUND=return]
    

    atau jika Anda memiliki mDNS diinstal

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Anda dapat menghapus [NOTFOUND=return]atau [!UNAVAIL=return], itu adalah tindakan default jika tidak ada yang tersisa untuk ditanyakan.

  • Nah, setelah beberapa penggalian saya bisa menemukan bahwa ada modul NSS yang baru bagi saya

    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.
    

    Anda bisa menginstalnya entah bagaimana dan tidak dengan paket yang Anda sebutkan. Tidak ada paket tergantung padanya.

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

    Tapi saya tidak bisa mengatakan apa-apa sekarang, mengapa systemd-resolvedtidak bisa diandalkan. Lebih baik melaporkannya sebagai bug di systemd.

user.dz
sumber
1
Menarik, terima kasih. Saya mencoba menghapus "ketetapan" dan wgethasilnya menjadi jauh lebih cepat, jadi sepertinya itulah yang menyebabkan masalah. Baris host saya di nsswitch.conf sekarang hanya memiliki "file dns".
DrAl
1
Saya biasanya dpkg-query -l '*resolve*'memeriksa dan menemukan bahwa itu libnss-resolvesudah diinstal, jadi saya menginstal aptitudedan menjalankan aptitude why libnss-resolvedan dikatakan i ubuntu-standard Recommends libnss-resolve.
DrAl
1
@DrAl, rilis apa ini? Saya sudah U16.04 tidak ada ketergantungan antara ubuntu-standard& libnss-resolve.
user.dz
1
Itu memberi kita sedikit informasi tentang pengaturan saat ini, tetapi Anda memiliki perbaikan terakhir, yang berarti ini bug lain (systemd-resolved / nss-resol tidak dapat diandalkan). Apakah Anda menjalankan systemctl status systemd-resolved.service
layanannya
1
@DrAl, jadi itu menggunakan default, dari man resolved.conf, itu berarti kita kembali ke /etc/resolv.conf: /. resolveharus memiliki efek yang sama seperti dnspada nsswitch.conf.
user.dz