DD-WRT:dnsmasq 因静态主机而令人头痛

DD-WRT:dnsmasq 因静态主机而令人头痛

我在新的华硕 RT-AC56U 路由器上使用 dd-wrt(记录为 r23503)。不幸的是,dnsmasq 配置让我头疼不已。以下是我

  • 来自 LAN/WLAN 的针对 LAN/WLAN 上主机的 DNS 查询应该同时回答短名称和 FQDN。
  • 由于某些设备是便携式的(比如我的手机),我需要在连接到 LAN 时将 host.mydyndomain.net 解析为 LAN IP,并在从 LAN 外部查询时解析为外部 IP。

但目前我得到的是:

  • 对 DHCP 租用主机的查询正在正确返回(dd-wrt ​​的 dnsmasq 的“本地 DNS”选项)。
  • 对任何随机不存在的主机的查询都会错误地返回外部 WAN IP 地址。因此,“nslookup foobarbaz”会给出应该返回错误的结果。

至于我的静态 IP 主机,我还没有找到合适的解决方案。我通读了 dnsmasq 手册页,从我所知道的来看,正确的选择是“host-record”选项。

dd-wrt ​​中的 dnsmasq 相关配置(在服务选项卡下)是:
“DHCP 服务器”部分:
使用的域:WAN
LAN 域:[空白]
附加 DHCPd 选项:[空白]
定义了一个静态租约。

“DNSMasq”部分:
DNSMasq:已启用
本地 DNS:已启用
无 DNS 重新绑定:已启用
其他 DNSMasq 选项:
host-record=myhost,myhost.mydyndomain.net,192.168.1.1
[其他具有静态 LAN IP 的主机的多个主机记录条目]

不幸的是,将这些主机记录行放入附加选项框中似乎会完全破坏 dnsmasq,然后无法通过 DHCP 连接到 LAN/WLAN。一旦我清空框中的内容,DHCP 就会重新开始工作。

我的dnsmasq.conf文件如下:

interface=br0
resolv-file=/tmp/resolv.dnsmasq
all-servers
domain=mydyndomain.net
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-lease-max=51
dhcp-option=lan,3,192.168.1.1
dhcp-authoritative
dhcp-range=lan,192.168.1.100,192.168.1.149,255.255.255.0,1440m
dhcp-host=88:53:2E:9B:3E:80,Redtail,192.168.1.5,1440m
stop-dns-rebind

/etc/resolv.conf 文件是:

search ph.cox.net
nameserver 192.168.1.1

/tmp/resolv.dnsmasq 文件是:

nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 68.105.28.13

另一个较小但不相关的问题:在 dd-wrt ​​的“基本设置”页面的 DHCP 配置部分中,我输入了 OpenDNS 服务器的 IP(如上所示)。我更愿意只是使用这两个名称服务器,但名称服务器会自动添加为第三个名称服务器。有没有办法告诉 dd-wrt ​​在从调制解调器/ISP 获取 DHCP 租约时忽略收到的 DNS 信息?

那么...我做错了什么?显然,dnsmasq 对主机记录条目不满意,但正确的选择是什么?我将这些信息放在这个位置而不是 /etc/hosts 中,因为后者是生成的文件,不容易通过 Web 界面进行修改。当然,我可以通过 SSH 连接轻松编辑它,但我的更改不会持久。

答案1

我在 dd-wrt ​​上使用 dnsmasq 的经验相当丰富,尤其是在发表此评论之前。我可以与您分享我对每个要求的每个答案的有效解决方案。我不会再添加更多内容了。

活动 /tmp/dnsmasq.conf 中的每个选项发布在上面直接来自您选择的配置选项,如所述,

除了

您的主机名=在我看来,你不应该使用这个条目。你想要

使用的域名: [WAN/LAN]不是已使用域名 [WAN]

这将允许有线 (LAN) 和无线 (WAN) 设备在您的网络上工作。

另外,选择短Lan 域名: [dom ]或任何简短的单词当地的. 有些使用局域网一些使用本地域。这是您的要求所必需的,并将提供一个锚定的虚假内部专用域,只有您和内部用户才能看到/使用。您选择的值将放入每个 DHCP 客户端的 search dom解析器中。我将使用剩下的,但你可以随意制作。

我先从前两个要求开始。

  1. 来自 LAN/WLAN 的针对 LAN/WLAN 上主机的 DNS 查询应该同时回答短名称和 FQDN。

  2. 由于某些设备是便携式的(比如我的手机),我需要在连接到 LAN 时将 host.mydyndomain.net 解析为 LAN IP,并在从 LAN 外部查询时解析为外部 IP。

