DNS服務---內網測試

DNS服務概述:

DNS(Domain Name System)域名系統,在TCP/IP 網絡中有非常重要的地位,能夠提供域名與IP地址的解析服務。

DNS 是一個分佈式數據庫,命名系統採用層次的邏輯結構,如同一棵倒置的樹,這個邏輯的樹形結構稱爲域名空間,由於DNS 劃分了域名空間,所以各機構可以使用自己的域名空間創建DNS信息。
注:DNS 域名空間中,樹的最大深度不得超過127 層,樹中每個節點最長可以存儲63 個字符。
在這裏插入圖片描述
在這裏插入圖片描述
1、域和域名
DNS 樹的每個節點代表一個域,通過這些節點,對整個域名空間進行劃分,成爲一個層次結構。
域名空間的每個域的名字,通過域名進行表示。

域名:通常由一個完全合格域名(FQDN)標識。FQDN能準確表示出其相對於DNS 域樹根的位置,也就是節點到DNS 樹根的完整表述方式,從節點到樹根採用反向書寫,並將每個節點用“.”分隔,對於DNS 域google 來說,其完全正式域名(FQDN)
爲google.com。
例如,google爲com域的子域,其表示方法爲google.com,而www爲google域中的子域,可以使用www.google.com表示。

注意:通常,FQDN 有嚴格的命名限制,長度不能超過256 字節,只允許使用字符a-z,0-9,A-Z
和減號(-)。點號(.)只允許在域名標誌之間(例如“google.com”)或者FQDN 的結尾使用。
域名不區分大小。
由最頂層到下層,可以分成:根域、頂級域、二級域、子域。

Internet 域名空間的最頂層是根域(root),其記錄着Internet 的重要DNS 信息,由Internet域名註冊授權機構管理,該機構把域名空間各部分的管理責任分配給連接到Internet 的各個組織。
“.”全球有13個根(root)服務器
DNS 根域下面是頂級域,也由Internet 域名註冊授權機構管理。共有3 種類型的頂級域。
組織域:採用3 個字符的代號,表示DNS 域中所包含的組織的主要功能或活動。比如com 爲商業機構組織,edu 爲教育機構組織,gov 爲政府機構組織,mil 爲軍事機構組織,net 爲網絡機構組
織,org 爲非營利機構組織,int 爲國際機構組織。

地址域:採用兩個字符的國家或地區代號。如cn 爲中國,kr 爲韓國,us 爲美國。
反向域:這是個特殊域,名字爲in-addr.arpa,用於將IP 地址映射到名字(反向查詢)。
對於頂級域的下級域,Internet 域名註冊授權機構授權給Internet 的各種組織。當一個組織獲得了對域名空間某一部分的授權後,該組織就負責命名所分配的域及其子域,包括域中的計算機和其他設備,並管理分配的域中主機名與IP 地址的映射信息。

2、區(Zone)
區是DNS 名稱空間的一部分,其包含了一組存儲在DNS 服務器上的資源記錄。
使用區的概念,DNS 服務器回答關於自己區中主機的查詢,每個區都有自己的授權服務器。

3、主域名服務器與輔助域名服務器
當區的輔助服務器啓動時,它與該區的主控服務器進行連接並啓動一次區傳輸,區輔助服務器定期與區主控服務器通信,查看區數據是否改變。如果改變了,它就啓動一次數據更新傳輸。
每個區必須有主服務器,另外每個區至少要有一臺輔助服務器,否則如果該區的主服務器崩潰了,就無法解析該區的名稱。
輔助服務器的優點:
1)容錯能力
配置輔助服務器後,在該區主服務器崩潰的情況下,客戶機仍能解析該區的名稱。一般把區的主
服務器和區的輔助服務器安裝在不同子網上,這樣如果到一個子網的連接中斷,DNS 客戶機還能
直接查詢另一個子網上的名稱服務器。
2)減少廣域鏈路的通信量
如果某個區在遠程有大量客戶機,用戶就可以在遠程添加該區的輔助服務器,並把遠程的客戶機
配置成先查詢這些服務器,這樣就能防止遠程客戶機通過慢速鏈路通信來進行DNS 查詢。
3)減輕主服務器的負載
輔助服務器能回答該區的查詢,從而減少該區主服務器必須回答的查詢數。

