注意:我的问题是不是如何停止 nm 更新 /etc/resolv.conf。而不是如何使 openconnect 工作。相反,我只是想了解有关在 ubuntu 中配置 resolv.conf 的一些细节。为什么有两种配置方法(/etc/resolv.conf 是指向 /run/resolvconf/resolv.conf 或 /var/run/NetworkManager/resolv.conf 的符号链接),为什么我得到不同的配置,为什么有时我在 127.0.1.1 上运行 DNS 服务器,有时却没有。
我使用的是 xubuntu 17.04 版。我需要连接到 pulse secure(现在是 5.3r1)VPN。之前这款 VPN 产品名为瞻博网络的 Junos Pulse。现在我有几种方式可以连接到这个 VPN:
- Pulse Secure 5.3r1 - 由我们的服务提供商提供。包含需要大量 32 位库的 32 位 GUI。
- 使用 openconnect --juniper
- 通过网络管理器 (Juniper/Pulse 网络连接类型) 创建 VPN 连接。Juniper 支持最近已添加到网络管理器中,由 network-manager-openconnect-gnome 包提供。
但在连接 VPN 时,我在 DNS 配置方面遇到了一些麻烦。我没有做任何更改,现在似乎使用了 systemd-resolve。根据 systemd-resolve 文档,它将 /etc/resolv.conf 作为 /run/resolvconf/resolv.conf 文件的链接进行管理,并且该文件应包含“nameserver 127.0.0.53”。可以将新的名称服务器和默认域名添加到此文件,在这种情况下,所有名称服务器都会被使用。在这种情况下,一切都正常。
但重启后,有时我发现 /etc/resolv.conf 指向 /var/run/NetworkManager/resolv.conf,并包含“# Generated by NetworkManager”和“nameserver 127.0.1.1”行。在这种情况下,我的 VPN 的名称解析不起作用。
所以问题是 127.0.1.1 DNS 服务器是什么,为什么我有两个 DNS 服务器而不是一个。实际上我根本不需要本地 DNS 服务器,但无论如何。为什么网络管理器将 /etc/resolv.conf 链接设置为 /var/run/NetworkManager/resolv.conf。
我刚刚检查过netstat -utlp
:
Proto Local Address Program name
tcp 0.0.0.0:5355 (hostmon) systemd-resolved
udp 127.0.0.53:53(domain) systemd-resolved
udp 0.0.0.0:5353 (mdns) chrome
udp 0.0.0.0:5353 (mdns) avahi-daemon
udp 0.0.0.0:5355 (hostmon) systemd-resolved
我检查了systemd-resolve --status
:
Global
DNS Servers: 127.0.1.1
...
我检查了网络配置/etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
而且我没有安装 dnsmasq。
PS:似乎 Network Manager 代替 resolvconf 安装该链接。需要检查。但仍然不明白为什么如果安装了 systemd-resolve 会这样。为什么不使用 systemd-resolve 来做这件事。
PSS:刚刚发现 ubuntu 中有两个独立的服务:resolvconf.service(来自 resolvconf 包),描述在 /lib/systemd/system/resolvconf.service 中。以及 systemd-resolved.service(来自 systemd 包),描述在 /lib/systemd/system/systemd-resolved.service 中。快速谷歌搜索并没有给我答案,为什么有两个服务做同样的工作,并且是核心 ubuntu 的一部分,甚至无法卸载。