一.本文環境
1.三台虛擬機。一台DNS服務器,一台web服務器,一台客戶端
2.DNS服務器軟件:bind,powerdns,unbound,本文使用bind
3.BIND相關程序包:yum list all bind*
bind:服務器
bind-libs:相關庫
bind-utils:客戶端
bind 程序名 named
二.DNS結構及介紹
1.DNS介紹
目前在網絡中的設備之間進行通信,是利用和依賴於IP地址實現的。但IP地址是難以記憶。於是一種有文字類型的記錄方式由此而來,但是文字記錄的方式可以利於人類記憶,可是計算機並不是理解這樣的名稱,於是我們可以利用一種名字解析服務將名稱解析成IP地址,進行網絡中的通訊,這種解析的方式之一就是DNS解析.(早期有其他方式的解析,目前大多都是DNS解析)
DNS(domain name system)是應用層協議,它作為將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便地訪問互聯網. C/S,53/udp, 53/tcp BIND:BekerleyInternat Name Domain,由ISC (www.isc.org)提供的DNS軟件實現.
2.DNS,域名結構
DNS域名是一個分布式工作方式,並且這個系統是倒狀,以根域,頂級域,二級域,主機來組成。
三,實現操作
1.配置DNS服務器
yum install -y bind 安裝dns服務軟件
有兩個文件配置DNS /etc/named.conf /var/named/
其中/etc/named.conf 定義了區域,對應的端口信息,配置文件路徑等信息
1 listen-on port 53 { 127.0.0.1; }; #若為服務器將監聽的IP改為localhost 2 listen-on-v6 port 53 { ::1; }; 3 directory "/var/named"; 4 dump-file "/var/named/data/cache_dump.db"; 5 statistics-file "/var/named/data/named_stats.txt"; 6 memstatistics-file "/var/named/data/named_mem_stats.txt"; 7 secroots-file "/var/named/data/named.secroots"; 8 recursing-file "/var/named/data/named.recursing"; 9 allow-query { localhost; }; #作為DNS服務器的話注釋掉此行或者改為any
/var/named/是bind的資源記錄目錄,其中根域也在其中
1 ;; ADDITIONAL SECTION: 2 a.root-servers.net. 518400 IN A 198.41.0.4 3 b.root-servers.net. 518400 IN A 199.9.14.201 4 c.root-servers.net. 518400 IN A 192.33.4.12 5 d.root-servers.net. 518400 IN A 199.7.91.13 6 e.root-servers.net. 518400 IN A 192.203.230.10 7 f.root-servers.net. 518400 IN A 192.5.5.241 8 g.root-servers.net. 518400 IN A 192.112.36.4 9 h.root-servers.net. 518400 IN A 198.97.190.53 10 i.root-servers.net. 518400 IN A 192.36.148.17 11 j.root-servers.net. 518400 IN A 192.58.128.30 12 k.root-servers.net. 518400 IN A 193.0.14.129 13 l.root-servers.net. 518400 IN A 199.7.83.42 14 m.root-servers.net. 518400 IN A 202.12.27.33
在/var/named/目錄中可以增加自己定義的資源記錄
在DNS解析中有七種資源記錄,A,SOA,NS,MX,AAAA,PTR,CNAME,一般常用A,SOA,MX,NS,SNAME,AAAA是ipv6解析,PTR反向解析,與A記錄相反。
資源解析記錄的語法格式
name [TTL] IN RR_TYPE VALUE
(1) TTL可從全局繼承
(2) @可用於引用當前區域的名字 (當前域是需要在另一個配置文件中定義,所有@是一個變量,而在記錄中的郵箱便不能寫@符號,要以.替代)
(3) 同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應
(4) 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機
現在來寫自己的資源記錄。
1 [root@CentOS-8 named]# cat baidu.com.dns 2 $TTL 1D 3 @ IN SOA master.baidu.com. admin-mail.baidu.com. ( 4 201911141803 ;序列號,不可過長否則服務無法啟動 我這寫的太長了 等會 會報錯的。 5 1D ;與從DNS服務的同步時間 6 1H ;重試時間 7 3D ;過期時間 8 1D ;否定時間 9 ) 10 @ IN A ns.baidu.com.;對NS記錄而言,任何一個ns記錄后面的服務器名字,應該需要一個對應的A記錄解析 11 master IN A 192.168.39.8
12 ns IN A 192.168.39.8
13 www IN A 192.168.39.6
資源記錄寫完之后還需要寫配置文件,不然配置的資源文件怎么使用?
配置文件/etc/named.conf ,這里各文件中的配置文件,但是應寫在/etc/named.rfc1912.zones 文件中 這個里面都有官方寫好的模板,改改就好
1 zone "baidu.com" IN { 2 type master; 3 file "baidu.com.dns"; 4 allow-update { none; }; 5 };
使用命令檢查
1 [root@CentOS-8 ~]# named-checkconf #檢查配置文件語法 2 [root@CentOS-8 ~]# named-checkzone "baidu.com" /var/named/baidu.com.dns #檢查解析庫的語法 3 dns_rdata_fromtext: /var/named/baidu.com.dns:2: near '201911141803': out of range # 序列號過長 4 dns_rdata_fromtext: /var/named/baidu.com.dns:9: near 'ns.baidu.com.': bad dotted quad #這里寫錯了 應該是NS記錄寫成了A記錄 5 zone baidu.com/IN: loading from master file /var/named/baidu.com.dns failed: out of range 6 zone baidu.com/IN: not loaded due to errors. 7 [root@CentOS-8 ~]#
更改完了檢查如下
1 [root@CentOS-8 ~]# named-checkzone "baidu.com" /var/named/baidu.com.dns 2 zone baidu.com/IN: loaded serial 2911141803 3 OK 4 [root@CentOS-8 ~]#
到這里我們的服務器已經配置好了。
四,配置一個頁面,一個DNS客戶端
配置頁面
[root@CentOS-6 ~]$service httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@CentOS-6 ~]$echo "<h1>www.google.com</h1>" > /var/www/html/index.html [root@CentOS-6 ~]$
配置DNS客戶
[root@centos7-lvm ~]# vim /etc/resolv.conf [root@centos7-lvm ~]#
1 # Generated by NetworkManager 2 search localdomain 3 nameserver 192.168.39.8
4 ~
在DNS服務器上啟動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: 47635
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 ;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 ns.baidu.com. 19
20 ;; ADDITIONAL SECTION: 21 ns.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: Thu Nov 14 19:12:07 CST 2019
26 ;; MSG SIZE rcvd: 91
五。總結
其實在DNS客戶端的資源記錄文件的權限應該與其他文件相同,我這里沒有改
1 [root@CentOS-8 named]# ll 2 total 20
3 -rw-r--r-- 1 root root 475 Nov 14 05:03 baidu.com.dns 4 drwxrwx--- 2 named named 23 Nov 14 05:12 data 5 drwxrwx--- 2 named named 60 Nov 14 05:12 dynamic 6 -rw-r----- 1 root named 2253 Apr 5 2018 named.ca 7 -rw-r----- 1 root named 152 Dec 15 2009 named.empty 8 -rw-r----- 1 root named 152 Jun 21 2007 named.localhost 9 -rw-r----- 1 root named 168 Dec 15 2009 named.loopback 10 drwxrwx--- 2 named named 6 Jul 25 11:39 slaves 11 [root@CentOS-8 named]#
SOA記錄必須定義要在前面先定義