我在 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
並替換為自己的名稱伺服器記錄 - VPN 斷開連線後,
/etc/ppp/ip-down.d/00-dns.sh
呼叫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