Domain-Name-System

Edgerouter DNSmasq 向 BIND 發送更新

  • November 12, 2018

TL;DR:如何配置執行 DNSmasqDHCPd和 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-scriptDnsmasq配置文件中的選項(手冊頁中對該選項的更好描述),但我無法讓我的腳本執行
    • EdgeRouter 上的 Dnsmasq 似乎同時使用/etc/dnsmasq.confand /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.5ERX 的 IP 地址替換:

core-router(區域網路 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-server 共享網路名稱 [伺服器] 子網 [子網] 域名 sub1.local
設置服務 dhcp-server 共享網路名稱 [伺服器] 子網 [子網] dns 伺服器 192.168.100.1

當客戶端向 送出 DNS 查詢時router-core,會發生以下三種情況之一:

  • 如果router-core可以解決它,那麼它可以
  • 如果請求與子域匹配,則將請求轉發到為子域指定的 ERX
  • 如果請求不匹配,則將其傳遞給上游 DNS 伺服器

引用自:https://serverfault.com/questions/938135