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
    • 最新
    • 标签
主页 / unix / 问题 / 417645
Accepted
Jonny Asmar
Jonny Asmar
Asked: 2018-01-17 16:45:27 +0800 CST2018-01-17 16:45:27 +0800 CST 2018-01-17 16:45:27 +0800 CST

dnsmasq 和 systemd 导致间歇性 CPU 峰值

  • 772

问题:

运行 Ubuntu 17.10

我已经尝试解决(呵呵)这个问题大约一周了,尽管有无数的谷歌搜索和大约 20 次不同的尝试,但我无法阻止 dnsmasq 周期性地导致我的 CPU 因以下违规者而飙升约一分钟:

  • systemd-resolved
  • systemd-journald
  • dnsmasq

监控journalctl -f每次发生时我都会看到:

达到的最大并发 dns 查询数 (150)

伴随/之前是对某个域的疯狂请求循环(通常是 ubuntu 连接检查),如下所示:

query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.1.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53

我发现更改我的/etc/resolv.conf以使用nameserver 127.0.0.53会导致尖峰几乎瞬间消散。

但是,由于网络管理器会定期更新该文件,因此我必须大约每小时执行一次。


配置:

/etc/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 127.0.0.1
search fios-router.home

/etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

/etc/dnsmasq.conf

// All default except this at the very end for my wildcard DNS
address=/asmar.d/127.0.0.1

/run/dnsmasq/resolv.conf

nameserver 127.0.0.53

/运行/resolvconf/接口:

lo.dnsmasq:

nameserver 127.0.0.1

systemd-resolved:

nameserver 127.0.0.53

/etc/resolvconf/interface-order:

# interface-order(5)
lo.inet6
lo.inet
lo.@(dnsmasq|pdnsd)
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
em+([0-9])?(_+([0-9]))*
p+([0-9])p+([0-9])?(_+([0-9]))*
@(br|eth)*([^.]).inet6
@(br|eth)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*([^.]).inet
@(br|eth)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*
@(ath|wifi|wlan)*([^.]).inet6
@(ath|wifi|wlan)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*([^.]).inet
@(ath|wifi|wlan)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*
ppp*
*

systemd-resolve --status:

