DNS ทำงานกับโฮสต์ได้ แต่ไม่ทำงานกับ wget


10

TL; DR

ฉันมีสถานการณ์แปลก ๆ ที่ฉันสามารถทำการค้นหา DNS ในโฮสต์บางแห่ง แต่ไม่ใช่สถานที่อื่น ดูเหมือนว่าจะเกี่ยวข้องกับ resolv.conf โดยมีรายการเนมเซิร์ฟเวอร์หนึ่งที่ชี้ไปที่เนมเซิร์ฟเวอร์ของฉันและอีกรายการหนึ่งที่น่าจะเกี่ยวข้องกับนักเทียบท่า แต่ฉันไม่แน่ใจว่าจะแก้ไขได้อย่างไร

ปัญหา

ฉันได้อ่านการแนะนำที่ยอดเยี่ยมของStéphane Graber เกี่ยวกับ 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มีลักษณะเช่นนี้ (แต่ด้วยเหตุผลบางอย่างที่ฉันไม่ทราบว่าจริง ๆ แล้วเป็น symlink ไป/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มักเป็น symlink บน Ubuntu นั่นเป็นเรื่องปกติ สิ่งที่/etc/nsswitch.confมี?
muru

@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 ของฉันรายการแพ็คเกจที่ฉันได้รับ ติดตั้งบนเซิร์ฟเวอร์แสดงอยู่ในลิงก์ในส่วน "พีซี" ด้านบน
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-resolveมีการติดตั้งเพื่อให้ผมติดตั้งaptitudeและวิ่งและกล่าวว่าaptitude why libnss-resolve i ubuntu-standard Recommends libnss-resolve
DrAl

1
@DrAl รุ่นนี้คืออะไร? ฉัน U16.04 ไม่มีการพึ่งพาดังกล่าวระหว่าง &ubuntu-standard libnss-resolve
user.dz

1
นั่นทำให้เราทราบเกี่ยวกับการตั้งค่าปัจจุบัน แต่คุณมีการแก้ไขครั้งล่าสุดซึ่งหมายความว่านี่เป็นข้อผิดพลาดอื่น คุณมีบริการที่ใช้systemctl status systemd-resolved.service
user.dz

1
@DrAl ดังนั้นจึงใช้ค่าเริ่มต้นจากman resolved.confนั่นหมายความว่าเรากลับไปที่/etc/resolv.conf: / resolveควรจะมีผลเช่นเดียวกับในdns nsswitch.conf
user.dz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.