4、DNS 相關概念
(1)DNS 服務器
運行DNS 服務器程序的計算機,儲存DNS 數據庫信息。DNS 服務器會嘗試解析客戶機的查詢請求。
在解答查詢時,如果DNS 服務器能提供所請求的信息,就直接回應解析結果,如果該DNS 服務器
沒有相應的域名信息,則爲客戶機提供另一個能幫助解析查詢的服務器地址,如果以上兩種方法
均失敗,則迴應客戶機沒有所請求的信息或請求的信息不存在。
(2)DNS 緩存
DNS 服務器在解析客戶機請求時,如果本地沒有該DNS 信息,則可以會詢問其他DNS 服務器,當
其他域名服務器返回查詢結果時,該DNS 服務器會將結果記錄在本地的緩存中,成爲DNS 緩存。
當下一次客戶機提交相同請求時,DNS 服務器能夠直接使用緩存中的DNS 信息進行解析。

2)DNS查詢方式: 遞歸查詢和迭代查詢
看一個DNS查詢過程:
通過8個步驟的解析過程就使得客戶端可以順利訪問www.163.com 這個域名,但實際應用中,通常這個過程是非常迅速的

在這裏插入圖片描述
<1> 客戶機提交域名解析請求,並將該請求發送給本地的域名服務器。
<2> 當本地的域名服務器收到請求後,就先查詢本地的緩存。如果有查詢的DNS 信息記錄,則直
接返回查詢的結果。如果沒有該記錄,本地域名服務器就把請求發給根域名服務器。
<3> 根域名服務器再返回給本地域名服務器一個所查詢域的頂級域名服務器的地址。
<4> 本地服務器再向返回的域名服務器發送請求。
<5> 接收到該查詢請求的域名服務器查詢其緩存和記錄,如果有相關信息則返回客戶機查詢結
果,否則通知客戶機下級的域名服務器的地址。
<6> 本地域名服務器將查詢請求發送給返回的DNS 服務器。
<7> 域名服務器返回本地服務器查詢結果(如果該域名服務器不包含查詢的DNS 信息,查詢過程
將重複<6>、<7>步驟,直到返回解析信息或解析失敗的迴應)。
<8> 本地域名服務器將返回的結果保存到緩存,並且將結果返回給客戶機。

5、兩種查詢方式:
(1)遞歸查詢
遞歸查詢是一種DNS 服務器的查詢模式,在該模式下DNS 服務器接收到客戶機請求,必須使用一
個準確的查詢結果回覆客戶機。如果DNS 服務器本地沒有存儲查詢DNS 信息,那麼該服務器會詢
問其他服務器,並將返回的查詢結果提交給客戶機。

(2)迭代查詢
DNS 服務器另外一種查詢方式爲迭代查詢,當客戶機發送查詢請求時,DNS 服務器並不直接回複查詢結果,而是告訴客戶機另一臺DNS 服務器地址,客戶機再向這臺DNS 服務器提交請求,依次循環直到返回查詢的結果爲止。

6、正向解析與反向解析
1)正向解析
正向解析是指域名到IP 地址的解析過程。
在這裏插入圖片描述
2)反向解析
反向解析是從IP 地址到域名的解析過程。反向解析的作用爲服務器的身份驗證。
http://dns.aizhan.com/
在這裏插入圖片描述
7、DNS資源記錄
1)SOA 資源記錄
每個區在區的開始處都包含了一個起始授權記錄(Start of Authority Record),簡稱SOA 記錄。
SOA 定義了域的全局參數,進行整個域的管理設置。一個區域文件只允許存在唯一的SOA 記錄。
2)NS 資源記錄
NS(Name Server)記錄是域名服務器記錄,用來指定該域名由哪個DNS服務器來進行解析。每個區在區根處至少包含一個NS 記錄。
3)A 資源記錄
地址(A)資源記錄把FQDN 映射到IP 地址。 因爲有此記錄,所以DNS服務器能解析FQDN域名對應的IP 地址。
4)PTR 資源記錄
相對於A 資源記錄,指針(PTR)記錄把IP地址映射到FQDN。 用於反向查詢,通過IP地址,找到域名。
5)CNAME 資源記錄
別名記錄(CNAME)資源記錄創建特定FQDN 的別名。用戶可以使用CNAME 記錄來隱藏用戶網絡的實現細節,使連接的客戶機無法知道真正的域名。
例:ping百度時,解析到了百度的別名服務器。百度有個cname=www.a.shifen.com.的別名
在這裏插入圖片描述
6)MX 資源記錄
郵件交換(MX)資源記錄,爲DNS 域名指定郵件交換服務器。
郵件交換服務器是爲DNS 域名處理或轉發郵件的主機。處理郵件指把郵件投遞到目的地或轉交另一不同類型的郵件傳送者。轉發郵件指把郵件發送到最終目的服務器,用簡單郵件傳輸協議SMTP 把郵件發送給離最終目的地最近的郵件交換服務器,或使郵件經過一定時間的排隊。
以上是相關概念。