Global
         DNS Servers: 127.0.0.1
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 5 (br-b1f5461ac410)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Link 4 (docker0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Link 3 (wlp62s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Link 2 (enp61s0)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 8.8.8.8
                      8.8.4.4
                      ::1

问题:

如何在仍使用通配符域名的同时解决此问题?

可选:如何在使用 Google DNS 时实现这一点?

请不要建议增加并发 dns 查询。那不是解决方案。


解决了!

请参阅引导我找到解决方案的 telcoM 的 DNS 速成课程(已接受的答案)

当我尝试从该答案中获得的知识时,请查看我的后续和最终解决方案

ubuntu dnsmasq
  • 4 4 个回答
  • 4435 Views

4 个回答

  • Voted
  1. Best Answer
    telcoM
    2018-01-20T01:18:16+08:002018-01-20T01:18:16+08:00

    看起来您可能有dnsmasq127.0.0.1 中的进程和 127.0.0.53systemd-resolved中的进程在彼此之间来回传递查询,从而导致循环。即使dnsmasq单独也可能能够循环,因为默认情况下它/etc/resolv.conf会查找真正的 DNS 服务器以用于它没有信息的名称。

    您的 DNS 配置可能有很多层:

    • 首先,您可以通过 DHCP 或类似方式从 ISP 获得 DNS 服务器信息。
    • 然后,有NetworkManager,可以将其配置为覆盖信息并dnsmasq改为使用,但当前未以这种方式配置。
    • 相反,NetworkManager被配置为使用该resolvconf工具来更新真实的/etc/resolv.conf. 并且dnsmasq可能包括一个插入式配置,resolvconf用于覆盖 DHCP 接收的任何 DNS 服务,并在dnsmasq运行时使用 127.0.0.1 代替。
    • systemd-resolved 还可能包括一个用于 的插入式配置resolvconf,但显然被dnsmasq.

    我还不明白 127.0.1.1 和 127.0.0.53 是从哪里来的。它们是否可能dnsmasq在 Ubuntu 的默认配置中被提及?

    正如它在评论中所说/etc/resolv.conf,运行此命令以查看有关systemd-resolved配置的更多信息:

    systemd-resolve --status
    

    还要检查/run/resolvconf/interface/目录的内容:这是该resolvconf工具收集从各种来源获得的所有 DNS 服务器信息的地方。将/etc/resolvconf/interface-order确定检查每个源的顺序,直到遇到环回地址或 3 个 DNS 服务器已真正列出/etc/resolv.conf。

    由于您dnsmasq用于设置通配符域,因此您需要保留127.0.0.1-/etc/resolv.conf但您需要配置dnsmasq为不使用该文件,而是从其他地方获取它应该使用的 DNS 服务器。

    如果/run/NetworkManager/resolv.conf包含您通过 DHCP 从您的 ISP 获得的那些 DNS 服务器,您可以dnsmasq通过将此行添加到其配置中来轻松地使用它:

    resolv-file=/run/NetworkManager/resolv.conf
    

    这告诉dnsmasq了从哪里获取那些它还不知道的东西的 DNS 信息。所以如果你想使用谷歌 DNS,你可以dnsmasq配置

    resolv-file=/etc/google-dns-resolv.conf
    

    并将 Google DNS 的 DNS 配置行以通常格式放入/etc/google-dns-resolv.conf.

    • 5
  2. Pieter
    2018-08-08T01:46:59+08:002018-08-08T01:46:59+08:00

    使用 dnsmasq 配置修复了我的 dnsmasq systemd-resolve 竞赛。

    1. 对外部 dns 使用 systemd-resolve (127.0.0.53),因为它使用 dnssec 并具有根服务器。
    2. 仅将 dnsmasq 绑定到某些静态配置的环回,如果我需要 dhcp 可以添加更多接口。

    /etc/dnsmasq.d/myconfig

    #PES 20180808 dnsmasq and systemd-resolve conflict.
    # dont use /etc/resolv.conf, go direct to systemd-resolve, only bind to lo
    no-resolv
    bind-interfaces
    interface=lo
    server=127.0.0.53
    
    • 1
  3. ben.c
    2019-03-09T06:14:07+08:002019-03-09T06:14:07+08:00

    在 Ubuntu 18.04 上

    1 - 创建 /etc/google-dns-resolv.conf

    nameserver 8.8.8.8
    nameserver 8.8.4.4
    

    2 - 创建一个配置文件 /etc/dnsmasq.d/my_dnsmaq.conf

    resolv-file=/etc/google-dns-resolv.conf
    

    3 - 在 /etc/default/dnsmasq 底部插入

    IGNORE_RESOLVCONF=yes
    

    4 - 最后,重新启动您的 dnsmasq 服务

    sudo service dnsmasq restart


    我在上面使用了Johny 的答案,但是为了正确读取我的 dnsmasq 配置文件,我的答案中的步骤 nº3 丢失了。谢谢

    • 1
  4. Jonny Asmar
    2018-01-20T04:13:12+08:002018-01-20T04:13:12+08:00

    当我尝试各种解决方案时,我最初将此记录为问题的一部分。为了清楚起见,这已从该问题中剪切/粘贴到此答案中,但是如果没有telcoM的答案中提供的见解,此答案并不是独立的。

    解决方案:

    我根据以下telcoM的建议进行了以下更改。

    /etc/google-dns-resolv.conf使用以下内容创建:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
    

    添加resolv-file=/etc/google-dns-resolv.conf到/etc/dnsmasq.conf

    在进行更改并运行CPU 后sudo service dnsmasq restart,CPU 仍然飙升,但现在rsyslogd进入了违规者的组合。大约一分钟后它平静下来,但我不再看到127.0.1.1。journalctl -f

    更新:大约 10 分钟后,CPU 再次飙升:

    在此处输入图像描述

    更新#2:感谢下面 telcoM出色的小型 DNS 速成课程以及对来自何处127.0.0.53的怀疑,我挖了一点(请参阅我对他的回答的评论)并发现它来自/run/dnsmasq/resolv。 conf,其中有内容nameserver 127.0.0.53。我决定将内容更新为nameserver 127.0.0.1. 现在,我看到输出的唯一 IP 地址journalctl -f是127.0.0.1并且从那以后没有经历过 CPU 峰值(现在持续约 10 分钟;这至少与我的 CPU 之前享受的任何休息时间一样长)!

    [已解决] 更新 #3:127.0.0.1在/run/dnsmasq/resolv.conf中使用是愚蠢的。它完全杀死了我的 DNS 解析(起初它似乎工作,因为我只访问缓存的 DNS)。切换到使用 Google 名称服务器 ( 8.8.8.8& 8.8.4.4) DNS 解析再次正常工作后,我的通配符域继续工作,并且我没有遇到 CPU 峰值。当我执行典型的日常活动并相应地再次更新时,我将在大约一个小时内查看它的行为;希望有一个解决!

    更新 #4:这似乎现在可以按照更新 #3中的步骤解决。感谢telcoM提供的所有出色细节,引导我朝着正确的方向前进。赏金将在 15 小时后发放。

    • 0

相关问题

  • 使 Apple 键盘设置在 ../hid_apple/parameters/ 中持久化

  • 用文件中的点绘制二维图形

  • 如何验证我使用 9.9.9.9 作为 DNS?

  • 并行安装多个 linux 发行版

  • 自编译 OpenVPN 不会从 systemd 启动

Sidebar

Stats

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

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve