一.本文環境
1.CentOS 7
2. DNS服務軟件bind
二.DNS資源記錄的配置實現
1.資源記錄解析庫類型
資源解析庫,由眾多RR組成(resource record:資源記錄),記錄類型,A,SOA,AAAA,CNAME,PTR,MX,NS
A: 將名稱(域名)解析為IP地址
MX: 郵件交換服務器記錄
NS: 主機名記錄
PTR: 反向解析 把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;而有特定后綴:in-addr.arpa.,所以完整寫法為:4.3.2.1.in-addr.arpa. value: FQDN
SOA: 初始授權記錄,一個區域解析庫有且只能由一個SOA記錄 ,必須位於解析庫的第一條記錄
AAAA: 將名稱解析為IPV6地址
CNAME : 別名記錄
2 .資源記錄解析庫語法
name:當前域的名字可以使用@來代替 TTL:緩存時長 IN:internet rr_type:上面的其中資源記錄類型 value:類型的值
在七種記錄中SOA的值是由多部份組成 :服務器名字 管理郵箱 (序列號 同步時間 重試時間 過期時間 否定答案)
3.實現DNS服務器(三台機器)
1.yum install bind -y
2. 需要配置bind 主配置文件(/etc/named.conf)和解析庫文件(/var/named)
3.首先配置主配置文件/etc/named.conf
1 options { 2 // listen-on port 53 { 127.0.0.1; }; #注釋此行 開放端口不然無法被其他機器訪問,改為localhost也可
3 listen-on-v6 port 53 { ::1; }; 4 directory "/var/named"; 5 dump-file "/var/named/data/cache_dump.db"; 6 statistics-file "/var/named/data/named_stats.txt"; 7 memstatistics-file "/var/named/data/named_mem_stats.txt"; 8 secroots-file "/var/named/data/named.secroots"; 9 recursing-file "/var/named/data/named.recursing"; 10 // allow-query { localhost; }; #注釋此行 允許訪問 改為any也可
11 allow-transfer { none; }; #手動增加此行 任何主機不能同步。默認任何主機可以同步,此項不安全所以設為none
配置/etc/named.conf無需改太多地方,注釋掉兩行,增加一行就行了。
4.然后增加資源記錄庫文件/var/named/目錄下,創建一個文件,文件名隨意。但是這個文件名要和zone中的文件名一致
1 [root@CentOS-8 ~]# cat /var/named/bind.dns 2 $TTL 1D 3 ;name TTL IN rr_type value 4 @ IN SOA ns1.baidu.com. mail.baidu.com. ( 5 0000000001 ;序列號 增加就同步到從服務器
6 1D ;同步刷新時間 7 2H ;重試時間 8 2D ;過期時間 9 1D ;否定緩存時間 10 ) 11 @ IN NS ns1 12 ns1 IN A 192.168.39.8
13 www IN A 192.168.39.6
14 * IN A 192.168.39.6 ;泛解析 15 @ IN A 192.168.39.6 ;本域
5.增加一個域。跟上面的第4步對應,在/etc/named.rfc1912.zones 文件中增加,里面由范例直接改就行了
1 zone "baidu.com" IN { 2 type master; 3 file "bind.dns";(這里的文件於第4步文件對應) 4 allow-update { none; }; 5 };
6.客戶端curl訪問
1 [root@centos7-lvm ~]# curl www.baidu.com 2 <h1>www.google.com</h1> 3 [root@centos7-lvm ~]# curl wwwwwww.baidu.com #因為泛解析所以能正確訪問到 baidu.com這個域
4 <h1>www.google.com</h1>
5 [root@centos7-lvm ~]# curl baidu.com
6 <h1>www.google.com</h1>
7 [root@centos7-lvm ~]# curl aaaaaa.baidu.com # 因為泛解析所以能正確訪問到 baidu.com這個域
8 <h1>www.google.com</h1>
9 [root@centos7-lvm ~]#
dig訪問
1 [root@centos7-lvm ~]# dig baidu.com 2
3 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> baidu.com 4 ;; global options: +cmd 5 ;; Got answer: 6 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64695
7 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
8
9 ;; OPT PSEUDOSECTION: 10 ; EDNS: version: 0, flags:; udp: 4096
11 ;; QUESTION SECTION: 12 ;baidu.com. IN A 13
14 ;; ANSWER SECTION: 15 baidu.com. 86400 IN A 192.168.39.6
16
17 ;; AUTHORITY SECTION: 18 baidu.com. 86400 IN NS ns1.baidu.com. 19
20 ;; ADDITIONAL SECTION: 21 ns1.baidu.com. 86400 IN A 192.168.39.8
22
23 ;; Query time: 0 msec 24 ;; SERVER: 192.168.39.8#53(192.168.39.8) 25 ;; WHEN: Sat Nov 16 15:55:00 CST 2019
26 ;; MSG SIZE rcvd: 88
都可以訪問了,這樣一個DNS服務就完成了。
4.實現DNS主從服務器的訪問(四台機器)
1.增加一個從服務器很簡單,新增一個機器,安裝DNS服務軟件bind
2.同樣需要配置主配置文件/etc/named.conf 注釋兩行增加一行
1 options { 2 //listen-on port 53 { 127.0.0.1; };
3 listen-on-v6 port 53 { ::1; }; 4 directory "/var/named"; 5 dump-file "/var/named/data/cache_dump.db"; 6 statistics-file "/var/named/data/named_stats.txt"; 7 memstatistics-file "/var/named/data/named_mem_stats.txt"; 8 recursing-file "/var/named/data/named.recursing"; 9 secroots-file "/var/named/data/named.secroots"; 10 allow-transfer { none; }; 11 //allow-query { localhost; };
3.配置從服務器的配置文件/etc/named.rfc1912.zones
1 zone "baidu.com" IN { #這個區域必須與主服務器上的區域項匹配 2 type slave; #dns服務器類型 3 masters {192.168.39.8;}; #主服務器的IP 4 file "slaves/baidu.com.slase"; #文件名可以隨意 5 };
4.將主服務配置文件/etc/named.conf中的allow-transfer {none;}; 改為從服務器的IP
1 options { 2 // listen-on port 53 { 127.0.0.1; };
3 listen-on-v6 port 53 { ::1; }; 4 directory "/var/named"; 5 dump-file "/var/named/data/cache_dump.db"; 6 statistics-file "/var/named/data/named_stats.txt"; 7 memstatistics-file "/var/named/data/named_mem_stats.txt"; 8 secroots-file "/var/named/data/named.secroots"; 9 recursing-file "/var/named/data/named.recursing"; 10 allow-transfer { 192.168.39.27; };# 增加可以同步的從服務器IP
5.其實現在啟動從服務器上的DNS服務便可以同步主服務器上的bind.dns文件.
但是主服務器並不知道誰是他的從服務器,所以還需要在主服務器的/var/named/bind.dns(資源記錄文件)中加上一個A記錄與一個NS記錄
1 $TTL 1D 2 ;name TTL IN rr_type value 3 @ IN SOA ns1.baidu.com. mail.baidu.com. ( 4 0000000001 5 1D 6 2H 7 2D 8 1D 9 ) 10 @ IN NS slave 11 slave IN A 192.168.39.27 12 @ IN NS ns1 13 ns1 IN A 192.168.39.8 14 www IN A 192.168.39.6 15 * IN A 192.168.39.6 ;泛解析 16 @ IN A 192.168.39.6 ;本域
6.停止主服務上的DNS 測試從服務器是否可用
1 [root@centos7-lvm ~]# dig www.baidu.com 2
3 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.baidu.com 4 ;; global options: +cmd 5 ;; Got answer: 6 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32407
7 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
8
9 ;; OPT PSEUDOSECTION: 10 ; EDNS: version: 0, flags:; udp: 4096
11 ;; QUESTION SECTION: 12 ;www.baidu.com. IN A 13
14 ;; ANSWER SECTION: 15 www.baidu.com. 86400 IN A 192.168.39.6
16
17 ;; AUTHORITY SECTION: 18 baidu.com. 86400 IN NS ns1.baidu.com. 19 baidu.com. 86400 IN NS slave.baidu.com. 20
21 ;; ADDITIONAL SECTION: 22 slave.baidu.com. 86400 IN A 192.168.39.27
23 ns1.baidu.com. 86400 IN A 192.168.39.8
24
25 ;; Query time: 1 msec 26 ;; SERVER: 192.168.39.27#53(192.168.39.27) #從服務器地址 所以從服務器可用 27 ;; WHEN: Sat Nov 16 16:47:39 CST 2019
28 ;; MSG SIZE rcvd: 128
5.實現DNS父域和子域服務
1.父域子域的實現需要也是通過 A記錄委派實現的
2.父域的資源記錄文件上增加子域委派
1 $TTL 1D 2 ;name TTL IN rr_type value 3 @ IN SOA ns1.baidu.com. mail.baidu.com. ( 4 0000000002
5 1D 6 2H 7 2D 8 1D 9 ) 10 @ IN NS slave 11 slave IN A 192.168.39.27
12 @ IN NS ns1
13 google IN NS ns.google 14 ns.google IN A 192.168.39.37 #委派給服務器192.168.39.37
15 ns1 IN A 192.168.39.8
16 www IN A 192.168.39.6
17 * IN A 192.168.39.6 ;泛解析 18 @ IN A 192.168.39.6 ;本域
3.在父域的DNS服務器上還需要將/etc/named.conf文件中的配置更改
1 dnssec-enable no; #這樣項改為no 默認yes 2 dnssec-validation no;
4.子域服務器改注釋的兩行和增加的一行完成
5.配置子域的配置文件/etc/named.rfc1912.conf 和創建資源文件 /var/named/google.baidu.com
/etc/named.rfc1912.conf
zone "google.baidu.com" IN { type master; file "google.baidu.com"; allow-update { none; }; };
創建資源配置文件 /var/named/google.baidu.com
1 $TTL 1D 2 @ IN SOA NS1 mail ( 3 000000001 4 1D 5 2H 6 3D 7 10H 8 ) 9 @ IN NS NS1 10 NS1 IN A 192.168.39.37 11 www IN A 192.168.39.6
6.測試子域
1 [root@centos7-lvm ~]# curl www.google.baidu.com 2 www.google.baidu.com
6.DNS轉發
1.DNS轉發
DNS轉發分全局轉發和特定區域轉發。
實現DNS全局轉發很簡單只需在主配置文件/etc/named.conf文件中增加兩行
1 options { 2 // listen-on port 53 { 127.0.0.1; };
3 listen-on-v6 port 53 { ::1; }; 4 directory "/var/named"; 5 dump-file "/var/named/data/cache_dump.db"; 6 statistics-file "/var/named/data/named_stats.txt"; 7 memstatistics-file "/var/named/data/named_mem_stats.txt"; 8 recursing-file "/var/named/data/named.recursing"; 9 secroots-file "/var/named/data/named.secroots"; 10 // allow-query { localhost; };
11 allow-transfer {none;}; 12 forward first; #轉發由兩種方式 only 與 first only是不會去找根域 而first回去找根 13 forwarders {192.168.39.8;}; #轉發到DNS的ip
實現DNS特定區域的轉發,僅轉發對特定的區域的請求,比全局轉發優先級高
1 zone "baidu.com" IN { 2 type forward; 3 forward first; 4 forwarders { 180.76.76.76; }; #返回的是真正的百度頁面 因為優先級比全局高,不是我自己弄的頁面了 5 };
7.智能DNS
1.實現DNS需要設置acl訪問控制,設置訪問的IP段。
2.設置view視圖,將匹配的acl與相應的zone文件配置關聯起來。
3.zone文件中的file配置是將解析庫關聯起來。
4.解析庫中的CNAME(別名記錄)配合A記錄來最終實現智能DNS
根據如上步驟來配置 /etc/named.conf 文件實現
1.設置acl
acl: 把一個或多個地址歸並為一個集合,並通過一個統一的名稱調用
注意:只能先定義后使用;因此一般定義在配置文件中,處於options的前面
1 acl beijingnet { 2 192.168.39.0/24; 3 }; 4
5 acl shanghainet { 6 172.16.0.0/16; 7 }; 8
9 acl othernet { 10 any; 11 };
2.view 的配置
View:視圖,將ACL和區域數據庫實現對應關系,以實現智能DNS
一個bind服務器可定義多個view,每個view中可定義一個或多個zone
每個view用來匹配一組客戶端
多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件
注意:
一旦啟用了view,所有的zone都只能定義在view中,所以需要將原來的根域的配置(zone "." ) 移到其他配置中,我此處移到了/etc/named/rfc1912.conf中
而且需要將include "/etc/named.rfc1912.conf" 刪除
僅在允許遞歸請求的客戶端所在view中定義根區域
客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
view beijing { match-clients { beijingnet;}; #match-clients 中的一定要與acl的名稱匹配 include "/etc/named.beijing"; }; view shanghai { match-clients { shanghainet;}; include "/etc/named.shanghai"; }; view other { match-clients { othernet;}; include "/etc/named.other"; }; include "/etc/named.root.key";
3.配置zone文件
配置zone根前面一樣,如下。
zone "baidu.com" { type master; file "beijingnet"; };
此處我創建了三個文件分別對應三個區域,格式都一樣,只是file 指向了不一樣的資源解析文件。
4.資源解析記錄
創建與zone對應的資源解析文件,zone文件有三個,所以資源解析文件也與之相匹配。
在資源解析文件中需要增加別名記錄與A記錄,其他的都一樣。
1 [root@CentOS-8 named]# cat *net 2 $TTL 1D 3 @ IN SOA master mail ( 4 000000001 5 1D 6 3H 7 1D 8 1D 9 ) 10 @ IN NS master 11 master IN A 192.168.39.8 12 www IN CNAME web 13 web IN A 192.168.39.6 14 15 16 17 18 $TTL 1D 19 @ IN SOA master mail ( 20 000000001 21 1D 22 3H 23 1D 24 1D 25 ) 26 @ IN NS master 27 master IN A 192.168.39.8 28 www IN CNAME web 29 web IN A 192.192.39.27 30 31 32 33 34 $TTL 1D 35 @ IN SOA master mail ( 36 000000001 37 1D 38 3H 39 1D 40 1D 41 ) 42 @ IN NS master 43 master IN A 192.168.39.8 44 www IN CNAME web 45 web IN A 192.168.39.17
8.總結
NS記錄往往跟一條A記錄把名字解析為IPV4的地址
NS記錄和A可實現子域委派,主從服務器。
CNAME配合A記錄實現CND,
主服務器只可允許從服務器同步。從服務器不可任何主機同步(allow-transfer {none;};)
子域的委派和DNS轉發需要關閉如下
關閉dnsec功能
dnssec-enable no;
dnssec-validation no;