模式: C/S 模式
端口

[root@localhost181 test1]# vim /etc/services 

在這裏插入圖片描述
端口:
tcp/53 udp/53 #用於客戶端查詢
tcp/953 udp/953 #用於DNS主從同步

安裝DNS:

BIND 簡介
BIND 全稱爲Berkeley Internet Name Domain(伯克利因特網名稱域系統)。BIND 主要有三個版
本:BIND4、BIND8、BIND9。
BIND8 融合了許多提高效率、穩定性和安全性的技術,而BIND9 增加了一些超前的理念:IPv6支持、密鑰加密、多處理器支持、線程安全操作、增量區傳送等等。

安裝程序

[root@localhost181 test1]# yum install bind bind-chroot bind-utils   -y

bind-9.7.3-8.P3.el6.x86_64.rpm #該包爲DNS 服務的主程序包。
bind-chroot-9.7.3-8.P3.el6.x86_64.rpm # 提高安全性。

#bind-chroot是bind的一個功能,使bind可以在一個chroot 的模式下運行.也就是說,bind運行時的/(根)目錄,並不是系統真正的/(根)目錄,只是系統中的一個子目錄而已.這樣做的目的是爲了提高安全性.因爲在chroot的模式下,bind可以訪問的範圍僅限於這個子目錄的範圍裏,無法進一步提升,進入到系統的其他目錄中.
bind-utils-9.7.3-8.P3.el6.x86_64.rpm #該包爲客戶端工具,默認安裝,用於搜索域名指令。

DNS服務器相關配置文件:

[root@localhost181 ~]# ls /etc/named.conf 
/etc/named.conf

named.conf 是BIND 的核心配置文件,它包含了BIND 的基本配置,但其並不包括區域數據。

/var/named/ 目錄爲DNS數據庫文件存放目錄,每一個域文件都放在這裏

啓動服務查看端口

[root@localhost181 ~]# systemctl start named
[root@localhost181 ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@localhost181 ~]# netstat -anltpu |grep 53
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      17432/named         
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      17432/named         
tcp        0      0 10.10.100.181:49220     198.41.0.4:53           TIME_WAIT   -                   
tcp        0      0 10.10.100.181:45678     198.41.0.4:53           TIME_WAIT   -                   
tcp6       0      0 ::1:53                  :::*                    LISTEN      17432/named         
tcp6       0      0 ::1:953                 :::*                    LISTEN      17432/named         
udp        0      0 127.0.0.1:53            0.0.0.0:*                           17432/named         
udp6       0      0 ::1:53                  :::*                                17432/named        

此服務的使用方法

[root@localhost181 ~]# mount     #查看掛載,這些主要是chroot的作用,
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1001888k,nr_inodes=250472,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=21748)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=202812k,mode=700)
10.10.100.178:/web on /test1 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.100.181,local_lock=none,addr=10.10.100.178)

在客戶端配置好DNS服務器地址。

