我在带有 KDE 的 Debian 11 系统上工作,并使用网络管理器来处理网络连接:普通 LAN 和 VPN。这些是我的配置:
# cat /etc/*release*
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
# plasmashell -v
plasmashell 5.20.5
# nmcli -v
nmcli tool, version 1.30.6
在连接到 VPN 之前,我的 resolv.conf 如下所示:
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
当我连接到 VPN 时:
# cat /etc/resolv.conf
# Generated by NetworkManager
search fakecompany.com
nameserver 8.8.8.8
nameserver 192.168.50.9
这可能是它的设计工作方式,但这意味着在公司 DNS 上的名称查找往往会失败,因为我们的内部主机名当然不在开放的互联网上。我现在必须忍受的是手动编辑resolv.conf
,这有点乏味。
有没有办法让网络管理器简单地替换原来的?
答案1
将连接ipv4.dns-priority
和ipv6.dns-priority
参数设置为消极的值(参见‘nm-settings’手册页)。
nmcli con modify "My Little VPN" ipv4.dns-priority -100
nmcli con modify "My Little VPN" ipv6.dns-priority -100
127.0.0.53
或者:启用 systemd-resolved 服务;这应该会导致 resolv.conf仅指向,并resolvectl
用于控制 DNS 配置。(您可能需要手动更改 resolv.conf 符号链接。)这样做的好处是可以同时支持多组 DNS 服务器 - 您公司的 DNS 将用于从 VPN 获得的后缀,而 8.8.8.8 将用于其他所有内容。
systemctl enable --now systemd-resolved
# Swap resolv.conf and restart both services for a clean state
ln -bvnsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved NetworkManager
# Check status
resolvectl
# Bring up VPN, check status again
nmcli con up "My Little VPN"
resolvectl
resolvectl query foo.mycompany.com