每个接口 DNS 与每个域 DNS

每个接口 DNS 与每个域 DNS

我需要切换到,systemd-resolved因为我需要使用的软件(twingate客户端,如果重要的话)无法与openresolv我一直使用的软件一起工作。通过阅读相关内容,我了解了 split-dns、per-interface-dns 等概念。

然而我无法完全理解背后的概念Per-Interface DNS。我完全理解将不同的(RoutingSearch)映射Domains到不同服务器的需要DNS,但这与存在有什么关系边界到一个接口?

似乎期望的行为是“给定路由域 ~foo.bar.com,使用 30.40.50.60 作为 DNS 服务器“。但是,这与它配置的接口无关。systemd-resolved不能(我相信)通过给定的接口神奇地路由查询。它可以锻炼DNS要使用的服务器foo.bar.com,但随后需要内核路由表的帮助才能到达该DNS服务器的30.40.50.60

例如。我可以在eth0具有完全不同的关联 IP 的接口设备上进行上述配置,以及eth1具有关联 IP 的另一个接口,30.40.50.60该接口是DNS服务器绑定并侦听的位置。

所以它大概是这样的:

# ip addr for eth0
IP: 13.14.15.16
# resolvectl status for eth0
DNS Servers: 30.40.50.60
DNS Domains: ~foo.bar.com

# ip addr for eth1
IP: 30.40.50.60
# resolvectl status for eth1
DNS Servers: 13.14.15.16
DNS Domains: ~fun.gun.com

# ip route
30.40.50.60 dev eth1 <...>
13.14.15.16 dev eth0 <...>

正如你所看到的,DNS绑定到 eth0 的服务器信息resolvectl实际上是在运行的eth1,反之亦然。所以现在当resolved查询时,foo.bar.com它会找到DNS要使用的服务器30.40.50.60,然后将查询路由到那里,然后内核路由表指示它应该在 上发送eth1,这与 无关eth0

那么为什么叫它呢Per-Interface DNS?它也可以是一个映射配置文件(独立于任何接口信息),只说明:

# Domain: DNS-server
~foo.bar.com: 30.40.50.60
~fun.gun.com: 13.14.15.16
# .. and so on

这与以任何方式与任何接口关联无关。

相关内容