[root@localhost181 ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
[root@localhost181 ~]#  cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="d21552e9-7cca-433e-aa3b-a04532c8c755"
DEVICE="ens33"
ONBOOT="yes"

這個兩個地方都配置了dns,網卡的優先級比較高,出問題優先排查網卡配置。

修改配置文件

[root@localhost181 ~]# cp /etc/named.conf  /etc/named.conf.bak
[root@localhost181 ~]# vim  /etc/named.conf

在這裏插入圖片描述
type 字段指定區域的類型,對於區域的管理至關重要,一共分爲六種:
Master:主DNS 服務器:擁有區域數據文件,並對此區域提供管理數據
Slave:輔助DNS 服務器:擁有主DNS 服務器的區域數據文件的副本,輔助DNS 服務器會從主DNS
服務器同步所有區域數據。
Stub:stub 區域和slave 類似,但其只複製主DNS 服務器上的NS 記錄而不像輔助DNS 服務器會複製所有區域數據。
Forward:一個forward zone 是每個域的配置轉發的主要部分。一個zone 語句中的type forward可以包括一個forward 和/或forwarders 子句,它會在區域名稱給定的域中查詢。如果沒有forwarders 語句或者forwarders 是空表,那麼這個域就不會有轉發,消除了options 語句中有關轉發的配置。
Hint:根域名服務器的初始化組指定使用線索區域hint zone,當服務器啓動時,它使用根線索
來查找根域名服務器,並找到最近的根域名服務器列表。
配置好之後,在客戶端,修改網卡的DNS地址,重啓網卡

整體分3段
options :對全局生效
zone : 針對某個區域生效

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	listen-on port 53 { any; };       #修改
	listen-on-v6 port 53 { any; };   #修改
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };   #修改

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;  #默認遞歸查詢

	dnssec-enable yes;    #祕鑰認證
	dnssec-validation yes;       #祕鑰認證
    dnssec-lookaside auto;    #新添加
	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};
zone "test.com" IN {
            type master;
            file "test.com.zone";  #這個文件需要新增,是沒有的
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置區域文件,也就是域名解析
[root@localhost181 ~]# cd /var/named/
[root@localhost181 named]# ls
chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost181 named]# cp -a named.localhost test.com.zone
[root@localhost181 named]# ls
chroot data dynamic named.ca named.empty named.localhost named.loopback slaves test.com.zone
[root@localhost181 named]# vim test.com.zone #修改區域文件

$TTL 1D
test.com.       IN SOA  dns.test.com. root.abc.cn. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
abc.cn.       NS      dns.abc.cn.
dns.abc.cn.   A       10.10.100.181
www.abc.cn.   A       10.10.100.181
www1.abc.cn. CNAME    www.abc.cn.

配置文件參數說明:
$TTL 1D ;設置有效地址解析記錄的默認緩存時間,默認爲1天也就是1D。
xuegod.cn. IN SOA dns. xuegod.cn. root. xuegod.cn.
#原來的@表示當前的域xuegod.cn.,爲方便大家記憶,我們這裏,直接寫成xuegod.cn.
#設置SOA記錄爲:dns.xuegod.cn.
#在此配置文件中寫域名時,都把根. 也要寫上。
#域管理郵箱root.xuegod.cn.0由於@有其他含義,所以用“.”代替@。
0 ;更新序列號,用於標示數據庫的變換,可以在10位以內,如果存在輔助DNS區域,建議每次更新完數據庫,手動加1.
1D ;刷新時間,從域名服務器更新該地址數據庫文件的間隔時間,默認爲1天
1H ;重試延時,從域名服務器更新地址數據庫失敗以後,等待多長時間,默認爲爲1小時
1W ; 到期,失效時間,超過該時間仍無法更新地址數據庫,則不再嘗試,默認爲一週
3H ;設置無效地址解析記錄(該數據庫中不存在的地址)默認緩存時間。設置無效記錄,最少緩存時間爲3小時
在這裏插入圖片描述

NS @ ;域名服務器記錄,用於設置當前域的DNS服務器的域名地址,
A 127.0.0.1 ; 設置域名服務器的A記錄,地址爲ipv4的地址127.0.0.1,可以設置成192.168.100.102
AAAA ::1 ; 設置域名服務器的A記錄,地址爲ipv6的地址。

資源記錄參數詳解:
1)CNAME 資源記錄
別名(CNAME)資源記錄用於爲某個主機指定一個別名
CNAME 資源記錄語法格式:
別名 CNAME 主機名
www1.abc.cn. CNAME www.abc.cn.
2)MX 資源記錄
MX(郵件交換器)資源記錄提供郵件傳遞信息。該記錄會指定區域內的郵件服務器名稱。
MX 資源記錄語法格式:
3)PTR 資源記錄
指針(PTR)資源記錄。該記錄與A 記錄相反,用於查詢IP 地址與主機名的對應關係。
PTR 資源記錄語法格式:
3.10 根區域設置及對應區域文件
根區域是一個較爲特殊的區域,記錄列出了全球根域名服務器的信息,域名通常用“.”表示,
在這裏插入圖片描述
重啓DNS服務器:

