在原始 Ubuntu 18.04 无头服务器上,OpenVPN 客户端用于以 Tap 模式连接到远程网络。地址、默认网关、DNS 服务器等由远程网络上的 DHCP 服务器提供。
但是,似乎并未强制使用 VPN 提供的 DNS 服务器。由于systemd-resolved
默认情况下用作存根解析器,因此这是的相关输出systemd-resolve --status
:
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 16 (tap1)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.0.0.2
DNS Domain: foo.bar
Link 2 (ens192)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.0.1
DNS Domain: foo2.bar2
如您所见,两个 DNS 服务器(来自本地网络 DHCP 和 VPN 网络 DHCP)都存在。
systemd-resolved
如何使用命令行实用程序找出实际使用的 DNS 服务器?- 如何强制所有请求都使用 VPN 提供的 DNS 服务器?理论上,这可以通过将 DNS 域设置为 来实现
~.
,如文档所述。但是,由于、和DHCPsystemd-resolved
之间的复杂交互,我无法覆盖此设置。systemd-resolved
systemd-networkd
netplan
答案1
我已经找到了第二个问题的解决方案:
- 删除
netplan
tap 设备的所有配置,然后运行netplan apply
。Netplan 配置始终覆盖自定义systemd-networkd
配置,但它们不提供我们需要的必要选项。 添加
systemd-networkd
配置,例如/etc/systemd/network/tap1.network
:[Match] Name=tap1 [Link] RequiredForOnline=no [Network] DHCP=ipv4 LinkLocalAddressing=ipv6 Domains=~. [DHCP] UseMTU=true RouteMetric=100 UseDomains=false
重新启动 VPN 会话
现在按预期systemd-resolved
用作DNS 域。关键元素是配置的和。~.
[Network] Domains=~.
[DHCP] UseDomains=false
systemd-networkd