无法配置 NetworkManager 以使用 dnsmasq

无法配置 NetworkManager 以使用 dnsmasq

我正在使用 openconnect 连接到 vpn 并使用 vpn-slice 进行 vpn 分割。openconnect 在启动后修改了 /etc/resolv.conf,但这对 vpn 域名解析没有帮助。

为了解决这个问题,我将 NetworkManager 配置为使用 dnsmasq 进行域名解析。

/etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

并配置dnsmasq使用内部vpn dns来解析自定义域名。

/etc/NetworkManager/dnsmasq.d/myvpn

server=/.vpn.domain/192.168.213.104

这在 Ubuntu 18.04 上完美运行

我尝试在另一台笔记本电脑上执行相同操作,但失败了。另一台笔记本电脑安装了 Ubuntu 20.04。

在那里,即使配置相同,域名也无法解析(如果我没有完全错过什么,我真的希望我错过了)。如果我将域名添加到 /etc/hosts,一切都会开始正常工作。但是有很多名字,所以我更喜欢使用 dnsmasq

这两台机器的区别如下

在 Ubuntu 18.04 中,一切正常,/etc/resolv.conf 和 /run/NetworkManager/resovl.conf 相同,仅包含以下几行

/etc/resolv.conf

#Generated  by NetworkManager
nameserver 127.0.1.1

即 dnsmasq

在 Ubuntu 20.04 中,/run/Networkmanager/resolv.conf 和 /etc/resolv.conf 有所不同。/etc/resolv.conf 包含很多内容,而 /run/NetworkManager/resolv.conf 包含与 Ubuntu 18.04 上相同的行

/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 "resolvectl 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
options edns0 trust-ad

由 systemd 解析

/运行/NetworkManager/resolv.conf

#Generated  by NetworkManager
nameserver 127.0.1.1

即 dnsmasq

此外,Ubuntu 18.04 目录 /etc/dnsmasq.d 也存在,包含两个文件

/etc/dnsmasq.d/网络管理器

# Tell any system-wide dnsmasq instance to make sure to bind to interfaces
# instead of listening on 0.0.0.0
# WARNING: changes to this file will get lost if network-manager is removed.
bind-interfaces     

/etc/dnsmasq.d/ubuntu-fan

# ensure that any system dnsmasq does not bind to fan-*
bind-interfaces
except-interface=fan-* 

在 Ubuntu 20.04 中,目录 /etc/dnsmasq.d 甚至不存在

dnsmasq 在两台机器上都在运行。

ps aux | grep dnsmasq
nobody     31355  0.0  0.0  14788  4280 ?        S    09:47   0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

我似乎忽略了一些细节,但我对这类事情没有什么经验,也不知道如何诊断。如能得到任何帮助,我将不胜感激。

答案1

我正在使用 Ubuntu 20.04,内核 5.4.0-73-generic,并且它已经为我工作了。

我所要做的就是添加一行

dns=dnsmasq

到 /etc/NetworkManager/NetworkManager.conf

并创建一个 /etc/NetworkManager/dnsmasq.d/custom-dns 文件,其内容如下:

server=/.mydomain.test/205.251.196.172

然后我重新启动了网络管理器

sudo service network-manager restart

并且有效

:~$ nslookup -type=TXT something.mydomain.test
Server:     127.0.1.1
Address:    127.0.1.1#53

something.mydomain.test text = "test value"

我希望它有帮助。

相关内容