[root@abc ~]# systemctl restart named
[root@localhost178 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="1ad45945-a5ff-43d9-8d60-fc77d716fc96"
DEVICE="ens33"
ONBOOT="yes"
DNS=10.10.100.181
[root@localhost178 ~]# vim /etc/resolv.conf 

# Generated by NetworkManager
#nameserver 8.8.8.8
#nameserver 8.8.4.4
nameserver  10.10.100.181

安裝dig工具,域名解析跟蹤

[root@localhost178 ~]# yum install bind-utils -y

測試

[root@abc ~]# ping abc.cn
PING abc.cn (10.10.100.181) 56(84) bytes of data.
64 bytes from abc.cn (10.10.100.181): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=3 ttl=64 time=0.036 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=4 ttl=64 time=0.035 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=5 ttl=64 time=0.031 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=6 ttl=64 time=0.034 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=7 ttl=64 time=0.033 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=8 ttl=64 time=0.033 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=9 ttl=64 time=0.034 ms
64 bytes from abc.cn (10.10.100.181): icmp_seq=10 ttl=64 time=0.034 

使用DNS支持遞歸查詢.

[root@abc etc]#  vim  /etc/named.conf


options {
        listen-on port 53 { any ; };
        listen-on-v6 port 53 { any; };	
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;     //默認是支持遞歸查詢的

        #dnssec-enable yes;   
        #dnssec-validation yes;
        #dnssec-lookaside auto;

//但是要把這三條內容註釋了,其它內容不用改,這樣客戶端才能通過這個DNS進行遞歸查詢。把dns加密通訊功能關閉,纔可以和根服務器時行迭代查詢。

測試:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DNS1=10.10.100.181
[root@localhost ~]# service network restart

2、在另一臺主機上進行測試:

[root@localhost network-scripts]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.105) 56(84) bytes of data.
64 bytes from 61.135.169.105: icmp_seq=1 ttl=55 time=318 ms
64 bytes from 61.135.169.105: icmp_seq=3 ttl=55 time=147 ms

搭建DNS轉發服務器
家庭路由器就是一個典型的轉發服務器

[root@localhost etc]# vim  /etc/named.conf

改:
把上面添加的
zone "abc.cn"IN{
          type master;
          file "abc.cn.zone";
};

這三行內容註釋或者刪除,再添加兩行內容:
forward only ; //僅執行轉發操作 ,only:僅轉發;first:先查找本地zone,再轉發
forwarders { 8.8.8.8; }; //指定轉發查詢請求的DNS服務器列表

即:

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;    //允許遞歸查詢

        #dnssec-enable yes;  //註釋這三行
        #dnssec-validation yes;
        #dnssec-lookaside auto;

         forward  only ;   //僅執行轉發操作 ,only:僅轉發;first:先查找本地zone,再轉發
            forwarders  { 8.8.8.8; };    //指定轉發查詢請求的DNS服務器列表

        bindkeys-file "/etc/named.iscdlv.key";
};

搭建DNS主從服務器
1、搭建一個主DNS服務器A。配置內容如下:

[root@localhost etc]# vim named.conf 
        #dnssec-enable yes;
        #dnssec-validation yes;

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any ; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        #dnssec-enable yes;
        #dnssec-validation yes;
        #dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
}
zone "." IN {
        type hint;
        file "named.ca";
};

zone "abc.cn" IN {
        type master;
        file "abc.cn.zone";
        allow-transfer { 10.10.100.0/24; }; #指定允許哪個網段的從DNS服務器,可以同步主DNS服務器zone文件,不寫默認爲所有。
};
include "/etc/named.rfc1912.zones";

從DNS服務器的配置
##主從時間一定要保持一致
安裝程序:

[root@localhost ~]#yum install bind bind-chroot bind-utils   -y

bind-9.7.3-8.P3.el6.x86_64.rpm #該包爲DNS 服務的主程序包。
bind-chroot-9.7.3-8.P3.el6.x86_64.rpm # 提高安全性。
#bind-chroot是bind的一個功能,使bind可以在一個chroot 的模式下運行.也就是說,bind運行時的/(根)目錄,並不是系統真正的/(根)目錄,只是系統中的一個子目錄而已.這樣做的目的是爲了提高安全性.因爲在chroot的模式下,bind可以訪問的範圍僅限於這個子目錄的範圍裏,無法進一步提升,進入到系統的其他目錄中.
bind-utils-9.7.3-8.P3.el6.x86_64.rpm #該包爲客戶端工具,默認安裝,用於搜索域名指令