对于在 dd-wrt ​​的两侧具有不同的内部和外部 IP 但名称相同的主机,您需要:

  • Static Leases在您的下面为每个可解析主机添加一行正确地Additional DHCP Options文本区域。记下内部名称web.dom或只是web为了在局域网上方便。

笔记:

 [Static Leases++++++++++++++++++++++++++++++++++++++++++++++++++++++++]    
  [MAC Address]       [Host Name   ][IP Address    ][Client Lease Time]
  [00:19:B9:5B:2B:A5] [web         ][192.168.2.5   ][             1440]

注释:我以为这只用于韋德但 dnsmasq 也会使用这个,它会同时写入dnsmasq.conf正确的dhcp-host=在 /tmp/hosts 中为每个主机放置一个“ip host.dom”条目,DNSMasq 使用这个条目来执行所有的本地名称解析。

由于 Web 界面有点麻烦,我有一个脚本和文本文件来创建这些条目。下面简要介绍一下该脚本的作用。

macToHostNames.txt:
# comment lines ignored unless embedded set:tag values like set:kids 
# note the ip is just the HOST portion of the subnet, eg: 192.168.1.32 -> 1.32
# host      id       mac address        cnames/aliases for same box
kidhost1    1.32     00:MA:CA:DD:E5     alias1 nabi2 # in-line comment set:kid 
web         1.5      00:AM:AC:AD:ES     www homeweb  # web server with aliases
EOF
generate_Files_Then_Send_Then_Activate_If_Tests_Are_Ok.sh < macToHostNames.txt
# this script file creates 3 files which are sent along with a test script:
dnsmasq_options.new # nvram set dnsmasq_options="$(cat dnsmasq_options.new)"
static_leases.new   # nvram set static_leases="$(cat static_leases.new)"
static_leasenum.new # nvram set static_leasenum="$(cat static_leasnum.new)"
testDnsMasqOpts.sh  # scp -p *.new test*.sh admin@gw:/tmp && ssh admin@gw "/tmp/test*.sh" 
  • 在 DNSMasq 选项框中添加address=/web.dynip.org/<ip>行 address=/web.mydyndomain.net/192.168.2.5 # 根据需要添加任意数量的行

  • 最后,您需要更新DDNS配置以提供 DDNS 服务,该服务将外部 ISP 提供的动态 IP 地址映射到 进行解析web.mydyndomain.net。我假设您已成功配置此部分。

使用以下配置您可以ping webping web.dom或 pingweb.mydyndomain.net将返回192.168.2.5,但防火墙内部和通过名称从外部访问web.mydyndomain.org 仍然有效。

其他要求可以通过您的其他配置来满足,但是您可以安全地添加这些行,因为我已经测试过很多次了(甚至可以编写一个脚本来一次执行一个 dnsmasq 行并向我显示有问题的行,因为在我最新的 dnsmasq 构建中,所有 dns 日志记录都因空间问题而被遗漏,而您所能依赖的只是 dnsmasq 的返回状态:$?)。

对于最后的要求,我将向您展示带有注释的配置行(请注意,您可以在 DNSMasq 附加选项框中添加注释)。

  1. 对 DHCP 租用主机的查询正在正确返回(dd-wrt ​​的 dnsmasq 的“本地 DNS”选项)。
  2. 对任何随机不存在的主机的查询都会错误地返回外部 WAN IP 地址。因此,“nslookup foobarbaz”会给出应该返回错误的结果。
  domain-needed    # dont fwd to ext DNS names with no domain
  address=/web.mydnsdomain.org/192.168.2.5 # resolve to this internally!
  expand-hosts     # add .dom to host names without a domain 
  local=/dom/      # map all host.dom request to *this* dns
  bogus-priv       # reject local lookups not in hosts
  localise-queries # for local servers

我将赠送一些价值可疑的不相关免费赠品(以及用于异地备份)。

 no-ping          # some swear by this one to get DNSMasq to work!
 filterwin2k      # junk from MSFT boxen (remove this if ldap SRV used)
 cache-size=3000  # fast local DNS lookups 
 clear-on-reload  # clear ifr.c changes and sig received 

要限制 DNS 服务器的数量,您可以使用 dhcp-options=6 执行如下操作:

dhcp-options=lan,6,8​​.8.8.8 # 这将为所有主机仅发送一个名称服务器条目

相关内容