VPN 断开后,resolv.conf 权限/所有权发生变化

VPN 断开后,resolv.conf 权限/所有权发生变化

我最近安装了 Ubuntu 18.04。我通过标准设置->网络 GUI 设置了 VPN。我可以毫无问题地连接到 VPN,但是当我断开 VPN 连接时,我无法通过 Web 浏览器访问互联网。但是,我可以从 shell 窗口 ping 互联网地址。

我的 /etc/resolv.conf 文件是 /run/systemd/resolve/stub-resolv.conf 的符号链接。

在我连接到 VPN 之前,权限/所有权如下:

-rw-r--r-- 1 systemd-resolve systemd-resolve 701 Jun 20 20:28 /run/systemd/resolve/stub-resolv.conf

当我连接到 VPN 时,这些权限保持不变,但当我断开连接时,读取权限将被删除并且所有权更改为root:root,如下所示:

-rw------- 1 root root 701 Jun 20 20:31 /run/systemd/resolve/stub-resolv.conf

似乎由于这个原因,我的网络浏览器无法读取 resolv.conf 文件,因此不知道要使用哪个名称服务器

如果我chmod a+r这个文件,我可以正常访问互联网,即使所有权仍然在root:root

有人知道这里发生了什么吗?以及如何修复它,而无需每次断开 VPN 时手动更改 resolv 文件的权限?

答案1

我有同样的问题。也许这是一个错误。但我使用 NetworkManager。此解决方案不适用于它。脚本无法运行。我为此添加了我的解决方案。

NetworkManager 有类似的解决方案。必须将脚本添加到目录中:

/etc/NetworkManager/dispatcher.d

我已经添加了这个文件:“02-fix-resolv.conf.sh”:

#!/bin/sh
if [ "$1" = "ppp0" -a "$2" = "vpn-up" ]; then
  echo "bleeeeeee je dole" > /tmp/testjenahore.txt
  chmod a+r /run/systemd/resolve/stub-resolv.conf.pppd-backup.ppp0
  chown systemd-resolve:systemd-resolve /run/systemd/resolve/stub-resolv.conf.pppd-backup.ppp0
fi

它对我有用。我发现文件“/run/systemd/resolve/stub-resolv.conf.pppd-backup.ppp0”的权限和所有者很糟糕。当 VPN 启动时,我的脚本修复了权限和所有者。如果 VPN 断开,它也会正常工作。

答案2

对于 network-manager-pptp 或 network-manager-l2tp,实际的修复方法是安装 resolvconf 包:

sudo apt install resolvconf

resolvconf 包确保 NetworkManager 执行 /etc/resolv.conf 处理,从 /etc/ppp/ip-up.d/000resolvconf 中提取:

[ -x /sbin/resolvconf ] || exit 0

[ "$USEPEERDNS" ] || exit 0

case "$6" in
  nm-pptp-service-*|nm-l2tp-service-*|/org/freedesktop/NetworkManager/PPP/*)
    # NetworkManager handles it
    exit 0
    ;;
esac

查看 Ubuntu LP错误#1778946更多细节。

答案3

更新:我在 /etc/network/if-post-down.d 目录中添加了一个脚本,当 VPN 断开连接时,该脚本只会更改 stub-resolv.conf 文件的权限/所有权。

if [ "$IFACE" = ppp0 ]; then
    chmod a+r /run/systemd/resolve/stub-resolv.conf
    chown systemd-resolve:systemd-resolve /run/systemd/resolve/stub-resolv.conf
fi

目前看来这是可行的。

相关内容