下列的如何禁用 systemd-resolved 并使用 dnsmasq 解析 DNS?
然而,我尽可能地遵循它,但仍然无法正确地用 dnsmasq 替换 systemd-resolved——
如果我将 放在下dns=dnsmasq
,那么我的 中的就是我的 ISP 的,而不是我的 的。如果删除它,那么我的 中的仍将是的,即[main]
/etc/NetworkManager/NetworkManager.conf
nameserver
/etc/resolv.conf
dnsmasq
nameserver
/etc/resolv.conf
systemd-resolved
127.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.53
是systemd-resolved
,而对于dnsmasq
,应该是nameserver 127.0.0.1
。这就是为什么所有 DNS 查询都超时的原因。
即,答案缺少一步,即将 改为,nameserver
但我不知道该怎么做。127.0.0.1
/etc/resolv.conf
答案1
我不知道您为什么要尝试替换 systemd-resolved,但如果您需要同时运行它们......
关于dnsmasq
和systemd-resolved
...
执行ps auxc | grep -i dns
和ps auxc | grep -i resolv
并查找dnsmasq
和systemd-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/interfaces
16.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
。