[root@localhost Packages]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]

[root@localhost etc]# vim /etc/named.conf 

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        #recursion no;
        recursion yes;

        #dnssec-enable yes;
        #dnssec-validation yes;
        #dnssec-lookaside auto;

        # forward  only ;

        # forwarders  { 192.168.3.248; };
        bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};
zone "abc.cn." IN {
        type slave;
        file "slaves/abc.cn.zone.file";
        masters { 10.10.100.181; };
};
include "/etc/named.rfc1912.zones";

注:這樣從DNS服務器就可以從主DNS服務器上獲取DNS解析記錄信息了。寫時注意slave slaves master 單詞的書寫,有的加s有的不加
重啓從DNS服務器會在:/var/named/slaves文件夾下自動創建一個文件xuegod.cn.zone.file 這個文件是從DNS服務器從主DNS服務器上獲取的數據
這樣隨便一個DNS就可以獲取主DNS服務器的解析記錄,不安全,文章的後面會講如何進行主從認證。
注:主DNS記錄中應該有兩NS記錄,一條是主DNS的NS記錄,一條是從DNS服務器的域名記錄。

測試:

[root@localhost etc]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@localhost etc]# ls /var/named/slaves/   #看到這個文件,說明成功了

zone文件中的其它記錄信息。 通過DNS做負載均衡
編輯主DNS服務器上的配置文件:

[root@localhost ~]#cd  /var/named
[root@localhost named]# vim abc.cn.zone 
$TTL 1D
abc.cn.	IN SOA	dns.abc.cn. root.abc.cn. (
					1	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
abc.cn.	NS	dns.abc.cn.
dns.abc.cn.	A  	10.10.100.181
www.abc.cn. 1  A      10.10.100.178 #DNS做簡單的負載均衡,1表示此記錄在客戶端保存1秒
www.abc.cn. 1  A       10.10.100.181
www.abc.cn. 1  A       10.10.101.1
www1.abc.cn.  CNAME   www.abc.cn.
abc.cn.        MX  10  mail.abc.cn.   #添加郵件記錄
mail.abc.cn.    A    10.10.100.181
bbs.abc.cn.     CNAME  www.abc.cn.

DNS主從密鑰認證
主服務器重啓時,會主動給從服務器發送信息,讓從服務器更新自己的記錄,通訊端口採用TCP 的53端口。
注:TSIG (主從DNS的時間必須一樣)
1、同步時間:

[root@localhost named]# vim /etc/ntp.conf  //查看ntp服務器
[root@localhost named]# ntpdate 0.rhel.pool.ntp.org #同步時間

2、生成密鑰,進行主從認證。
在主DNS服務器上操作。

[root@localhost chroot]# rpm -qf `which dnssec-keygen `
bind-9.7.3-8.P3.el6.x86_64

(1)、dnssec-keygen -a hmac-md5 -b 128 -n HOST 名字

[root@localhost etc]# cd /var/named/chroot/
[root@localhost etc]#  dnssec-keygen -a hmac-md5 -b 128 -n HOST abc  #生成一對 對稱鑰匙

-a hmac-md5:採用hmac-md5加密算法。
-b 128:生成的密鑰長度爲128位。
-n 密鑰類型。我們選擇主機類型:HOST 。
-n : ZONE | HOST | ENTITY | USER | OTHER
(DNSKEY generation defaults to ZONE)
abc #爲生成密鑰的名字

生成時速度有點慢,因爲生成密鑰需要一些隨機事件,因此我們可以通過移動鼠標或執行

[root@localhost etc]# find /    

來產生一些隨機事件。
等待大約2分鐘,查看生成的密鑰對:

[root@localhost chroot]# ls


dev  etc  Kabc.+157+36589.key  Kabc.+157+36589.private  usr  var
 
[root@localhost chroot]# cat Kabc.+157+54214.private    
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: nVk1s0B6XVB4BFfkr+vdfQ==   #這是密鑰
[root@localhost chroot]# cat Kabc.+157+54214.key 
abc. IN KEY 512 3 157 nVk1s0B6XVB4BFfkr+vdfQ==

(2)、修改主DNS配置:

[root@localhost chroot]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { any; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { any; };
	recursion yes;

	dnssec-enable yes;   #取原來註釋
	dnssec-validation yes; #取原來註釋
	dnssec-lookaside auto; #取原來註釋

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
	type hint;
	file "named.ca";
};

key abckey {           #先定義密鑰的名字
        algorithm hmac-md5;
        secret "nVk1s0B6XVB4BFfkr+vdfQ==";

 };
zone "abc.cn." IN {
	type master;
	file "abc.cn.zone";
	allow-transfer { key abckey; };      #採用密鑰進行同步
};
include "/etc/named.rfc1912.zones";

重啓服務

 [root@localhost ~]service named restart

(3)、從DNS 服務器:10.10.100.178:
#先定義密鑰
#採用密鑰進行同步

 [root@localhost chroot]# vim / etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { any; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { any; };
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};
key abckey {    #先定義密鑰名
        algorithm hmac-md5;
        secret "fN6nW73LycZuTzENAQ4ISw==";
        
};

