OpenVPN 和 systemd-solved

OpenVPN 和 systemd-solved

如何使用通过 systemd-resolved 的 openvpn 服务器推送的 dns?

在我决定“升级”到 systemd-networkd 之前。我可以使用一些变体openvpn-resolv-conf成功建立 vpn 隧道后,脚本调用 resolvconf 来管理 /etc/resolv.conf 中的条目。

这将允许我解析 VPN 隧道远端的名称。

现在 systemd-resolved 管理 /run/systemd/resolved/resolv.conf,是否可以自动将通过 openvpn 连接推送的 DNS 添加到用于解析的名称服务器列表中?

答案1

使用来自https://github.com/jonathanio/update-systemd-resolved在您的 OpenVPN 配置文件中。它们使用 systemd-resolved 的 DBus 接口来更新 DNS 信息。

答案2

编辑:截至目前,此解决方案已基本过时。较新版本的 systemd 用户应参考 Piotr Dobrogost 提供的解决方案。

诀窍是创建一个临时的网络配置包含 DNS 设置的文件,然后重新启动systemd-network,以便应用全局 DNS 设置。

我编写了一个经过修改的脚本,可以实现这个功能。你可以在这里查看:更新systemd网络.sh

答案3

为了使 systemd-resolved 解决方案正常工作,必须使用 SIGTERM 而不是 SIGKILL 停止 openvpn(否则,不会调用“down”挂钩来将 /etc/resolv.conf 恢复到原始配置)。

例如:

  • 如果你在命令行上调用 openvpn,然后按 CTRL-c 退出,则会调用“down”钩子,因为 openvpn 被 SIGTERM 杀死
  • 如果你在屏幕命令中调用 openvpn 并按 CTRL-c 退出屏幕,则不会调用“down”钩子,因为 openvpn 会被 SIGKILL 终止,而 /etc/resolv.conf 最终仍具有 VPN DNS 服务器

相关内容