systemd-resolved,resolvconf.service,resolvconf和openresolv。为什么,哪个以及如何?


12

我使用的VPN客户端将两个名称服务器添加到/etc/resolv.conf。我所有的连接都由Network-Manager管理。

我必须将此VPN客户端用于我的工作VPN,但是Ubuntu systemd-resolved在16.10中进入后,我的连接和DNS出现了问题。看起来由于某些原因systemd-resolved更改/etc/resolv.conf回默认名称服务器,导致内部页面无法解析。我看着这个多一些,最终更换resolvconfopenresolv。这起到了很大的作用,但是在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客户端。


FWIW resolvconf.service就是systemd操作resolvconf的方式。您正在使用哪个VPN客户端?如果使用systemd-resolved,它将使resolv.conf成为指向其专用/run/systemd/resolve/resolv.conf文件的符号链接。您可能想尝试让systemd-networked管理您的连接。
pbhj

Answers:


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

0

您正在使用哪个VPN客户端?我在使用简单的OpenVPN时遇到了麻烦,但是安装客户端的NM版本可以解决问题。好吧,对于大多数人来说,我无法阻止推入路线,但这是一个完全不同的问题。

关键是:您的VPN客户端必须了解如何与systemd有关如何管理DNS服务的想法进行交互。我不建议这样做,但是您可以尝试禁用resolvd服务(systemctl disable systemd-resolved.service)来查看它是否有所改善,但是最终您将必须获得一个了解如何提交systemd caprice 的客户端:)

(这艘系统化的船很久以前就航行过,让我们不讨论为什么要做某些事情。)


VPN客户端的更新中解决了此问题。这是我的工作Fortinet VPN的OpenFortiGui客户端。所以您绝对正确,客户现在已经学会了systemd!:)
基督教徒

0

我使用的VPN客户端的更新解决了该问题。它是Fortinet VPN的OpenFortiGui客户端。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.