我正在使用一个 VPN 客户端,它向 添加了两个名称服务器/etc/resolv.conf
。我的所有连接都由 Network-Manager 管理。
我必须将此 VPN 客户端用于我的工作 VPN,但在 Ubuntu systemd-resolved
16.10 升级到 后,我的连接和 DNS 出现了问题。由于某种原因,似乎systemd-resolved
改回/etc/resolv.conf
了默认名称服务器,导致内部页面无法解析。我对此进行了进一步研究,最终将其替换resolvconf
为openresolv
。这很有帮助,但在 VPN 启动一段时间后仍然systemd-resolved
会重置。/etc/resolv.conf
可能是刚连接上,或者几分钟后,或者有时根本没有。然后我禁用了systemd-resolved
,systemd resolvconf.service
只运行了openresolv
。一切似乎都运行良好。
但是,这一切都非常令人困惑。是否有理由systemd-resolved
与其他版本一起使用?它在 Ubuntu 16.10 中已启用,所以我认为肯定有原因,但它似乎引起了争执/etc/resolv.conf
。
如果我能跑去解释一下就好了operesolv
。我已经阅读了不少相关内容,但我仍然不明白为什么/etc/resolv.conf
会这样管理,只是当我使用systemd
它时,我无法使用我的 VPN 客户端。
答案1
我设法更改了 Ubuntu 中 OpenVPN 中处理这些配置项的脚本(在 18.04 上测试)。这里有一个补丁:
--- /etc/openvpn/update-resolv-conf.orig 2019-03-13 19:14:16.163914424 +0400
+++ /etc/openvpn/update-resolv-conf 2019-03-13 19:29:30.380420708 +0400
@@ -15,7 +15,7 @@
# foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
#
-[ -x /sbin/resolvconf ] || exit 0
+[ -x /usr/bin/systemd-resolve ] || exit 0
[ "$script_type" ] || exit 0
[ "$dev" ] || exit 0
@@ -43,16 +43,16 @@
fi
done
R=""
- [ "$SRCHS" ] && R="search $SRCHS
-"
+ for SRCH in $SRCHS ; do
+ R="${R}--set-domain=$SRCH "
+ done
for NS in $NMSRVRS ; do
- R="${R}nameserver $NS
-"
+ R="${R}--set-dns=$NS "
done
- echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
+ /usr/bin/systemd-resolve -i ${dev} ${R}
;;
down)
- /sbin/resolvconf -d "${dev}.openvpn"
+ echo "Doing nothing, interface disappears."
;;
esac
您需要将以下项目添加到 OpenVPN 配置文件中:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
答案2
您使用的是哪个 VPN 客户端?我使用直接 OpenVPN 时遇到了问题,但安装 NM 版本的客户端后问题就解决了。好吧,大多数情况下,我无法阻止路由被推送,但这是一个完全不同的问题。
重点是:你的 VPN 客户端有了解如何与 systemd 管理 DNS 服务的想法进行交互。我不推荐这样做,但您可以尝试禁用 resolvd 服务 ( systemctl disable systemd-resolved.service
) 以查看它是否会改善情况,但最终您必须获得一个了解如何服从 systemd 的反复无常的客户端 :)
(systemd 这艘船早已起航,我们不要再讨论为什么要做某些事情了。)
答案3
我使用的 VPN 客户端更新解决了这个问题(双关语)。它是 Fortinet VPN 的 OpenFortiGui 客户端。