OpenVPN 客户端 - DNS 仅在第一次启动时设置

OpenVPN 客户端 - DNS 仅在第一次启动时设置

OpenVPN 客户端系统解决

当我运行 OpenVPN 客户端时,它将连接并能够正确加载目标资源仅在第一次启动期间,重启后。在所有后续启动中,它仍会以“初始化序列已完成”的方式连接,但不会加载资源。

经过反复试验,我发现这是一个与 DNS 有关的问题。

sudo resolvectl status
===>

# 1st launch

Link 6 (tun0)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
         Protocols: +DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
       Current DNS Server: 10.1.1.7
       DNS Servers: 10.1.1.7
       DNS Domain: aaa.xyz


# all other ones

Link 6 (tun0)
       Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
         Protocols: +DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
        DNS Domain: aaa.xyz

 

我找到了治疗方法:

sudo systemd-resolve -i tun0 \
  --set-dns=10.1.1.7 \
  --set-domain=aaa.xyz \
  --set-dnssec=off
 

必须运行每次 OpenVPN 重新启动时。

如何让它自动运行呢?

或者更确切地说 - 为什么会发生这种情况?如何让 OpenVPN 设置正确的 DNS自动地?

为什么它在计算机重新启动后并且仅在第一次时才能正确设置?

答案1

不过,您可以添加一个挂钩来让 OpenVPN 配置 DNS systemd-resolved

https://github.com/jonathanio/update-systemd-resolved,抓取update-systemd-resolved脚本并将其标记为可执行文件。

$ sudo wget -O /usr/local/bin/update-systemd-resolved \
  https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved \
  && sudo chmod +x /usr/local/bin/update-systemd-resolved

然后将以下内容添加到您的 OpenVPN 客户端配置中

# /etc/openvpn/client/<your config file>.conf
...
script-security 2
setenv PATH /usr/bin
up /usr/local/bin/update-systemd-resolved
down /usr/local/bin/update-systemd-resolved
down-pre

如果您的 OpenVPN 以非 root 用户身份运行(默认情况下为 true),您需要添加一条允许 OpenVPN 与 DBus 交互的 PolicyKit 规则。

# /etc/polkit-1/rules.d/00-openvpn-resolved.rules
polkit.addRule(function(action, subject) {
    if (action.id == 'org.freedesktop.resolve1.set-dns-servers' ||
        action.id == 'org.freedesktop.resolve1.set-domains' ||
        action.id == 'org.freedesktop.resolve1.set-dnssec') {
        if (subject.user == 'openvpn') {
            return polkit.Result.YES;
        }
    }
});

至于为什么您的 OpenVPN 实例在第一次运行时配置 DNS 以及为什么在后续运行中无法配置 DNS,可能有很多不同的原因。需要进行更多调查才能查明真相。

相关内容