サスペンドからの復帰後に systemd-resolve をリセットする

サスペンドからの復帰後に systemd-resolve をリセットする

私は次の PostUp スクリプトで Wireguard クライアントを使用しています。

PostUp = systemd-resolve -i %i --set-dns=x.x.x.x --set-domain=~.

systemd-resolveDNS設定を正しく設定し、127.0.0.53ドメインを解決できました。

$ resolvectl status
Link 5 (wg1)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: yes
    DNSSEC supported: yes
  Current DNS Server: x.x.x.x
         DNS Servers: x.x.x.x
          DNS Domain: ~.

しかし、サスペンドから復帰すると DNS 設定がリセットされます。

$ resolvectl status
Link 5 (wg1)
      Current Scopes: none
DefaultRoute setting: no
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: yes
    DNSSEC supported: yes

私は見つけた同様の質問ただし、これは再起動ではなく、サスペンド後も構成が維持されるようにするためのものです。私の場合、DNS 設定は再起動後も維持されます。

私は PPA ではなく、Ubuntu の Wireguard を使用しています。

$ apt search wireguard
wireguard/eoan,eoan,now 0.0.20190913-1ubuntu1 all [installed]
wireguard-dkms/eoan,eoan,now 0.0.20190913-1ubuntu1 all [installed,automatic]
wireguard-tools/eoan,now 0.0.20190913-1ubuntu1 amd64 [installed,automatic]

編集: Launchpad バージョンでも同じ問題が発生します。

wireguard/eoan,eoan,now 0.0.20191012-wg1~eoan all [installed]
wireguard-dkms/eoan,eoan,now 0.0.20191012-wg1~eoan all [installed,automatic]
wireguard-tools/eoan,now 0.0.20191012-wg1~eoan amd64 [installed,automatic]

いくつかの回避策を試しましたが、どれも機能しませんでした。

  1. /etc/systemd/network/wireguard.network
[Match]
Name=wg1

[Network]
DNS=x.x.x.x
Domains=~.

このアプローチでは、Wireguard インターフェースの DNS が設定されましたが、起動後に systemd によって解決された eth0 の DNS にフォールバックします。

$ resolvectl status
Link 5 (wg1)
      Current Scopes: none
  Current DNS Server: x.x.x.x
         DNS Servers: x.x.x.x

Link 2 (eth0)
      Current Scopes: DNS
  Current DNS Server: y.y.y.y
         DNS Servers: y.y.y.y
  1. サスペンドから復帰後にスクリプトを実行する/lib/systemd/system-sleep/wireguard-dns
#!/bin/sh

case $1/$2 in
  pre/*)
    exit 0
    ;;
  post/*)
    # Place your post suspend (resume) commands here
    systemd-resolve -i wg1 --set-dns=x.x.x.x --set-domain=~.
    ;;
esac

この回避策は機能せず、DNS 構成は起動後にリセットされます。スクリプトが実行されたことを確認しました ( でテストしましたecho "script executed" > /home/user/output。テキストを含むファイルがありました) が、どういうわけか効果がありませんでした。

同様のスクリプトは/usr/lib/pm-utils/sleep.d数秒間だけ(起動後)動作し、その後構成がリセットされ、eth0 の DNS にフォールバックします。

#!/bin/sh

case $1 in 
        thaw|resume)
                systemd-resolve -i wg1 --set-dns=x.x.x.x --set-domain=~.
        ;;
esac
  1. 別のサスペンド解除スクリプトを試しましたが、結果は 1 と同じでした。
#!/bin/sh

if [ "$1" = "pre" ] && [ "$2" = "suspend" ]; then
    wg-quick down wg1
elif [ "$1" = "post" ] && [ "$2" = "suspend" ]; then
    wg-quick up wg1
fi

編集: 新規インストールでも同じ問題が発生します。

編集: 19.04 にも影響します。新規インストールで試しました。

関連情報