使用 dnsmasq 作为系统 DNS 服务

使用 dnsmasq 作为系统 DNS 服务

下列的如何禁用 systemd-resolved 并使用 dnsmasq 解析 DNS?

然而,我尽可能地遵循它,但仍然无法正确地用 dnsmasq 替换 systemd-resolved——

如果我将 放在下dns=dnsmasq,那么我的 中的就是我的 ISP 的,而不是我的 的。如果删除它,那么我的 中的仍将是的,即[main]/etc/NetworkManager/NetworkManager.confnameserver/etc/resolv.confdnsmasqnameserver/etc/resolv.confsystemd-resolved127.0.0.53

总而言之,如何正确使用 dnsmasq 作为系统 DNS 服务?

  • 我已经删除了resolvconf,现在的问题是,
  • 如何用 dnsmasq 替换 systemd-resolved?

附言:

$ lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

更新:

我实际上尝试了两次,最近一次尝试是在全新安装的 Lubuntu 18.04.2 LTS 上进行的,两次都失败了。“失败”的意思是,我可以看到dnsmasq正在通过 监听 ' :53' netstat,但dig cnn.com和/或任何 DNS 查询都超时了。

这是更新后的信息。请注意,我已恢复更改,现在重新使用 systemd-resolved。因此结果grep -i stub /etc/systemd/resolved.conf反映了我当前的阶段(回到systemd-resolved)。

$ dpkg -l '*dnsmasq*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                Version        Architecture   Description
+++-===================-==============-==============-===========================================
ii  dnsmasq             2.79-1         all            Small caching DNS proxy and DHCP/TFTP serve
ii  dnsmasq-base        2.79-1         amd64          Small caching DNS proxy and DHCP/TFTP serve
un  dnsmasq-base-lua    <none>         <none>         (no description available)
ii  dnsmasq-utils       2.79-1         amd64          Utilities for manipulating DHCP leases

$ ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 35 2019-07-14 22:07 /etc/resolv.conf -> /var/run/NetworkManager/resolv.conf

$ grep -i stub /etc/systemd/resolved.conf
#DNSStubListener=yes

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

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

# I've removed `resolvconf`:
$ dpkg -l '*resolvconf*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                Version        Architecture   Description
+++-===================-==============-==============-===========================================
un  resolvconf          <none>         <none>         (no description available)

$ sudo ls /run/resolvconf/resolv.conf
ls: cannot access '/run/resolvconf/resolv.conf': No such file or directory

更新2:

我现在认为我知道哪里出了问题——更改后(按照答案中的所有步骤),我检查了的内容/etc/resolv.conf,发现其内容保持不变。即仍然有nameserver 127.0.0.53

现在我记得对于nameserver 127.0.0.53systemd-resolved,而对于dnsmasq,应该是nameserver 127.0.0.1。这就是为什么所有 DNS 查询都超时的原因。

即,答案缺少一步,即将 改为,nameserver但我不知道该怎么做。127.0.0.1/etc/resolv.conf

答案1

我不知道您为什么要尝试替换 systemd-resolved,但如果您需要同时运行它们......

关于dnsmasqsystemd-resolved...

执行ps auxc | grep -i dnsps auxc | grep -i resolv并查找dnsmasqsystemd-resolved,如果两者都在运行,则需要systemd-resolved通过编辑/etc/systemd/resolved.conf和禁用的 DNS 部分......

改变:

#DNSStubListener=yes

到:

DNSStubListener=no

然后重新启动 systemd-resolve 和 dnsmasq,或者重新启动。

您需要重置符号链接 /etc/resolv.conf

sudo mv /etc/resolv.conf /etc/resolv.conf.OLD# 保存旧的符号链接

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

答案2

我遇到了同样的问题,但仅限于从 16.04 系统更新到 18.04 的系统。我还使用 dnsmasq 作为我的 LAN DNS 和 DHCP 服务器。在新安装的 18.04 上,它开箱即用,无需修改/etc/systemd/resolved.conf(DNSStubListener)。

这个和其他差异很烦人,特别是在使用像 ansible 这样的配置管理工具时(例如在/etc/network/interfaces16.04 下定义的网络定义或/etc/netplan/01-netcfg.yaml在 18.04 下定义的网络定义)

因此,我最终决定用全新的 18.04 重新安装所有服务器,而不是升级。

答案3

我使用 Ubuntu(新安装)18.04.03 路由器作为家用电脑。路由器从互联网提供商处获取名称服务器。我将其用于dnsmasq家庭网络中的 dns 和 dhcp。从

systemctl stop systemd-resolved

调整/etc/systemd/resolved.conf

...
#DNSStubListener=yes
DNSStubListener=no

检查 /etc/resolv.conf 是否已链接。然后将 /etc/resolv.conf 链接修改为 /run/systemd/resolve/resolv.conf,而不是 /run/systemd/resolv/stub-resolv.conf

rm /etc/resolv.conf
ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf

然后

systemctl start dnsmasq

全部重启后,dns 服务器就应该正确了/etc/resolv.conf

相关内容