DNS 转发器始终解析

DNS 转发器始终解析

我想设置一个可以执行两项操作的基本 DNS 转发器。

首先,它只是将 DNS 查询转发到上游。其次,如果上游 DNS 服务器无法解析主机名,则此 DNS 转发器应返回垃圾 IP 地址,例如127.255.255.255100::

其结果可能是所有主机名都应始终解析,但通常无法解析的主机名会被解析为垃圾 IP 地址。

例如,如果我有两个主机名:resolvable上游 DNS 服务器知道哪个主机名位于1.2.3.4notresolvable上游 DNS 服务器不知道哪个主机名的 IP 地址。如果我使用这两个主机名查询转发的 DNS,resolvable则会返回1.2.3.4并且notresolvable会返回127.255.255.255(而不是未找到)。

Hostname:            resolvable              notresolvable
                    |         / \            |          / \
                    |          |             |           |_________
                   \ /         |            \ /                    |
DNS Forwarder:   forward      found       forward      not  __\  use garbage ip
                 upstream   ip=1.2.3.4    upstream    found   /  ip=127.255.255.255
                    |        / \               |      / \
                    |         |                |       |
                   \ /        |               \ /      |
Upstream DNS     found ip=1.2.3.4              not found
server:

我最接近实现这个系统的方法就是使用 dnsmasq。dnsmasq 默认向上游发送 dns 查询,因此它可以满足我的第一个要求。

我还可以address=/#/127.255.255.255在末尾添加/etc/dnsmasq.conf,然后将所有主机名解析为垃圾 IP 地址。但是,这也会解析上游 DNS 服务器可以解析的主机名,这不是我想要的。

阅读后dnsmasq 手册页我在地址部分找到了这个:

域中的查询永远不会被转发

这表明我需要的东西无法通过 dnsmasq 实现。

所以我的问题是,哪个程序最适合实现这种设置以及我该如何进行?

编辑:上下文

我有一个在 Docker 容器内运行的应用程序,它使用 Docker 网络通过主机名与其​​他 Docker 容器连接。

我试图解决的问题是,如果主机名无法解析(如果它引用的容器没有运行就会发生这种情况),则应用程序将无法启动或继续运行。

因此,我上面提到的 DNS 服务器将是与 docker 容器内的应用程序一起运行的服务器。

我还删除了对的引用,resolv.conf因为似乎没有必要让它工作。dns 服务器只需转发到 docker 的内部 dns 服务器,而该服务器恰好在 中列出resolv.conf

相关内容