我有一个网关服务器,最初是用 Ubuntu 桌面 12.04 设置的 - 也许是一个错误,我不知道,需要记住一些事情。
我撕掉了network-manager
,现在想得到resolvconf
,dhclient
并dnsmasq
一起玩得开心。
dhclient
eth0 WAN
从调制解调器获取网关的IP 地址和 ISP DNS 名称服务器地址。
dnsmasq
需要为 eth1 上的其余 LAN 提供 DHCP,并充当 LAN 和网关机器的 DNS 缓存。
我也设置iptables
为防火墙。
目前,网关/etc/resolv.conf
仅显示名称服务器127.0.0.1
,据我所知是正确的。
然而,我认为 dhclient 并没有向 dnsmasq 提供 ISP DNS 名称服务器,dnsmasq 也没有获取我指定的 OpenDNS 和 Google 名称服务器/etc/network/interfaces
- 目前,除非我手动编辑/etc/resolv.conf
以放入上游名称服务器(如8.8.8.8
所以我删除了 resolvconf 包。
现在我的局域网上没有 DHCP,也无法在主机本身上进行 DNS 查找 - 我可以在网上冲浪和 ping 通,但不能 ping 通 127.0.0.1。
我接下来该怎么做?此设置包含 和 的配置dhclient
,以及和dnsmasq
的相同文件,可在我的旧 Debian 机器上运行。resolv.conf
hosts
答案1
我终于知道问题出在哪里了。
在花了很长时间努力找出 resolvconf 或 dnsmasq 的问题之后,我最终决定仔细检查防火墙。由于我 5 年来没有更改过 iptables 规则中的任何内容,所以我不认为这是问题所在。但我不明白为什么 dnsmasq 在端口 53 上监听,但没有在其日志中写入任何 DNS 查询。所以一定是防火墙的问题。
很久以前,我写了一条规则,允许所有非外部接口的东西通过。
iptables -A INPUT -i !eth0 -j ACCEPT
这在我拥有的旧机器上运行良好,因为我没有使用 dnsmasq 在实际服务器上进行 DNS 查找。因此,dnsmasq 可以很好地处理来自 eth1 的请求。但在我的新机器上,我开始使用 lo 上的查找来测试它。在 Ubuntu 12.04 上,该规则不允许“除 eth0 之外的所有接口”。我尝试了一下规则,发现它应该是这样的:
iptables -A INPUT ! -i eth0 -j ACCEPT
也许如果我一开始就花一个小时用 ufw 配置我的新机器,我就可以在同一天启动并运行。本来可以的……