我在 Arch Linux 系统上使用网络管理器(1.18.0-1),其中
resolvconf
也存在(openresolv
它是基本包netctl
依赖项)。
当我通过 NetworkManager 连接到 VPN 服务器时,断开 VPN 连接后,DNS 记录的持久性出现问题。我找到了部分原因:
- 连接后,NetworkManager 进程将 VPN 名称服务器包含在
resolv.conf
- 关于
/etc/ppp/ip-up.d/00-dns.sh
(下文)和有效的USEPEERDNS=1
被resolvconf
调用;它将备份resolv.conf
并替换为自己的域名服务器记录 /etc/ppp/ip-down.d/00-dns.sh
VPN断开后,resolvconf
删除名称服务器记录并恢复resolv.conf
(resolv.conf.bak
此时)无法访问的名称服务器记录
肮脏的修补程序是禁用/etc/ppp/ip-up.d/00-dns.sh
(或只是注释掉该/usr/bin/resolvconf ...
行)。我不想卸载,openresolv
因为它会破坏netctl
依赖关系,而且我也想要这个基础包。
由于 NetworkManager 不是 Arch Linux 中的“标准”网络工具,我不确定这是否是一种错误,或者我遗漏了哪些设置。解决它的正确方法是什么?
/etc/ppp/ip-up.d/00-dns.sh:
#!/bin/sh
if [ "$USEPEERDNS" = "1" -a -f /etc/ppp/resolv.conf ]; then
if [ -x /usr/bin/resolvconf ]; then
/usr/bin/resolvconf -a ${IFNAME} </etc/ppp/resolv.conf
else
[ -e /etc/resolv.conf ] && mv /etc/resolv.conf /etc/resolv.conf.backup.${IFNAME}
mv /etc/ppp/resolv.conf /etc/resolv.conf
chmod 644 /etc/resolv.conf
fi
fi