整個Internet大家庭中連接了數以億計的服務器,個人主機,其中大部分的網站、郵件服務器都使用了域名形式的地址。很顯然這種地址形式要比使用IP地址更加直觀,且更容易被用戶記住。
在Windows搭建DNS服務,可以參考博客:Windows Server 2016搭建DNS服務
如果想要搭建并管理好DNS服務器,那么必須了解的知識點有:
DNS系統在網絡中的作用就是維護一個地址數據庫,其中記錄了各種主機域名和IP地址的對應關系,以方便客戶程序提供正向和反向的地址查詢服務,即:
正向解析:根據域名查找IP地址,即將指定的域名解析為相對應的IP地址;
反向解析:根據IP地址查域名,即將指定的IP地址解析為相對應的域名。
DNS的組成:
常見的頂級域名、國家域名:
DNS服務的工作原理:
根據所管理的區域地址數據的來源不同,DNS系統可以分為不同的類型,在同一臺DNS服務器中,相對于不同的區域來說,也擁有不同的身份,常見的幾種類型如下:
緩存域名服務器:只提供域名解析結果的緩存功能,目的在于提高查詢速度和效率,但是沒有自己控制的區域地址數據。構建緩存域名服務器是,必須設置根域或指定其他DNS服務器作為解析來源;
主域名服務器:維護某一個特定DNS區域的地址數據庫,對其中的解析記錄具有自主控制權,是指定區域中唯一存在的權威服務器、官方服務器。構建主域名服務器時,需要自行建立所負責區域的地址數據文件;
從域名服務器:與主域名服務器提供完全相同的DNS解析服務,通常用于DNS服務器的熱備份。對于客戶機來說,無論使用主域名服務器還是從域名服務器,查詢的結果都是一樣的。區別在于:從域名服務器提供的解析結果不是由自己決定的,而是來自于主域名服務器。構建從域名服務器時,需要指定主域名服務器的位置,以便服務器能自動同步區域的地址數據庫。
DNS服務器的角色只是針對某一個特定的區域而言,比如:一個區域的主域名服務器可以同時是另一個區域的從域名服務器。
接下來詳細介紹如何在CentOS 7 中搭建DNS服務:
搭建主域名服務器:
[root@localhost ~]# yum -y install bind* #通過yum的方式安裝bind服務
編寫主配置文件
[root@localhost ~]# vim /etc/named.conf #編寫bind服務的主配置文件 ………… #省略部分內容 12 options { 13 listen-on port 53 { any; }; # 指定域名服務監聽的網絡端口,默認是本機,不能對外提供服務, #建議改為any ,表示任意主機,也可以刪除; 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; # 指定從/var/named目錄下讀取DNS數據文件; 16 dump-file "/var/named/data/cache_dump.db"; # 當執行導出命令時將DNS服務器的緩存數據存儲到指定的文件中; 17 statistics-file "/var/named/data/named_stats.txt"; # 指定named服務的統計文件, #當執行統計命令時會將內存中的統計信息追加到該文件中; 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { any; }; # 允許哪些客戶端訪問DNS服務,默認是本機, #建議改為“any”,表示任意主機,也可以刪除; ………… #省略部分內容 56 zone "benet.com" in { 57 type master; #類型為主區域 58 file "benet.com.zone"; 59 }; # 添加正向解析數據文件的信息 ,服務器類型是主服務器, #文件名為“benet.com.zone” 60 zone "10.168.192.in-addr.arpa" in { 61 type master; 62 file "192.168.10.arpa"; 63 }; #編寫反向區域文件
區域類型:master(主區域);slave(輔助區域);hint(根區域)
編寫區域配置文件
[root@localhost ~]# cd /var/named [root@localhost named]# cp named.localhost benet.com.zone #復制原本正向區域的模板 [root@localhost named]# cp named.loopback 192.168.10.arpa #復制原本反向區域的模板 [root@localhost named]# vim benet.com.zone #編寫正向區域配置文件 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS ns1.benet.com. ns1 IN A 192.168.10.1 www IN A 192.168.10.10 ftp IN CNAME www serial:序列號。可以供從服務器判斷何時獲取新數據的。 refresh:指定多長時間從服務器要與主服務器進行核對, retry:如果從服務器試圖檢查主服務器的序列號時, 主服務器沒有響應,則經過這個時間后將重新進行檢查 expire:將決定從服務器在沒有主服務器的情況下權威地持續提供域數據服務的時間長短 minimum:高速緩存否定回答的存活時間
配置選項詳解:
[root@localhost named]# vim 192.168.10.arpa #編寫反向區域配置文件 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS ns1.benet.com. 1 IN PTR ns1.benet.com. 10 IN PTR www.benet.com.
編寫完成后
[root@localhost named]# named-checkconf -z /etc/named.conf #檢查對應的數據庫文件 zone benet.com/IN: loaded serial 0 zone 10.168.192.in-addr.arpa/IN: loaded serial 0 zone localhost.localdomain/IN: loaded serial 0 zone localhost/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone 0.in-addr.arpa/IN: loaded serial 0 [root@localhost named]# named-checkconf /etc/named.conf #檢查主區域配置文件 [root@localhost named]# named-checkzone benet.com benet.com.zone #檢查區域配置文件 zone benet.com/IN: loaded serial 0 OK [root@localhost named]# systemctl start named #啟動DNS服務 [root@localhost named]# nslookup > www.benet.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.benet.com Address: 192.168.10.10 > ns1.benet.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: ns1.benet.com Address: 192.168.10.1
主域名服務器經過測試沒問題!
搭建從域名服務器
[root@localhost ~]# yum -y install bind* #安裝bind服務 [root@localhost ~]# vim /etc/named.conf #編寫主配置文件 ……………… #省略部分內容 12 options { 13 listen-on port 53 { any; }; 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; 16 dump-file "/var/named/data/cache_dump.db"; 17 statistics-file "/var/named/data/named_stats.txt"; 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { any; }; 20 forwarders { 192.168.10.1; }; #轉發器,本機解析不了轉發到192.168.10.1 ……………… #省略部分內容 57 zone "benet.com" in { 58 type slave; #區域類型為輔助區域 59 masters { 192.168.10.1; }; #主服務器為192.168.10.1 60 file "slaves/benet.com.zone"; #復制下來的文件保存到/var/named/slaves/目錄下 61 allow-transfer { 192.168.10.1; }; #允許從服務器上下載正向區域配置文件 62 }; 63 zone "10.168.192.in-addr.arpa" { 64 type slave; 65 masters { 192.168.10.1; }; 66 file "slaves/192.168.10.arpa"; 67 }; [root@localhost slaves]# named-checkconf -z /etc/named.conf #檢查named服務數據庫配置文件 zone localhost.localdomain/IN: loaded serial 0 zone localhost/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone 0.in-addr.arpa/IN: loaded serial 0 [root@localhost /]# systemctl start named [root@localhost /]# nslookup > www.benet.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.benet.com Address: 192.168.10.10 > ns1.benet.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: ns1.benet.com Address: 192.168.10.1 [root@localhost /]# ls /var/named/slaves/ benet.com.zone #從主域名服務器復制的正向區域文件
從域名服務器驗證完成!
在Windows客戶機上如果出現錯誤可使用命令“ipconfig /flushdns”刷新一下本地的DNS緩存!