CentOS 7.3 搭建DNS服務器
1. DNS服務簡介
DNS(Domain Name System)域名系統。
目前提供網絡服務的應用使用唯一的32位的IP地址來標識,但是由於數字比較復雜、難以記憶,因此產生了域名系統(DNS),通過域名系統,可以使用易於理解和形象的字符串名稱來標識網絡應用(如www.baidu.com、www.taobao.com)。訪問互聯網應用可以使用域名,也可以通過IP地址直接訪問該應用,在使用域名訪問網絡應用時,DNS負責將域名解析為IP地址。
2. 主機名和域名的區別?
主機名是內網的名字;域名是外網的名字。
主機名和域名其實是兩個完全可以不同的名字,但是有很多軟件(如郵件系統postfix)會默認認為它們一致。
全世界共有有13臺DNS根域服務器。
頂級域名:
.com .org .edu .gov .net .mil .info
商業 組織 教育 政府 通訊 軍事 信息
根域:
cn hk us jp tw in
.com.cn .net.us .edu.cn
3. DNS服務器特點
分布式的數據庫
解決了數據不一致,避免了名字沖突
有緩存機制,提高了性能和可靠性
4. 域名解析過程
為了將一個名字解析成一個IP地址,用戶應用程序調用一個稱為解析器的庫程序,將名字作為參數傳遞給它,形成DNS用戶;然後DNS用戶發送查詢請求給本地域名服務器,服務器首先在其管轄區域內查找名字,名字找到後,把對應的IP地址返回給DNS客戶。完整的名字解析過程如下圖所示:
二、系統環境
系統平臺: CentOS 7.3
DNS Server: 192.168.8.88
更改主機名,寫/etc/hosts記錄
# vim /etc/hosts 192.168.8.88 test.com --最後添加DNS服務器IP地址和主機名/別名 |
關閉防火墻
# systemctl stop firewalld --臨時關閉防火墻 # systemctl disable firewalld --永久關閉防火墻 |
關閉selinux
臨時關閉:
# setenforce 0 |
永久關閉:
# vim /etc/selinux/config SELINUX=disabled --將enforcing改為disabled # reboot --重啟系統永久生效 |
三、CentOS下的DNS服務
準備兩臺機器
1. 在DNS服務器上安裝bind軟件
BIND全稱是(Berkeley Internet Name Domain),是美國加利福尼亞大學伯克利分校開發的一個域名服務軟件包,Linux使用這個軟件包來提供域名服務,該軟件實現了DNS協議。BIND的服務端軟件是被稱作named的守護進程。
# yum -y install bind* 如果已經安裝過了,顯示“無需任何處理” |
安裝好後查看軟件包
# rpm -qa | grep ^bind bind-pkcs11-libs-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-utils-9.9.4-51.el7_4.1.x86_64 bind-license-9.9.4-51.el7_4.1.noarch bind-lite-devel-9.9.4-51.el7_4.1.x86_64 bind-libs-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-9.9.4-51.el7_4.1.x86_64 bind-dyndb-ldap-11.1-4.el7.x86_64 bind-9.9.4-51.el7_4.1.x86_64 --提供了域名服務的主要程序及相關文件 bind-sdb-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-devel-9.9.4-51.el7_4.1.x86_64 bind-utils-9.9.4-51.el7_4.1.x86_64 --提供了對DNS服務器的測試工具程序(如nslookup、dig等) bind-sdb-chroot-9.9.4-51.el7_4.1.x86_64 bind-devel-9.9.4-51.el7_4.1.x86_64 bind-libs-lite-9.9.4-51.el7_4.1.x86_64 bind-chroot-9.9.4-51.el7_4.1.x86_64 --為bind提供一個偽裝的根目錄以增強安全性(將“/var/named/chroot/”目錄作為BIND的根目錄) |
2. 啟動DNS服務
# systemctl start named.service --啟動DNS服務 # systemctl enable named.service --設置為開機啟動 # netstat -anlp | grep named --查看監聽端口為53 |
named作為標準的系統服務腳本,通過“systemctl start/restart/stop named.service”的形式可以實現對服務器程序的控制
named默認監聽TCP、UDP協議的53端口,以及TCP的953端口:
其中UDP 53端口一般對所有客戶機開放,以提供解析服務;
TCP 53端口一般只對特定從域名服務器開放,提高解析記錄傳輸通道;TCP 953端口默認只對本機(127.0.0.1)開放,用於為rndc遠程管理工具提供控制通道
配置文件的目錄:
沒有安裝bind-chroot軟件包
配置文件為/etc/named.conf
數據文件在/var/named目錄下
安裝了bind-chroot軟件包
配置文件為/var/named/chroot/etc/named.conf --默認沒有
數據文件在/var/named/chroot/var/named目錄
從上面看到裝了bind-chroot,籠環境為/var/named/chroot/
3. 查看配置文件/etc/named.conf
# vim /etc/named.conf 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. --該目錄中可以查看named配置案例 12 options { --options是全局服務器的配置選項,在這裏指定的參數,對配置中的任何區域都有效 13 listen-on port 53 { 127.0.0.1; }; --指定域名服務監聽的網絡端口,建議寫本機IP,減少服務器消耗 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; --指定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 { localhost; }; --允許哪些客戶端訪問DNS服務,此處改為“any”,表示任意主機 31 recursion yes; --開啟遞歸查詢 33 dnssec-enable yes; --開啟加密 34 dnssec-validation yes; --在遞歸查詢服務器上開啟DNSSEC驗證 35 36 /* Path to ISC DLV key */ 37 bindkeys-file "/etc/named.iscdlv.key"; 39 managed-keys-directory "/var/named/dynamic"; 41 pid-file "/run/named/named.pid"; 42 session-keyfile "/run/named/session.key"; 43 }; 44 45 logging { --named服務的日誌文件信息 46 channel default_debug { 47 file "data/named.run"; 48 severity dynamic; 49 }; 51 --每一個zone就是定義一個域的相關信息以及指定了named服務從哪些文件中獲得DNS各個域名的數據文件 52 zone "." IN { --根(.)域的配置及信息(配置緩存域名服務器,可以自己去了解) 53 type hint; --服務器類型 54 file "named.ca"; --文件路徑位置 55 }; 56 57 include "/etc/named.rfc1912.zones"; --include代表該文件是子配置文件 58 include "/etc/named.root.key"; |
4. 域名服務器的配置
配置步驟:
編輯/etc/named.rfc1912.zones --記錄你的域和域對應的數據文件在哪
編輯/var/named/data/*.zone --就是數據文件,記錄域名和IP的對應
例1:正向解析(將域名解析成IP)
(一)修改DNS服務的配置文件
# vim /etc/named.conf --主配置文件 12 options { 13 listen-on port 53 { 1192.168.8.88; }; --將127.0.0.1改為本機IP:192.168.8.88 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; }; --將localhost改為any,表示所有人都能對我的DNS服務進行查詢 |
(二)添加域的信息寫在子配置文件
# vim /etc/named.rfc1912.zones --文件最後添加正向解析數據文件的信息 43 zone "test.com" IN { 44 type master; 45 file "data/test.com.zone"; 46 }; |
(三)編輯正向解析文件
# vim /var/named/data/test.com.zone --編輯正向解析文件(將域名解析成IP) $TTL 1D --緩存時間 @ IN SOA dns.test.com. dns.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns.test.com. --DNS服務器的域名地址 dns.test.com. IN A 192.168.8.88 --DNS服務器的IP地址 @ IN MX 10 mail.www.test.com. --郵件服務器的域名地址 mail.www.test.com. IN A 192.168.8.4 --郵件服務器IP地址 www.test.com. IN A 192.168.8.88 --域名為test.com的IP地址 ftp.test.com. IN A 192.168.8.3 --域名為ftp的IP地址 |
serial:序列號。可以供從服務器判斷何時獲取新數據的,這裏我設成今天的日期。更新數據文件必須要更新這個序列號,否則從服務器將不更新
refresh:指定多長時間從服務器要與主服務器進行核對
retry:如果從服務器試圖檢查主服務器的序列號時,主服務器沒有響應,則經過這個時間後將重新進行檢查
expire:將決定從服務器在沒有主服務器的情況下權威地持續提供域數據服務的時間長短
minimum:高速緩存否定回答的存活時間
SOA記錄:每個區僅有一個SOA記錄,該區一直延伸到遇見另一個SOA記錄為止。SOA記錄包括區的名字,一個技術聯系人和各種不同的超時值
IN記錄:使用“IN”,對應的是internet
A記錄:是DNS數據庫的核心。一個主機必須為它的每個網絡接口得到一條A記錄
NS記錄:識別對一個區有權威性的服務器(即所有主服務器和從服務器),並把子域委托給其他機構。
MX記錄:電子郵件系統就是使用MX記錄來更有效的路由郵件。
PTR記錄:從IP地址到主機名的反向映射。與A記錄一樣,必須為每個網絡接口有一條PTR記錄。
# systemctl restart named.service --配置好後,重新DNS服務 |
(四)客戶端測試
註意:客戶端必須要跟服務器端通信(能ping通)及關閉selinux
# vim /etc/resolv.conf --修改客戶端的DNS服務器 nameserver 192.168.8.88 --IP為服務器的IP |
以下三個解析命令,仍選其一就可以了。
# dig www.test.com --查詢DNS包括NS記錄,A記錄,MX記錄等相關信息 # nslookup www.test.com # host www.test.com --測試域名系統工作是否正常 |
至此,正向解析OK!
例2:反向解析(將IP解析成域名)
(一)修改DNS服務的配置文件
# vim /etc/named.rfc1912.zones --文件最後添加反向解析數據文件的信息 zone "8.168.192.in-addr.arpa" IN { --域名對應的IP地址網段為192.168.8.0,此處必須按照相同的格式寫 type master; file "data/192.168.8.zone"; --反向解析文件名192.168.8.zone }; |
(二)編輯反向解析文件
# vim /var/named/data/192.168.8.zone $TTL 1D @ IN SOA dns.test.com. dns.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns.test.com. 88 IN PTR dns.test.com. @ IN MX 10 mail.www.test.com. 4 IN PTR mail.www.test.com. 88 IN PTR www.test.com. 3 IN PTR ftp.test.com. |
# systemctl restart named.service --配置好後,重啟DNS服務 |
(三)客戶端測試
註意:客戶端必須要跟服務器端通信(能ping通)及關閉selinux
# cat /etc/resolv.conf --修改客戶端的DNS服務器 nameserver 192.168.8.88 |
# nslookup 192.168.8.88 # host 192.168.8.88 --測試域名系統工作是否正常 |
至此,正向解析OK!
例3:做主從DNS服務器
準備三臺機器
(一)主DNS服務器的配置
# vim /etc/named.conf 12 options { 13 listen-on port 53 { 192.168.8.88; }; --(主)DNS服務器的IP 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; }; --允許查詢所有主機 |
# vim /etc/named.rfc1912.zones zone "test.com" IN { type master; file "data/test.com.zone"; allow-transfer {192.168.8.66;}; --指定(從)域名服務器IP };
zone "8.168.192.in-addr.arpa" IN { type master; file "data/192.168.8.zone"; allow-transfer {192.168.8.66;}; --指定(從)域名服務器IP }; |
(二)(主)編輯正向解析文件
# vim /var/named/data/test.com.zone $TTL 1D @ IN SOA dns1.test.com. dns1.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns1.test.com. dns1.test.com. IN A 192.168.8.88 --DNS服務器(主)的IP地址 @ IN NS dns2.test.com. dns2.test.com. IN A 192.168.8.66 --DNS服務器(從)的IP地址 www.test.com. IN A 192.168.8.88 --域名為test.com的(主)IP地址 www.test.com. IN A 192.168.8.66 --域名為test.com的(從)IP地址 |
(三)(主)反向解析文件
# vim /var/named/data/192.168.8.zone $TTL 1D @ IN SOA dns1.test.com. dns1.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns1.test.com. 88 IN PTR dns1.test.com. @ IN NS dns2.test.com. 66 IN PTR dns2.test.com. 88 IN PTR www.test.com. --域名為test.com的(主)IP地址 66 IN PTR www.test.com. --域名為test.com的(從)IP地址 |
# systemctl restart named.service --配置好後,重啟(主)DNS服務 |
(四)(從)DNS服務器的配置
1、重新開啟一臺linux虛擬主機,IP為192.168.8.66
2、服務的安裝與配置
# yum -y install bind* # vim /etc/named.conf 12 options { 13 listen-on port 53 { 192.168.8.66; }; --(從)DNS服務器的IP 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; }; --允許查詢所有主機 |
# vim /etc/named.rfc1912.zones zone "test.com" IN { type slave; --服務器類別,slave為(從)域名服務器選項 file "data/test.com.zone"; masters {192.168.8.88;}; --指定(主)域名服務器IP };
zone "8.168.192.in-addr.arpa" IN { type slave; --服務器類別,slave為(從)域名服務器選項 file "data/192.168.8.zone"; masters {192.168.8.88;}; --指定(主)域名服務器IP }; |
3. 編輯正向解析文件與反向解析文件,可直接從(主)DNS服務器中拷貝
# scp 192.168.8.88:/var/named/data/test.com.zone /var/named/data/test.com.zone # scp 192.168.8.88:/var/named/data/192.168.8.zone /var/named/data/192.168.8.zone |
# systemctl restart named.service --配置好後,重啟(從)DNS服務 |
(五)客戶端測試
# vim /etc/resolv.conf --添加以下參數 nameserver 192.168.8.88 --(主)DNS服務IP nameserver 192.168.8.66 --(從)DNS服務IP |
# nslookup www.test.com # nslookup 192.168.8.88 # nslookup 192.168.8.66 |
至此,DNS服務器主從正反向解析OK!
CentOS 7.3 搭建DNS服務器