DNS转发器,总是解决

我想build立一个基本的DNS转发器,做两件事情。

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

这样做的结果可能是所有主机名应该总是parsing,但是通常不能parsing的主机名被parsing为垃圾IP地址。

例如,如果我有两个主机名:上游DNS服务器知道的resolvable是在1.2.3.4 ; 而上游DNS服务器不知道其IP地址是不可parsing的。 如果我然后查询与这两个主机名转发的DNS, notresolvable将返回1.2.3.4notresolvable resolvable将返回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的末尾,然后将所有主机名parsing为垃圾IP地址。 但是,这也解决了上游DNS服务器可以parsing的主机名,这不是我想要的。

在阅读dnsmasq手册页后,我在地址部分find了这个页面 :

域中的查询不会被转发

这暗示了我所需要的是dnsmasq不可能的。

所以我的问题是,什么样的程序最适合使这个设置成为可能,我将如何去做呢?

编辑:上下文

我有一个应用程序在docker容器中运行,该容器使用dockernetworking连接到使用主机名的其他docker容器。

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

所以我上面提到的dns服务器将是一个服务器,它在docker容器内的应用程序旁边运行。

我也删除了参考resolv.conf因为它似乎没有必要得到这个工作。 dns服务器只需转发到docker的内部dns服务器,这个服务器刚好在resolv.conf列出。