Linux基礎服務——Bind DNS服務 Part4
轉發與區域記錄更新
一個DNS服務器不可能保存所有的區域記錄,所以我們一般都會將其他的區域紀錄轉發到其他的服務器上進行解析。
Bind9提供了全局轉發和區域轉發。我們嘗試配置一下。
全局轉發
//在全局配置里修改和添加如下內容,關閉DNSSEC,配置forwarders,指定轉發服務器為114.114.114.114,轉發模式為only
dnssec-enable no;
dnssec-validation no;
forward only;
forwarders { 114.114.114.114; };
forward有兩個選項first和only,first為默認值。
first值只有forwarders列表不為空時才生效,該值的含義為,使服務器優先使用forwarders列表中的內容進行查詢,如果不能得到正確響應,則自行尋找答案。(向根服務器開始迭代查詢)
only值則只使用forwarders列表的服務器,如果不能得到正確響應,則返回不能解析。
那么如果用戶向向我們發送請求,若自身無法解析則可以轉發到其他的DNS進行解析。
區域轉發
配置區域轉發,例如我們的客戶機需要訪問ns1.exam.com網站。那么在服務器上需要進行如下配置。
需要注意的是,在配置區域轉發時,需要配置全局轉發器,若沒有全局轉發器則會導致區域內的轉發器被作用成全局轉發器,所有DNS請求都會轉發至區域內指定的轉發器。
//下述內容定義了exam.com這個區域的請求全部轉發至192.168.100.60這個DNS服務器。
zone "exam.com" IN {
type forward;
forward only;
forwarders { 192.168.100.60; };
};
//轉發的服務器上需要有該區域
此時客戶機進行測試
PS C:\Users\77653> nslookup - 192.168.100.50
默認服務器: dns.test.com
Address: 192.168.100.50
> ns1.exam.com
服務器: dns.test.com
Address: 192.168.100.50
非權威應答:
名稱: ns1.exam.com
Address: 192.168.100.60
測試成功!
區域記錄更新
Bind9支持區域記錄的動態更新,使用nsupdate命令可以動態更新區域內的記錄。例如我們在test.com域中有如下內容。
$TTL 1D
@ IN SOA dns.test.com. admin.test.com. (
4 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns
NS dns2
ms NS dns2
tomcat A 192.168.100.90
dns2 A 192.168.100.60
dns A 192.168.100.50
Linux A 192.168.200.30
www A 192.168.100.20
web.test.com. A 192.168.100.10
Nginx CNAME web.test.com.
我需要添加一條A記錄進入該區域。可以使用nsupdate命令行工具。首先在主配置文件中允許某個主機動態更新區域內容。
zone "test.com" IN {
type master;
file "test.com.zones";
allow-transfer { key test.com-key; };
allow-update { 192.168.100.60; }; //配置allow-update項
};
在客戶端使用nsupdate命令進行更新。
[root@dns2 ~]# nsupdate
> server 192.168.100.50
> zone test.com.
> update add LDAP.test.com. 86400 A 192.168.100.40
> send
nsupdate命令語法如下:
- server servername port
- 這里servername為服務器的地址,若沒有指定,則發送到目標域SOA記錄中指定的主服務器上。port為動態更新請求的端口,若沒有特意指定則為默認的53端口
- zone zonename
- zonename指定區域
- update add domain-name ttl class type data
- domain-name為區域名稱 ttl為緩存時間 class一般為IN type為記錄類型
- update delete domain-name ttl class type data
- 格式同上
下面進入dns服務器查看區域文件。
- 格式同上
[root@dns1 named]# ll
······
-rw-r--r-- 1 named named 499 Jun 16 04:59 test.com.zones
-rw-r--r-- 1 named named 705 Jun 16 04:29 test.com.zones.jnl
-rw-r--r-- 1 named named 499 Jun 16 04:51 tmp-28cGJKIgsY
······
直接查看原有的區域文件,發現內部並沒有被改動,實際上的改動結果被儲存在tmp開頭的文件中,改動的信息被儲存在test.com.zones.jnl文件(二進制文件不宜修改)中。一般情況下在15分鍾內,Bind會將jnl文件轉儲到區域文件中。
此時添加進入的DNS記錄是能夠正常提供服務的,如果需要實時更新到區域文件中,需要使用rndc sync且需要注意區域文件的文件權限(rndc的配置待續)。
實際上我們可以將Windows Server AD域的DNS信息也保存在Bind 服務中,接下來開展實驗。
Windows Server向Bind注冊DNS信息
使用Windows Server 2019,IP地址為192.168.100.200,DNS指向192.168.100.50(DNS服務器),主機名為MSC,完整主機名為msc.test.com,DNS服務器需要配置允許該Windows Server更新dns條目。
Windows Server安裝AD域服務,注意,AD域的根域名要與Bind服務器中允許更新記錄的域相符。
安裝AD域服務完畢后,Windows Server會安裝DNS服務器,且將默認的DNS指向本機的環回地址,我們調整到192.168.100.50。然后重新啟動Netlogon服務,即可將DNS記錄傳送至Bind服務器。
重新啟動完畢后,查看Bind服務器日志。
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#55190: updating zone 'test.com/IN': adding an RR at '_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs.test.com' SRV 0 100 88 MSC.test.com.
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#61652: updating zone 'test.com/IN': adding an RR at '_ldap._tcp.dc._msdcs.test.com' SRV 0 100 389 MSC.test.com.
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#59632: updating zone 'test.com/IN': adding an RR at '_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.test.com' SRV 0 100 389 MSC.test.com.
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#55190: updating zone 'test.com/IN': adding an RR at '_kerberos._tcp.test.com' SRV 0 100 88 MSC.test.com.
······
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#60226: updating zone 'test.com/IN': adding an RR at '_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.test.com' SRV 0 100 389 MSC.test.com.
Jun 16 07:26:18 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#63234: updating zone 'test.com/IN': adding an RR at 'DomainDnsZones.test.com' A 192.168.100.200
Jun 16 07:26:20 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#55190: updating zone 'test.com/IN': deleting rrset at 'MSC.test.com' AAAA
Jun 16 07:26:20 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#55190: updating zone 'test.com/IN': deleting rrset at 'MSC.test.com' A
Jun 16 07:26:20 dns1 named[1019]: client @0x7fde6ae55fa0 192.168.100.200#55190: updating zone 'test.com/IN': adding an RR at 'MSC.test.com' A 192.168.100.200
Bind將日志文件轉儲到區域文件后,內容如下
[root@dns1 named]# cat test.com.zones
$ORIGIN .
$TTL 86400 ; 1 day
test.com IN SOA dns.test.com. admin.test.com. (
32 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.test.com.
NS dns2.test.com.
$TTL 600 ; 10 minutes
A 192.168.100.200
$ORIGIN _msdcs.test.com.
5930c61f-c708-4a47-b37e-8aa2f93295f8 CNAME MSC.test.com.
$ORIGIN _tcp.Default-First-Site-Name._sites.dc._msdcs.test.com.
_kerberos SRV 0 100 88 MSC.test.com.
_ldap SRV 0 100 389 MSC.test.com.
$ORIGIN _tcp.dc._msdcs.test.com.
_kerberos SRV 0 100 88 MSC.test.com.
_ldap SRV 0 100 389 MSC.test.com.
$ORIGIN _msdcs.test.com.
_ldap._tcp.9f564ec1-1f82-4f63-9a79-db6143b9222f.domains SRV 0 100 389 MSC.test.com.
gc A 192.168.100.200
$ORIGIN gc._msdcs.test.com.
_ldap._tcp.Default-First-Site-Name._sites SRV 0 100 3268 MSC.test.com.
_ldap._tcp SRV 0 100 3268 MSC.test.com.
$ORIGIN _msdcs.test.com.
_ldap._tcp.pdc SRV 0 100 389 MSC.test.com.
$ORIGIN _tcp.Default-First-Site-Name._sites.test.com.
_gc SRV 0 100 3268 MSC.test.com.
_kerberos SRV 0 100 88 MSC.test.com.
_ldap SRV 0 100 389 MSC.test.com.
$ORIGIN _tcp.test.com.
_gc SRV 0 100 3268 MSC.test.com.
_kerberos SRV 0 100 88 MSC.test.com.
_kpasswd SRV 0 100 464 MSC.test.com.
_ldap SRV 0 100 389 MSC.test.com.
$ORIGIN _udp.test.com.
_kerberos SRV 0 100 88 MSC.test.com.
_kpasswd SRV 0 100 464 MSC.test.com.
$ORIGIN test.com.
$TTL 86400 ; 1 day
dns A 192.168.100.50
dns2 A 192.168.100.60
$TTL 600 ; 10 minutes
DomainDnsZones A 192.168.100.200
$ORIGIN DomainDnsZones.test.com.
_ldap._tcp.Default-First-Site-Name._sites SRV 0 100 389 MSC.test.com.
_ldap._tcp SRV 0 100 389 MSC.test.com.
$ORIGIN test.com.
ForestDnsZones A 192.168.100.200
$ORIGIN ForestDnsZones.test.com.
_ldap._tcp.Default-First-Site-Name._sites SRV 0 100 389 MSC.test.com.
_ldap._tcp SRV 0 100 389 MSC.test.com.
$ORIGIN test.com.
$TTL 86400 ; 1 day
LDAP A 192.168.100.40
Linux A 192.168.200.30
ms NS dns2
$TTL 1200 ; 20 minutes
MSC A 192.168.100.200
$TTL 86400 ; 1 day
Nginx CNAME web
tomcat A 192.168.100.90
web A 192.168.100.10
www A 192.168.100.20