TL;DR:如何配置运行 DNSmasq 的 Ubiquiti EdgeRouter或者DHCPd 和 NSupdate 将其 DHCP 租约发送到中央 BIND 服务器?
我有一个由几个组成的系统Ubiquiti EdgeRouter X全部充当本地子网的 DHCP 和 DNS 服务器。ERX 之间的子网间路由由核心路由器处理。我想要做的是配置 ERX 网关,使其在更新 DHCP 租约时更新运行 BIND 的主 DNS 服务器。
参考下图:每个 ERX 都为其本地子网提供 DHCP 和 DNS 服务,客户端只能解析其本地 ERX 后面的其他客户端的 DNS 名称。但是,如果每个 ERX 都在dns-master
发生 DHCP 租约更新时将其记录发送到,并且每个客户端都用作dns-master
其 DNS 服务器,那么任何客户端都可以解析任何其他客户端的名称。这就是我想要实现的目标。
路由器核心 / | \ /DNS主服务器 / \ ERX-1 ERX-2 | | |-- 客户端-1a |-- 客户端-2a |-- 客户端-1b |-- 客户端-2b
我目前所做的:
- BIND 是配置为接受更新通过
nsupdate
我确认它可以在我的本地工作站上运行 - 我
dnsutils
在 ERX 上安装了激活 Debian 仓库 - 我已经探索
dhcp-script
了Dnsmasq 配置文件(更好地描述该选项在手册页中),但我无法执行我的脚本- EdgeRouter 上的 Dnsmasq 似乎同时使用了
/etc/dnsmasq.conf
和/etc/dnsmasq.d/dnsmasq-dhcp-config.conf
,但将dhcp-script
选项添加到前者没有效果,而将其添加到后者则产生了配置语法错误 - 我尝试过直接修改 Dnsmasq 配置文件和在 ERX 配置中设置选项
set service dhcp-server global-parameters
,但似乎都没有用(但我也不确定我是否做对了)
- EdgeRouter 上的 Dnsmasq 似乎同时使用了
[编辑]:Edgerouter 还支持使用 Dhcpd 作为 DHCP 服务器,因此我愿意接受一个描述如何在 ER 上配置 DHCPd 的答案;我并不只使用 DNSmasq
答案1
在@Tom 的建议下,我找到了一种无需使用 BIND 服务器即可实现此目的的方法。
解决方案是将每个 ERX 配置为其本地子网的权威 DNS 服务器,并在核心路由器上为每个子域创建服务器委派,然后将所有客户端指向核心路由器。Edgerouter 特定的配置指令如下所示,sub1.local
用正确的 DNS 子域和192.168.100.5
ERX 的 IP 地址替换:
core-router
在(LAN IP )上192.168.100.1
:
设置服务 dns 转发监听 eth1 设置服务 DNS 转发名称服务器 8.8.8.8 设置服务 DNS 转发名称服务器 8.8.4.4 设置服务 dns 转发选项“server=/.sub1.local/192.168.100.5”
在每个 ERX 上(例如 WAN IP 192.168.100.5
):
设置服务 dns 转发监听 eth0 设置服务 dhcp 服务器共享网络名称 [服务器] 子网 [子网] 域名 sub1.local 设置服务 dhcp 服务器共享网络名称 [服务器] 子网 [子网] dns 服务器 192.168.100.1
当客户端向 提交 DNS 查询时router-core
,将发生以下三件事之一:
- 如果
router-core
可以解决,那么它确实 - 如果请求与子域匹配,则请求将转发到为子域指定的 ERX
- 如果请求不匹配,则将其传递给上游 DNS 服务器