openwrt:无法更改 dns 服务器设置以解析非 FQDN 主机名

openwrt:无法更改 dns 服务器设置以解析非 FQDN 主机名

ssh 到我的openwrt(版本 10.03.1-RC6)显示其 dns 服务器有问题:

root@OpenWrt:~# nslookup starkill
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost.

nslookup: can't resolve 'starkill': Name or service not known

然而,

root@OpenWrt:~# nslookup starkill.skails.home
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost.

Name:      starkill.skails.home
Address 1: 192.168.112.138 starkill.skails.home

正如你所看到的,openwrt 的本地 dns 服务器(dnsmasq)无法解析非 FQDN 主机名。附加我的 Intranet 域可以解决此问题,但对我不起作用:

由于我的内联网中运行着一个 dns 服务器,我希望至少让 openwrt 的 dnsmasq 咨询我的主 dns 服务器。

所以我一遍又一遍地检查网络配置,但无法找出错误或缺失的内容。然后我检查了该文件/etc/config/network以及手动的

该文件最初看起来像:

[...]
config 'interface' 'lan'
        option 'type' 'bridge'
        option 'ifname' 'eth0.0'
        option '_orig_ifname' 'eth0.0 wl0'
        option '_orig_bridge' 'true'
        option 'proto' 'static'
        option 'ipaddr' '192.168.112.253'
        option 'netmask' '255.255.255.0'
        option 'gateway' '192.168.112.112'
        option 'broadcast' '192.168.112.255'
        option 'stp' '1'
        list 'dns' '192.168.112.112'
[...]

有一个“list dns”,由网络配置插入,它看起来不像我期望看到的通常的“选项”。所以我尝试了

    option 'dns' '192.168.112.112'

我还以各种可能的方式尝试了“dns-search”选项

   option 'dns-search' 'skails.home'
   list 'dns-search' 'skails.home.'

每次我用 重新启动网络时/etc/init.d/network reload。无法解析 dns-search 子句,因此我必须删除它们。

您会注意到我向您展示了上面的“lan”接口条目。原因是我只使用 WRT54G 作为接入点。我不使用 WAN 接口,而是使用 4 个 LAN 以太网接口之一(它连接到我的内联网的其余部分,也是互联网网关所在的位置),并且基本上使用我的设备的天线来提供对内联网和互联网的访问无线网络设备。

无论如何,尝试更改 /etc/config/network 没有产生预期的结果,并且我仍然无法解析非 FQDN 主机名。

/etc/resolv.conf更重要的是,当我通过或直接使用明确建议名称服务器时,我什至无法进行解析nslookup

root@OpenWrt:~# nslookup starkill 192.168.112.112
Server:    192.168.112.112
Address 1: 192.168.112.112 stargaze.skails.home

nslookup: can't resolve 'starkill': Name or service not known

此时我迷路了。我在这里缺少什么?

答案1

dnsmasq 目前在我的屏障断路器上有点不可靠,这导致

nslookup: can't resolve 'starkill': Name or service not known

这里也是如此,即使名称通常可以毫无问题地解析。

首先尝试一个

killall -HUP dnsmasq

如果您想确保 dnsmasq 确实按其应有的方式处理请求,甚至可以重新启动。

其次,dnsmasq 中有一个自动完成 FQDN 的选项。我在这里使用以下配置(/etc/config/dhcp)进行此操作:

config dnsmasq
    option domainneeded '1'
    option boguspriv '1'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option domain 'lan'
    option expandhosts '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.auto'
    option filterwin2k '1'
    list addnhosts '/var/adblock/block.hosts'

Expandhosts 仅适用于 /etc/hosts,因此大多数不适用于您的设置,但我认为本地和域应该对您有所帮助。

我的 /etc/config/network 有

option dns '192.168.200.1'

我现在不知道网络重新加载是否真的也会以重新绑定 dhcp 租约的方式重新加载 dnsmasq,您必须在客户端触发该租约,否则指令才能生效。

当直接使用 nslookup 查询 DNS 服务器时,您是否尝试过在 DNS 服务器上进行 tcpdump?请求是否到达过?这将是确保问题确实出在 openwrt 盒子上的第一个指针......

如果您找到一种方法使 dnsmasq 始终如一地服务请求,请告诉我,这确实使这里的事情变得非常不稳定。

我不知道您根本可以编辑/etc/dnsmasq.conf,但是您可以使用很多选项。我在完整的 linux boxen 上使用过 dnsmasq 几次,并且总是能够配置它以满足我的需求,但我认为它在 openwrt 上有点不同,因为看起来..

也可以查看以下相应部分(辅助 DNS) http://wiki.openwrt.org/doc/howto/dhcp.dnsmasq#add_a_secondary_dns

答案2

带下划线的选项是正确的:

option dns_search 'my.local.domain'

相关内容