systemd-resolve 从挂起唤醒后重置

systemd-resolve 从挂起唤醒后重置

我正在使用 wireguard 客户端和以下 PostUp 脚本:

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

systemd-resolve确实正确设置了 DNS 设置并且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 设置在重新启动后保持不变。

我正在使用 Ubuntu 的 wireguard,而不是 ppa。

$ 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]

编辑:与启动板版本存在同样的问题。

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-resolved 在唤醒后会回退到 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. 尝试了另一个从挂起唤醒脚本,结果与第一个脚本相同。
#!/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,已尝试全新安装。

相关内容