我最近安装了 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
目前看来这是可行的。