Bind
動態更新區域子域
我正在執行
bind9
(9.9.5)DNS 伺服器(在 Debian/jessie 上)。我已將一個區域配置為允許動態更新,並希望TXT
為該區域內的特定主機添加記錄。這是一個範例設置(named.conf)
zone "example.com" { type master; notify yes; allow-update { key secret-key; }; file "/etc/bind/db.example.com"; };
以及隨附的 db.example.com 文件:
$ORIGIN . $TTL 604800 ; 1 week example.com IN SOA dns.example.com root.example.com. ( 1 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS dns.example.org. NS dns1.example.org. NS dns2.example.org. $ORIGIN example.com. * MX 10 mail.example.com. mail A 127.0.0.1 http A 127.0.1.1
使用我的secret-key,我可以直接在該區域中動態添加新記錄(例如創建TXT記錄
_acme-challenge.example.com
)。但是,我真正想做的是為區域內的主機添加子域記錄。例如,在區域
example.com
中,有一條A記錄mail.example.com
,我想為其動態添加一條TXT記錄_acme-challenge.mail.example.com
。不幸的是,我的域名伺服器不喜歡這樣並且拒絕使用
密鑰:更新區域“example.com/IN”:更新失敗:對更新區域沒有權威(NOTAUTH)
我可以將該記錄手動添加到 db 文件中,它工作正常。
_acme-challenge.mail TXT "secretstring"
但是,我想自動執行此操作(鑑於這是通過
DNS-01
質詢部署letsencrypt證書的一部分),因此手動設置記錄不是一種選擇。任何想法出了什麼問題以及如何自動更新我的 TXT 記錄?
更新:腳本
實際的更新是用 python-dnspython 實現的,看起來像:
update = dns.update.Update("mail.example.com", ...) update.add("_acme-challenge", 500, "TXT", token) response = dns.query.udp(update, name_server_ip)
事實證明,問題確實是 dnspython 腳本請求更新區域的方式。
它不會請求將條目添加
_acme-challenge.mail
到example.com
區域,而是會(並且錯誤地)請求將條目_acme-challenge
添加到mail.example.com
區域。由於名稱伺服器沒有
mail.example.com.
區域,它會拒絕處理請求。該問題的解決方案是反复嘗試添加到父區域,直到成功(或已達到 TLD):
- 嘗試添加
_acme-challenge
到區域mail.example.com.
- 嘗試添加
_acme-challenge.mail
到區域example.com.
- 嘗試添加
_acme-challenge.mail.example
到區域com.
- 失敗。