AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1257384
Accepted
Stanislav
Stanislav
Asked: 2020-07-09 06:56:42 +0800 CST2020-07-09 06:56:42 +0800 CST 2020-07-09 06:56:42 +0800 CST

resolv.conf 和 linux DNS 是如何工作的?

  • 772

我在使用 docker 网络(特别是自定义 DNS 代理设置)时遇到了一些问题,我发现我的 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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

  nameserver 172.17.0.1
  nameserver 10.0.0.10
nameserver 127.0.0.53

因此,3d 方自定义 DNS 代理基本上将第三个 IP 更改为如下所示:

#nameserver 127.0.0.53
nameserver [proxy-dns-entry-ip]

我在这个 DNS 下对主机名的所有请求都被打破10.0.0.10了nslookup:

$ nslookup container1.hostname           

;; Got recursion not available from 172.17.0.1, trying next server
Server:     10.0.0.10
Address:    10.0.0.10#53

** server can't find container1.hostname: NXDOMAIN
$ nslookup container1.hostname [proxy-dns-entry-ip]

Server:     192.168.144.3
Address:    192.168.144.3#53

Non-authoritative answer:
Name:   container1.hostname
Address: 192.168.128.3
Name:   container1.hostname
Address: 192.168.128.3

我已经编辑了文件,只是注释掉了前两个 IP 地址,并且新的 DNS 工作正常,当这个代理被禁用并且唯一的条目是127.0.0.53时,主机网络也工作正常(比如,我可以 ping google并使用我的浏览器),码头工人和容器也在工作。

我对网络很陌生(尤其是 Linux)。有人可以向我解释这 3 个地址发生了什么以及它们如何与 ubuntu 的 DNS 服务器耦合(我的意思是我在 GUI 网络设置中定义的那些)?

networking dns proxy docker
  • 1 1 个回答
  • 5675 Views

1 个回答

  • Voted
  1. Best Answer
    Thomas Ward
    2020-07-09T07:22:59+08:002020-07-09T07:22:59+08:00

    我将不按顺序回答您的问题,因为它们都略有不同,而且还因为一个问题的答案将帮助您理解另一个问题的答案,等等。

    回答 #2:DNS 服务器如何在您的系统中工作,以及部分回答 #3 关于 resolv.conf 的作用

    当您的系统中使用了多个 DNS 服务器时,它们会按顺序进行查询。所以如果我的 resolv.conf 有:

    nameserver 1.2.3.4
    nameserver 5.6.7.8
    nameserver 10.10.1.0
    nameserver 127.0.0.53
    

    ...那么任何在您的系统上请求 DNS 记录的东西都将首先尝试 1.2.3.4。如果 1.2.3.4 响应,那么它就结束了(包括 SERVFAIL 错误响应和 NXDOMAIN 响应,两者都是“有效回复”)。但是,如果它在响应中超时,并且没有返回响应,那么它会尝试下一个服务器 - 5.6.7.8。如果 5.6.7.8 响应,那么它会停在那里。如果没有响应,则继续尝试 10.10.1.0。这种情况一直持续到按顺序列出的服务器之一给出响应或它们都超时。这是 DNS 的设计,“第一个实际回复的是我们处理的”

    这是因为它的查找顺序依次为 Primary、Secondary、Tertiary、Quaternary 等。第一个响应停止查找链。

    您列表中的最后一个和此处的示例列表中的 127.0.0.53 进入您的 SystemD ResolveD 存根,这是#3 的答案所在。

    对#3 的回答:这与您的 GUI 设置有何不同?

    简而言之,resolv.conf用于确定您的 DNS 服务器优先级设置。通常在 18.04 中,它只会指向127.0.0.53哪个是您的systemd-resolved处理程序。

    反过来,您的systemd-resolved处理程序将由您的网络管理器 GUI 设置提供,您的 DNS 服务器用于其递归查询。这是我的 GUI 设置提供给systemd-resolved我的 wifi 连接的设置示例:

    $ systemd-resolve --status
      ....
        Link 2 (wlp59s0)
          Current Scopes: DNS
           LLMNR setting: yes
    MulticastDNS setting: no
          DNSSEC setting: no
        DNSSEC supported: no
             DNS Servers: 10.10.1.0
              DNS Domain: ~.
    

    当您的系统收到一个 DNS 查询并将其交给 127.0.0.53 时,会发生什么情况,它将检查其本地 DNS 缓存以查看是否有已知记录。然后,如果失败,它会查询系统中指定的 DNS 服务器。在这种情况下,假设 myresolve.conf是一个基本系统,如下所示:

    $ cat /etc/resolv.conf
    # This file is managed by man:systemd-resolved(8). Do not edit.
    #
    # This is a dynamic resolv.conf file for connecting local clients to the
    # internal DNS stub resolver of systemd-resolved. This file lists all
    # configured search domains.
    #
    # Run "systemd-resolve --status" to see details about the uplink DNS servers
    # currently in use.
    #
    # Third party programs must not access this file directly, but only through the
    # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
    # replace this symlink by a static file or a different symlink.
    #
    # See man:systemd-resolved.service(8) for details about the supported modes of
    # operation for /etc/resolv.conf.
    
    nameserver 127.0.0.53
    

    ... 将导致查找google.com到本地systemd-resolved实例,如果它没有缓存的 DNS 条目,它将使用来自内部的 DNS 请求转到 10.10.1.0 resolved。

    但是,在您的系统中,根据答案 #2,行为会有所不同,因为您的 resolv.conf 中有多个其他修订版会破坏此过程。

    对#1 的回答:这些地址是什么?

    某人或某事更改了您的 resolv.conf 系统以添加这些附加地址。

    那是你或 Docker 做的。10.0.0.10 可以是另一个 Docker 实例或另一个 Docker 侦听器,通过 dnsmasq 或您环境中的此类或其他网络添加。

    不幸的是,我们无法深入了解 10.0.0.10,因为它可能是任何东西。我们可以 ID 172.17.0.1 因为你说它是 Docker,而 127.0.0.53 因为那是 SystemD ResolveD。

    正如我在上面对#2 和#3 的回答中所说的,127.0.0.53 是systemd-resolved您的 GUI DNS 设置。

    对 #4 的回答:如何使更改永久化?

    除非您删除符号链接,否则文件将由resolvconf. 除非您resolvconf以其他方式配置,否则它将是一个符号链接。进行永久更改的唯一方法是破坏符号链接,然后简单地拥有一个静态文件。因此,要使用 Docker DNS 和系统 DNS,您将拥有一个静态文件,/etc/resolv.conf其中包含以下内容:

    # THIS IS NOT FED BY resolvconf, any changes here are PERMANENT.
    nameserver 172.17.0.1
    nameserver 127.0.0.53
    

    这将是一个永久的配置设置,直到您更改它或将 resolv.conf 设置回符号链接。

    然而不幸的是,除了删除符号链接并用静态文件替换之外,“没有办法”告诉resolvconf在此处保留一组永久命令。

    还有其他更复杂的方法,例如拥有一个单独配置的 DNS 服务器系统,但这超出了“正常”的范围,并且绝对是您可能不想开始研究的“一种 hacky 解决方法”。

    • 4

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve