我想设置一个公共 DNS 服务器,该服务器使用某些域的服务器主机文件,然后对于所有其他查询则使用 Google 的 DNS。
因此,我使用以下最小配置设置了 dnsmasq:
no-resolv
server=8.8.4.4
server=8.8.8.8
interface=eth0
no-dhcp-interface=eth0
log-queries
log-dhcp
如果我nslookup mydomain.com 127.0.0.1
在服务器上运行,我会从服务器的 hosts 文件返回 mydomain.com 的正确 IP 地址。
但是,如果我将其替换127.0.0.1
为服务器的公共 IP,无论我在服务器上还是在其他主机上运行此命令,都会出现以下错误:
;; connection timed out; no servers could be reached
该服务器是关闭了 iptables 的 Amazon Linux EC2 实例,并且服务器的防火墙策略为 0.0.0.0/0 打开了 tcp 端口 53。eth0
是服务器的唯一网络连接。
如果我netstat -vatn
在服务器上运行,我可以看到有东西正在监听 TCP 端口 53 0.0.0.0
:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN
我可以看到服务器上的端口 53 是打开的,因为我可以成功打开连接telnet my-server-ip 53
,但我从未通过该连接从服务器收到任何响应。
这让我相信我的 dnsmasq 配置可能缺少了某些东西。有人有什么想法吗?
答案1
DNS 需要两个都UDP 和 TCP 端口 53,因此只需53/udp
在您的安全组中打开它就可以开始工作。