DNS hoạt động với máy chủ, nhưng không phải với wget


10

TL; DR

Tôi đã gặp một tình huống kỳ lạ khi tôi có thể thực hiện tra cứu DNS trên một số máy chủ nhưng không phải là máy chủ khác. Điều này dường như có liên quan đến độ phân giải. Có một mục nhập máy chủ tên trỏ đến máy chủ tên của tôi và một mục khác có lẽ phải làm với docker, nhưng tôi không chắc cách khắc phục.

Vấn đề

Tôi đã đọc phần giới thiệu tuyệt vời của Stéphane Graber về LXD và muốn dùng thử. Do đó, tôi đã làm:

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

Tôi cấu hình nó với tất cả các cài đặt mặc định. Sau đó tôi gõ:

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

Một số bài kiểm tra

Tôi đã thử truy cập địa chỉ đó từ một trình duyệt web trên PC khác và nó hoạt động tốt. Vì vậy, tôi đã tìm ra một cái gì đó phải sai với thiết lập DNS, nhưng:

$ 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

Vì vậy, tôi đã cố gắng 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"

điều này khiến tôi nghĩ rằng có vấn đề với kết nối internet của mình, nhưng nếu tôi sử dụng us.images.linuxcontainers.org (mà tôi thấy đề cập đến ở đâu đó trên 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]

Tôi cũng đã thử canonical.images.linuxcontainers.org, mà (theo hostở trên) là những gì hình ảnh.linuxcontainers.org là bí danh và nó cũng hoạt động, vì vậy có vẻ như hostcó thể tra cứu hình ảnh.linuxcontainers.org, trong khi wgetlxckhông thể, nhưng wget có thể truy cập canonical.images.linuxcontainers.org và hầu hết các trang web khác mà tôi đã thử.

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

Tôi cũng đã thử wget -4wget -6loại trừ các sự cố IPv6, nhưng kết quả cũng giống nhau. Cuối cùng tôi đã thử một số chương trình khác như thế w3mnhưng cũng không có gì khác biệt.

Tôi rõ ràng đang thiếu một cái gì đó; bất cứ ai có thể cung cấp bất kỳ lời khuyên về lý do tại sao tôi không thể lxctải về danh sách hình ảnh?

Máy tính

PC là một bản cài đặt tương đối mới chạy Ubuntu Server 16.10 với rất ít gói bổ sung được cài đặt trong máy chủ chính. Docker được cài đặt và chạy nhưng không có container nào được đưa lên. Thật thú vị, gần đây tôi đã khởi động lại vào kernel 4.8.6 để kiểm tra một vấn đề khác mà tôi gặp phải và với hạt nhân đó tôi có thể truy cập vào hình ảnh.linuxcontainers.org, nhưng docker sẽ không bắt đầu, vì vậy tôi tự hỏi liệu điều này có thể xảy ra với docker không .

Cấu hình