zone "abc.cn." IN {
	type slave;
	file "slaves/abc.cn.zone.file";
	masters { 10.10.100.181 key abckey; };   #採用密鑰進行同步
};
include "/etc/named.rfc1912.zones";

重啓服務進行測試:

[root@localhost chroot]# cd
[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

從DNS服務器:

[root@localhost ~]# rm -rf /var/named /slaves/abc.cn.zone.file 
[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@localhost ~]# ls /var/named/ slaves/
abc.cn.zone.file

測試工具:
nslookup 測試域名解析
(1)非交互式模式
語法: nslookup 域名或IP 地址
例:

root@localhost chroot]# nslookup www.abc.cn
Server:		8.8.8.8
Address:	8.8.8.8#53
	
Non-authoritative answer:
Name:	www.abc.cn
Address: 112.124.185.97

(2)交互模式

[root@localhost ~]# nslookup 
> www.g.cn
Server:		10.10.100.181
Address:	10.10.100.181#53

Non-authoritative answer:
Name:	www.g.cn
Address: 203.208.49.178
Name:	www.g.cn
Address: 203.208.49.179
Name:	www.g.cn
Address: 203.208.49.180
Name:	www.g.cn
Address: 203.208.49.176
Name:	www.g.cn
Address: 203.208.49.177

dig命令:
linux下使用dig命令來查詢域名信息,當然也可以使用nslookup,但dig比nslookup更方便更強大一些。
安裝:

[root@localhost ~]# rpm -qf `which dig`
bind-utils-9.7.3-8.P3.el6.x86_64

例:
使用114.114.114.114
DNS服務器解析www.abc.cn

[root@localhost ~]# dig @114.114.114.114 www.abc.cn

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @114.114.114.114 www.abc.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23192
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.abc.cn.			IN	A

;; ANSWER SECTION:
www.abc.cn.		30	IN	A	112.124.185.97

;; Query time: 19 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Mar 11 21:02:29 2015
;; MSG SIZE  rcvd: 47
補充:雙線智能DNS:
智能DNS(Bind-view):
智能DNS的原理很簡單:在用戶解析一個域名的時候,判斷一下用戶 的IP,然後跟DNS服務器內部的IP表匹配一下,看看用戶是電信還是網通用戶,然後給用戶返回對應的IP地址。目前的域名服務運營商不提供智能DNS服務,所以必須自行架設DNS服務或者使用網上免費的智能DNS服務,如DNSPOD.
https://www.dnspod.cn/

那我們爲什麼要使用智能DNS服務器:1、因爲不同ISP廠商有競爭,使得我們成爲受害者,細心的網友一定會發現,南方的網友訪問北方的網站一般都比較慢,北方的網友訪問南方的網站也很慢。這些都是廠商之間的競爭導致的。

http://gupt12.blog.51cto.com/7651206/1263525

http://linuxfun.me/?p=1023

補充:
dnsmasq
配置簡單,功能強大。既能配置DHCP,又能配置DNS
http://www.360doc.com/content/14/0913/13/8314158_409140713.shtml
http://www.cnblogs.com/weifeng1463/p/6796037.html
http://debugo.com/dnsmasq/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章