Edgerouter DNSmasq 向 BIND 發送更新
TL;DR:如何配置執行 DNSmasq或DHCPd和 NSupdate 的 Ubiquiti EdgeRouter 以將其 DHCP 租約發送到中央 BIND 伺服器?
我有一個由幾個Ubiquiti EdgeRouter X 組成的系統,它們都充當本地子網的 DHCP 和 DNS 伺服器。ERX 之間的子網間路由由核心路由器處理。我想做的是配置 ERX 網關以更新執行 BIND 的主 DNS 伺服器,只要它們更新其 DHCP 租約。
參考下圖:每個 ERX 為其本地子網提供 DHCP 和 DNS,客戶端只能解析其本地 ERX 後面的其他客戶端的 DNS 名稱。但是,如果每個 ERX 都將其記錄發送到
dns-master
發生 DHCP 租約更新時,並且每個客戶端都用作dns-master
其 DNS 伺服器,那麼任何客戶端都可以解析任何其他客戶端的名稱。這就是我想要達到的目標。路由器核心 / | \ / dns 主\ / \ erx-1 erx-2 | | |-- 客戶端 1a |-- 客戶端 2a |-- 客戶端 1b |-- 客戶端 2b
到目前為止我所做的:
- BIND 被配置為接受更新
nsupdate
,我確認它可以在我的本地工作站上工作- 啟動 Debian 儲存庫後,我
dnsutils
使用 Apt 在 ERX 上安裝- 我已經探索了
dhcp-script
Dnsmasq配置文件中的選項(手冊頁中對該選項的更好描述),但我無法讓我的腳本執行
- EdgeRouter 上的 Dnsmasq 似乎同時使用
/etc/dnsmasq.conf
and/etc/dnsmasq.d/dnsmasq-dhcp-config.conf
,但是將dhcp-script
選項添加到前者沒有效果,並將其添加到後者會產生配置語法錯誤- 我已經嘗試直接修改 Dnsmasq 配置文件並在 ERX 配置中設置選項,
set service dhcp-server global-parameters
但似乎都沒有工作(但我也不確定我是否做對了)$$ EDIT $$: Edgerouter 還支持使用 Dhcpd 作為 DHCP 伺服器,所以我會接受一個描述如何在 ER 上配置 DHCPd 來執行此操作的答案;我不喜歡使用 DNSmasq
在@Tom 的建議下,我想出了一種不使用 BIND 伺服器的方法。
解決方案是將每個 ERX 配置為其本地子網的權威 DNS 伺服器,並在核心路由器上為每個子域創建伺服器委託,然後將所有客戶端指向核心路由器。下面列出了 Edgerouter 特定的配置指令,用
sub1.local
正確的 DNS 子域和192.168.100.5
ERX 的 IP 地址替換:在
core-router
(區域網路 IP192.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-server 共享網路名稱 [伺服器] 子網 [子網] 域名 sub1.local 設置服務 dhcp-server 共享網路名稱 [伺服器] 子網 [子網] dns 伺服器 192.168.100.1
當客戶端向 送出 DNS 查詢時
router-core
,會發生以下三種情況之一:
- 如果
router-core
可以解決它,那麼它可以- 如果請求與子域匹配,則將請求轉發到為子域指定的 ERX
- 如果請求不匹配,則將其傳遞給上游 DNS 伺服器