我正在努力让网络管理器正常工作 - 这是在 Debian 11 上。我的 NIC 有一个静态 IP 地址,但我最近添加了 VPN,它工作正常。问题是,它搞砸了/etc/resolv.conf
;之前,我有这个:
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.0.1
作为 VPN 设置的一部分,我已指定nameserver 192.168.50.9
和search some.domain
;我期望的是resolv.conf
将被替换,以便我在使用 VPN 时使用公司的 DNS - 然而,发生的事情是,nm 只是将它们全部塞进了同一个文件中,如下所示:
# Generated by NetworkManager
search some.domain
nameserver 8.8.8.8
nameserver 192.168.50.9
nameserver 8.8.4.4
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 192.168.0.1
问题在于,解析器从不使用除了第一个名称服务器之外的任何东西 - 当我搜索公司 DNS 已知的服务器时,会发生以下情况:
# host -d vogon
Trying "vogon.some.domain"
Trying "vogon"
Host vogon not found: 3(NXDOMAIN)
Received 98 bytes from 8.8.8.8#53 in 20 ms
就解析器而言,第一个名称服务器工作正常 - 它返回了一个结果 - 因此它永远不会继续使用第二个名称服务器。
所以,问题是:我该如何设置以便网络管理器做正确的事情,并简单地用我为 VPN 连接指定的内容替换我的 resolv.conf,然后在 VPN 断开连接时将其恢复?
答案1
我建议使用systemd-已解决服务(启动它,NM 将自动使用它),它会跟踪每个接口的名称服务器。例如,如果 VPN 接口的 DNS 搜索后缀为“some.domain”,则对“vogon.some.domain”的查询将使用与该接口关联的名称服务器。
此外,每当 NetworkManager 启动 VPN 时,它都会使用 systemd-resolved 中的“DefaultRoute”标志配置名称服务器,使其仅使用与 VPN 接口关联的名称服务器进行所有查询。
(如果不使用 systemd-resolved,将 VPN 配置文件配置为~.
在 DNS 搜索域中,理论上应该可以直接在 NM 中实现相同的操作,但我还没有测试过。)