DD-WRT:静态主机的 dnsmasq 问题

Jet*_*ohn 7 networking router dns dd-wrt dnsmasq

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

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

但这是我目前得到的:

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

至于我的带有静态 IP 的主机,我还没有找到合适的解决方案。我通读了 dnsmasq 联机帮助页,据我所知,正确的选择是“主机记录”选项。

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
Run Code Online (Sandbox Code Playgroud)

/etc/resolv.conf 文件是:

search ph.cox.net
nameserver 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

/tmp/resolv.dnsmasq 文件是:

nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 68.105.28.13
Run Code Online (Sandbox Code Playgroud)

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

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

小智 8

我在 dd-wrt ​​上对 dnsmasq 有相当多的经验,尤其是在接近此评论的日期时。我可以与您分享我对每个要求的每个答案的工作解决方案。我会拒绝添加更多。

在活动/tmp/dnsmasq.conf每个选项上面贴直接从你所描述的选择的配置选项来

除了

你的主机名=你不应该使用IMO进入。你想要

Used Domain: [WAN/LAN] not Used Domain [WAN]

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

还要选择一个短的Lan 域: [dom ]或除local之外的任何短词。有些使用lan有些使用localdomain。这是您的要求所必需的,并且将提供一个只有您和内部用户才能看到/使用的锚定人造内部域。您选择的值将放入每个 DHCP 客户端的 search dom解析器中。我将使用dom作为其余部分,但您可以随心所欲。

我将从前两个要求开始。

  1. 应为短名称和 FQDN 回答来自 LAN/WLAN 的 LAN/WLAN 主机的 DNS 查询。

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

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

  • 正确的空白文本区域Static Leases下方为每个可解析主机添加一行。请注意内部名称或只是为了方便在局域网上。Additional DHCP Optionsweb.domweb

笔记:

 [Static Leases++++++++++++++++++++++++++++++++++++++++++++++++++++++++]    
  [MAC Address]       [Host Name   ][IP Address    ][Client Lease Time]
  [00:19:B9:5B:2B:A5] [web         ][192.168.2.5   ][             1440]
Run Code Online (Sandbox Code Playgroud)

注意:我认为这仅用于udhcpcd但这也被 dnsmasq 使用,并且会dnsmasq.conf用正确的dhcp-host=行写入实际值,在 DNSMasq 使用的 /tmp/hosts 中为每个条目放置一个 `ip host.dom 条目来完成所有本地名称解析。

我有一个脚本和文本文件来创建这些条目,因为 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" 
Run Code Online (Sandbox Code Playgroud)
  • address=/web.dynip.org/<ip>在您的 DNSMasq 选项框中添加行 address=/web.mydyndomain.net/192.168.2.5 # 根据需要添加任意数量的行

  • 最后,您需要更新您的DDNS配置以提供 DDNS 服务映射您的外部 ISP 提供的动态 IP 地址以解析为web.mydyndomain.net. 我想你已经成功配置了这部分。

使用此配置,您可以ping webping web.dom或 pingweb.mydyndomain.net192.168.2.5在防火墙内部返回,并且从外部按名称访问web.mydyndomain.org 仍然有效。

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

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

  1. 正在正确返回对 DHCP 租用主机的查询(dnsmasq 的 dd-wrt ​​的“本地 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
Run Code Online (Sandbox Code Playgroud)

我将提供一些价值可疑的非相关赠品(以及用于异地备份)。

 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 
Run Code Online (Sandbox Code Playgroud)

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

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