我在新的华硕 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
解析器中。我将使用主剩下的,但你可以随意制作。
我先从前两个要求开始。
来自 LAN/WLAN 的针对 LAN/WLAN 上主机的 DNS 查询应该同时回答短名称和 FQDN。
由于某些设备是便携式的(比如我的手机),我需要在连接到 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 web
或ping web.dom
或 pingweb.mydyndomain.net
将返回192.168.2.5
,但防火墙内部和通过名称从外部访问web.mydyndomain.org
仍然有效。
其他要求可以通过您的其他配置来满足,但是您可以安全地添加这些行,因为我已经测试过很多次了(甚至可以编写一个脚本来一次执行一个 dnsmasq 行并向我显示有问题的行,因为在我最新的 dnsmasq 构建中,所有 dns 日志记录都因空间问题而被遗漏,而您所能依赖的只是 dnsmasq 的返回状态:$?)。
对于最后的要求,我将向您展示带有注释的配置行(请注意,您可以在 DNSMasq 附加选项框中添加注释)。
- 对 DHCP 租用主机的查询正在正确返回(dd-wrt 的 dnsmasq 的“本地 DNS”选项)。
- 对任何随机不存在的主机的查询都会错误地返回外部 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 # 这将为所有主机仅发送一个名称服务器条目