我正在使用 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"
我希望它有帮助。