dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录
如何動態更新DNS記錄.md
零、概述
一般來說,DNS記錄都是手動更新的,通過修改配置文件,或者通過網站頁面,但是如何才能簡化工作,使部分DNS記錄更新自動化呢?
這就是本文關注的內容。
一、通過DHCP服務來更新DNS記錄(DDNS)
DDNS(Dynamic Domain Name Server)是動態域名服務的縮寫。 DDNS是將用戶的動態IP地址映射到一個固定的域名解析服務上,用戶每次連接網絡的時候客戶端程序就會通過信息傳遞把該主機的動態IP地址傳送給位于服務商主機上的服務器程序,服務器程序負責提供DNS服務并實現動態域名解析。
DDNS在企業中最常見的應用就是服務器的遠程控制卡了(iDRAC或者ilo),部署了DDNS的網絡中不需要手動設置遠程控制卡IP地址,直接使用相關的域名就能訪問遠程控制卡界面。
DDNS工作原理
ILO網卡在通過DHCP獲取地址時,可以把自己的主機名發送給DHCP服務器軟件,而DHCP服務器再去更新DNS服務器中的記錄。就這么簡單,實際使用中會有安全考慮,只有拿著特定KEY的DHCP服務器才能更新。
這里,我們使用DNS服務器軟件(bind)和DHCP軟件(dhcpd)來實現。
DNS服務器的配置如下
#@以下是DNS配置,文件/etc/named.conf
#@定義一個KEY,用于安全防護
key "ilokey" {
algorithm hmac-md5;
secret "fvA/r7RriulZQWHEVqoG8A==";
};
#@定義一個zone,允許特定的KEY可以更新
zone "ipcpu.com" {
type master;
allow-update { key ilokey; };
file "/etc/named/ipcpu.com.conf";
};
DHCP服務器的配置
#@以下是DHCP配置,文件/etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
ddns-updates on;
option domain-name "ipcpu.com";
option domain-name-servers 4.4.4.2;
default-lease-time 600;
max-lease-time 7200;
#@設置KEY和Zone
key "ilokey" {
algorithm hmac-md5;
secret "fvA/r7RriulZQWHEVqoG8A==";
};
zone ipcpu.com. {
primary 127.0.0.1;
key ilokey;
}
subnet 4.4.4.0 netmask 255.255.255.0 {
range 4.4.4.101 4.4.4.150;
option domain-name-servers 4.4.4.2;
option domain-name "ipcpu.com";
option routers 4.4.4.1;
default-lease-time 600;
max-lease-time 7200;
}
DHCP服務器需要注意的地方:
打開DDNS選項
只里面必須配置zone 這個選項;
primary 127.0.0.1; 如果DNS和DHCPD不在一臺機器上需要改成外部IP;
結果測試
然后我們在DHCP服務器上看到了分配給客戶的IP信息
[root@s0 named]# tail -11 /var/lib/dhcpd/dhcpd.leases
lease 4.4.4.150 {
starts 5 2012/09/14 10:03:27;
ends 5 2012/09/14 10:13:27;
binding state active;
next binding state free;
hardware ethernet 00:0c:29:14:e6:f4;
set ddns-rev-name = "150.4.4.4.in-addr.arpa.";
set ddns-txt = "0016de8f4b9a6439c2d2abe55a7c3d58b1";
set ddns-fwd-name = "rac-H3LG23X.ipcpu.com";
client-hostname "rac-H3LG23X";
}
[root@s0 named]# ping rac-H3LG23X.ipcpu.com
PING rac-H3LG23X.ipcpu.com (4.4.4.150) 56(84) bytes of data.
64 bytes from 4.4.4.150: icmp_seq=1 ttl=64 time=0.289 ms
二、通過nsupdate來更新DNS記錄
使用動態更新之前需要在配置文件中的zone中加入allow-update,如下
zone "ipcpu.com" {
type master;
allow-update { any; };
file "data/ipcpu.com.txt";
};
#使用allow-update { keyname; }; 會更加安全
然后即可通過nsupdate命令更新DNS記錄了
# nsupdate
> server 192.168.36.54
> update add update.ipcpu.com 6000 IN A 192.168.0.2
> send
> quit
或者使用python的dnspython模塊來完成
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import dns.query
import dns.tsigkeyring
import dns.update
import sys
keyring = dns.tsigkeyring.from_text({
'ipcpu-example-dyn-update.' : 'XXXXXXXXXX=='
})
update = dns.update.Update('ipcpu.com', keyring=keyring,
keyname="ipcpu-example-dyn-update.")
update.add('st', 300, 'a', '2.2.2.2')
response = dns.query.tcp(update, '192.168.36.54')
更新完成后,可以使用 dig @192.168.36.54 st.ipcpu.com來測試。
三、journal文件查看和整合
通過查看服務器數據,我們發現動態更新的域名都會存儲到ipcpu.com.txt.jnl文件中,這并不是一個文本文件,如何查看其內容呢?
bind為我們提供了一個命令named-journalprint,通過這個命令來查看。
#named-journalprint ipcpu.com.txt.jnl
del ipcpu.com. 604800 IN SOA jackal. root.jackal. 2 604800 86400 2419200 604800
add ipcpu.com. 604800 IN SOA jackal. root.jackal. 3 604800 86400 2419200 604800
add update.ipcpu.com. 6000 IN A 192.168.0.2
del ipcpu.com. 604800 IN SOA jackal. root.jackal. 3 604800 86400 2419200 604800
add ipcpu.com. 604800 IN SOA jackal. root.jackal. 4 604800 86400 2419200 604800
add st.ipcpu.com. 300 IN A 2.2.2.2
把數據放在這個文件里其實挺難管理的,我們還可以把數據合并回主數據文件ipcpu.com.txt,操作命令如下。
#@@freeze zone first to avoid update
rndc freeze ipcpu.com
#@@update zone file
rndc thaw ipcpu.com
四、參考資料
無
總結
以上是生活随笔為你收集整理的dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cool Edit Pro 中把歌曲的原
- 下一篇: 转帖: 如何备份和恢复BIG-IP V9