如何配置 AWS EC2 实例以有选择地绕过所有区域中的默认 DNS 解析器?

如何配置 AWS EC2 实例以有选择地绕过所有区域中的默认 DNS 解析器?

我有一个 AWS EC2 实例网络。其中大多数实例使用默认 VPC 的 DNS 解析器来防止数据泄露并解析内部域(使用自定义 TLD)。一切正常。

但是,有一个(Ubuntu)实例需要使用通用的公共解析器才能访问整个互联网(例如 8.8.8.8)

我设法通过将 /etc/systemd/resolved.conf 替换为

[Resolve]
DNS=8.8.8.8 208.67.222

并添加 /etc/systemd/resolved.conf.d/MYTLD.conf

[Resolve]
Domains=MYTLD
DNS=10.6.0.2

重新启动 systemd-resolved 后,实例可以正常解析所有域。但是,当我将完全相同的配置应用于 us-east-2 中几乎相同的网络时,公共 DNS 不起作用。

我在 StackExchange 上找到的一个建议是将 /etc/resolv.conf 符号链接到 /run/systemd/resolve/resolv.conf。这使得公共 DNS 开始解析,但内部 TLD 停止解析。

如何让 DNS 在任何区域都能一致解析?

答案1

我找到了解决方案。

DNS 解析器设置为默认阻止(显然。这是本练习的重点。)但响应设置为 NODATA。这造成了竞争条件:systemd-resolve 使用链路本地多播名称解析获取 DNS 结果。这意味着它同时查询了 AWS 内部服务器和其中一个公共服务器。LLMNR 返回它获得的第一个成功结果或最后一个失败结果(如果所有结果都是失败)

DNS 解析器产生的 NODATA 结果在技术上是成功的,因此如果 NODATA 先到达,则返回该结果。将操作更改为 NXDOMAIN(从 systemd-resolve 的角度来看,这是一个失败结果)解决了该问题。

相关内容