/etc/resolv.conftrông như thế này (nhưng vì một số lý do tôi không biết, thực ra là một liên kết tượng trưng đến /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

Nếu tôi truy vấn máy chủ tên được liệt kê đầu tiên, tôi sẽ nhận được kết quả tương tự như khi tôi không nối thêm địa chỉ máy chủ tên:

$ 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

Nếu tôi truy vấn lần thứ hai, nó sẽ hết thời gian mà không đến được máy chủ:

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

Nếu tôi truy vấn thứ hai nhưng sử dụng tên chính tắc thì nó hoạt động và sau đó hết thời gian ???

$ 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

Chỉnh sửa 1:

/etc/nsswitch.conf trông như thế này:

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

Chỉnh sửa 2

Các nsswitch.conf đã sửa đổi bây giờ trông như thế này:

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

Chỉnh sửa 3

Nội dung của /etc/systemd/resolve.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.confthường là một liên kết tượng trưng trên Ubuntu, điều đó là bình thường. Nó /etc/nsswitch.confchứa cái gì?
muru

@muru Tôi đã thêm nó ở trên (cái này không phải là một liên kết tượng trưng)
DrAl

2
@ThatGuy Cảm ơn vì điều đó. Điều này sẽ không hoạt động với mọi máy chủ (vì nó phụ thuộc vào việc máy chủ có tìm ra tên miền hay không) - trong trường hợp này tôi chỉ có thể sử dụng canonical.images.linuxcontainers.org vì điều này dường như hoạt động. Tuy nhiên, tôi cũng sẽ cần phải thuyết phục lxc image listlxc launchsử dụng điều này thay vì địa chỉ tích hợp.
DrAl

1
@DrAl, Đây là lần đầu tiên thấy resolvetừ khóa máy chủ, có vẻ như sai. Bạn nên có một cái gì đó như hosts: files dns [!UNAVAIL=return]hoặc nếu bạn đã cài đặt mDNS files dns mdns4_minimal [NOTFOUND=return] mdns4. bạn có thể xóa [NOTFOUND=return]hoặc [!UNAVAIL=return], dù sao đó cũng là hành động mặc định nếu không còn gì để truy vấn.
user.dz

1
@ user.dz, tôi đã thử xóa cái này (mặc dù nó được cài đặt mặc định bởi cài đặt của tôi vì trước đây tôi chưa bao giờ chạm vào tệp này). Điều này dường như cho phép wget hoạt động (mặc dù sau vài giây trì hoãn "giải quyết hình ảnh.linuxcontainers.org). Cảm ơn bạn! Mọi ý kiến ​​tại sao điều này có thể đã được thêm vào /etc/nsswitch.conf? Danh sách các gói tôi đã được cài đặt trên máy chủ được liệt kê trong một liên kết trong phần "PC" ở trên.
DrAl

Câu trả lời:


2
  • Đây là lần đầu tiên nhìn thấy resolvetừ khóa máy chủ, nó có vẻ sai. Bạn nên có một cái gì đó như

    hosts: files dns [NOTFOUND=return]
    

    hoặc nếu bạn đã cài đặt mDNS

    hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
    

    Bạn có thể xóa [NOTFOUND=return]hoặc [!UNAVAIL=return], dù sao đó cũng là hành động mặc định nếu không còn gì để truy vấn.

  • Chà, sau khi đào bới tôi có thể thấy rằng có một mô-đun NSS mới đối với tôi

    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.
    

    Cuối cùng, bạn có thể cài đặt nó bằng cách nào đó chứ không phải với các gói bạn đã đề cập. Không có gói phụ thuộc vào nó.

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

    Nhưng tôi không thể nói bất cứ điều gì ngay bây giờ, tại sao systemd-resolvedkhông đáng tin cậy. Nó là tốt hơn để báo cáo nó là lỗi trong systemd.


1
Thú vị, cảm ơn bạn. Tôi đã thử loại bỏ "giải quyết" và wgetnhận được nhanh hơn rất nhiều, vì vậy có vẻ như đó là nguyên nhân gây ra vấn đề. Dòng máy chủ của tôi trong nsswitch.conf hiện chỉ có "tệp dns".
DrAl

1
Tôi đã sử dụng dpkg-query -l '*resolve*'để kiểm tra và thấy rằng nó đã libnss-resolveđược cài đặt, vì vậy tôi đã cài đặt aptitudevà chạy aptitude why libnss-resolvevà nó nói i ubuntu-standard Recommends libnss-resolve.
DrAl

1
@DrAl, đây là bản phát hành nào? Tôi đã U16.04 không có sự phụ thuộc như vậy giữa ubuntu-standard& libnss-resolve.
user.dz

1
Điều đó cho chúng tôi một chút ánh sáng về thiết lập hiện tại, nhưng bạn có cách khắc phục cuối cùng, điều đó có nghĩa là lỗi này khác (systemd-yet / nss-giải quyết là không đáng tin cậy). Bạn có dịch vụ của nó đang chạy khôngsystemctl status systemd-resolved.service
user.dz

1
@DrAl, do đó, nó sử dụng mặc định, từ man resolved.confđó có nghĩa là chúng tôi quay lại /etc/resolv.conf: /. resolvenên có tác dụng tương tự như dnstrong nsswitch.conf.
user.dz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.