web-dev-qa-db-ja.com

systemd-resolved、resolvconf.service、resolvconf、およびopenresolv。なぜ、どれ、どのように?

2つのネームサーバーを/etc/resolv.confに追加するVPNクライアントを使用しています。すべての接続はネットワークマネージャーによって管理されます。

仕事用のVPNにはこのVPNクライアントを使用する必要がありますが、Ubuntuが16.10でsystemd-resolvedに移動した後、接続とDNSに問題があります。何らかの理由でsystemd-resolved/etc/resolv.confをデフォルトのネームサーバーに戻すと、内部ページが解決されないようです。私はこれをさらに調べて、resolvconfopenresolvに置き換えました。これは大いに役立ちましたが、VPNがしばらく稼働した後でも、systemd-resolved/etc/resolv.confをリセットします。

接続が確立された直後か数分後に、またはまったく接続されない場合があります。次に、systemd-resolvedsystemd resolvconf.serviceを無効にして、openresolvのみを実行しました。それはすべてうまくいくようです。

ただし、これは非常に複雑です。 systemd-resolvedを他のいずれかと使用する理由はありますか? Ubuntu 16.10で有効になったため、理由があるに違いないと思ったが、/etc/resolv.confをめぐる戦いを引き起こしているようだ。

operesolvを実行して、これを説明していただければ幸いです。かなり読みましたが、/etc/resolv.confがそのように管理されている理由がまだわかりません。そのためにsystemdを使用すると、VPNクライアントを使用できません。

12
Christian

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
1
Anton

どのVPNクライアントを使用していますか? OpenVPNで問題がありましたが、NMバージョンのクライアントをインストールすると問題が解決しました。まあ、それらのほとんどは、ルートがプッシュされるのを防ぐことができませんでしたが、それは完全に異なる問題です。

ポイントは、VPNクライアントhas DNSサービスを管理する方法についてsystemdのアイデアと対話する方法を知ることです。これはお勧めしませんが、resolvdサービス(systemctl disable systemd-resolved.service)を無効にして、改善されるかどうかを確認することもできますが、最終的にはsystemdのcapricesに送信する方法を理解しているクライアントを取得する必要があります:)

(systemd船はかなり前に出航しました。いくつかのことが行われた理由についての議論を開かないようにしましょう。)

0
JayEye

私が使用したVPNクライアントの更新は、問題を解決しました(意図した)。 Fortinet VPNのOpenFortiGuiクライアントでした。

0
Christian