4.1 基本DNS服務搭建

DNS原理

    DNS,是Domain Name System的縮寫,翻譯爲域名系統,是互聯網上作爲域名和IP地址相互映射的一個分佈式數據庫。DNS能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。 

域名

    根域就是所謂的”.“,其實我們的網址 www.baidu.com 在配置當中應該是 www.baidu.com. (最後有一點),一般我們在瀏覽器裏輸入時會省略後面的點,而這也已經成爲了習慣。根域服務器我們知道有13臺。

    域名只是邏輯概念,並不代表計算機所在的物理地點。據2006年12月統計,現在頂級域名TLD(Top Level Domain)已有265個,分爲三大類:

    (1)國家頂級域名nTLD:採用ISO3166的規定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記爲ccTLD(cc表示國家代碼contry-code)。
    (2)通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業),net(網絡服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。

    (3)基礎結構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用於反向域名解析,因此稱爲反向域名。


域名服務器

    能提供域名解析的服務器,上面的記錄類型可以是A(address)記錄,NS記錄(name server),MX(mail),CNAME等。

SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
A:internet Address,作用,FQDN --> IP
AAAA:FQDN --> IPv6
PTR:PoinTeR,IP --> FQDN
NS:Name Server,專用於標明當前區域的DNS服務器
CNAME:Canonical Name,別名記錄

MX: Mail eXchanger,郵件交換器

DNS解析過程

    DNS同時佔用 TCP 和UDP 的53端口,DNS在進行區域傳輸的時候使用TCP協議,其它時候則使用UDP協議。

    區域傳送時使用TCP,主要有一下兩點考慮: 

1.輔域名服務器會定時(一般時3小時)向主域名服務器進行查詢以便了解數據是否有變動。如有變動,則會執行一次區域傳送,進行數據同步。區域傳送將使用TCP而不是UDP,因爲數據同步傳送的數據量比一個請求和應答的數據量要多得多。 

2.TCP是一種可靠的連接,保證了數據的準確性。 

    域名解析時使用UDP協議: 

    客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。不用經過TCP三次握手,這樣DNS服務器負載更低,響應更快。雖然從理論上說,客戶端也可以指定向DNS服務器查詢的時候使用TCP,但事實上,很多DNS服務器進行配置的時候,僅支持UDP查詢包。

    遞歸查詢:

主機向本地域名服務器的查詢一般都是採用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那麼本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。因此,遞歸查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。

    迭代查詢:

本地域名服務器向根域名服務器的查詢的迭代查詢。迭代查詢的特點:當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地服務器:“你下一步應當向哪一個域名服務器進行查詢”。然後讓本地服務器進行後續的查詢。根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器,讓本地域名服務器再向頂級域名服務器查詢。頂級域名服務器在收到本地域名服務器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地服務器下一步應當向哪一個權限域名服務器進行查詢。最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機。

一次完整的查詢請求經過的流程:

Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 頂級域名DNS-->二級域名DNS…

DNS服務

使用 bind 搭建 DNS 服務

[root@CentOS74 ~]# yum install bind
查看 bind 的主配置文件
[root@CentOS74 ~]# cat /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.
//
// 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 { localhost; };     #監聽位置,默認爲當前主機,建議修改爲localhost
	listen-on-v6 port 53 { ::1; };
	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     { localhost;any; };     #允許那些主機查看DNS數據庫
	allow-transfer  { 192.168.30.174; };    #允許那些主機拉取所有DNS數據庫

	/* 
	 - 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;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.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";
};

include "/etc/named.rfc1912.zones";     #區域解析庫配置文件
include "/etc/named.root.key";          

    任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的IP地址上。

創建DNS數據庫

    在 /etc/named.rfc1912.zones 中定義一個新的區域解析庫

zone "jiangbowen.com.cn" IN {    #域名爲jangbowen.com.cn
	type master;      #類型爲主服務器
	file "jiangbowen.com.cn.zone";   #數據庫文件是/var/named/jiangbowen.com.cn.zone.
};
    在 /var/named 下創建區域解析數據庫文件
[root@CentOS74 ~]# cat /var/named/jiangbowen.com.cn.zone 
$TTL 86400	; 1 day     #TTL爲緩存保留的時間
@	IN SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. (   #@爲當前區域
				7          ; serial               #序列號,用於同步數據庫
				86400      ; refresh (1 day)      #刷新時間,指定從服務器多久查詢一次DNS記錄是否應該更新
				3600       ; retry (1 hour)       #重試間隔,當從服務器請求查詢DNS記錄失敗後多久後再次查詢
				604800     ; expire (1 week)      #過期時間,定義從服務器多久時間無法更新DNS記錄就會失效
				10800      ; minimum (3 hours)    #否定答案的緩存時間
				)
			NS	master.jiangbowen.com.cn.
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
websver			A	192.168.30.75     #當一個域名對應多個IP地址時,將會輪換響應請求。
			A	192.168.30.174
www			CNAME	websver   

    語法:域名 [TTL] IN 記錄類型 記錄值

域名、IN 都可以向上一行繼承,TTL 值可以全局繼承。

同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應;

同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機。

[root@CentOS69 ~]# host www.jiangbowen.com.cn   #查看www.jiangbowen.com.cn的DNS記錄
www.jiangbowen.com.cn is an alias for websver.jiangbowen.com.cn.    #此域名是websver.jiangbowen.com.cn的別名
websver.jiangbowen.com.cn has address 192.168.30.75                 #對應兩個IP地址
websver.jiangbowen.com.cn has address 192.168.30.174
[root@CentOS69 ~]# ping www.jiangbowen.com.cn     #通過ping命令請求後,發現兩個IP輪流進行響應。
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.75) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.75) 56(84) bytes of data.
[root@CentOS69 ~]# host master.jiangbowen.com.cn         #192.168.30.74同時爲兩個域名的IP地址
master.jiangbowen.com.cn has address 192.168.30.74
[root@CentOS69 ~]# host mail1.jiangbowen.com.cn
mail1.jiangbowen.com.cn has address 192.168.30.74

實現反向解析

    在 /etc/named.rfc1912.zones 中定義反向區域解析庫

zone "30.168.192.in-addr.arpa" IN {    #網絡地址反寫.in-addr.arpa.,最後一個.可以省略
	type master;
	file "192.168.30.zone";
};

    在 /var/named 下創建反向區域解析數據庫文件

[root@CentOS74 ~]# cat /var/named/192.168.30.zone 
$TTL 1D
@ IN SOA dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. ( 1 1D 1H 1W 3H )
	NS dns1.jiangbowen.com.cn.
dns1.jiangbowen.com.cn A 192.168.30.74
75	PTR websver.jiangbowen.com.cn.
74	PTR mail.jiangbowen.com.cn.

    查看反向解析結果

[root@CentOS69 ~]# host 192.168.30.74
74.30.168.192.in-addr.arpa domain name pointer mail.jiangbowen.com.cn.
[root@CentOS69 ~]# host 192.168.30.75
75.30.168.192.in-addr.arpa domain name pointer websver.jiangbowen.com.cn.

允許遠程動態更新

    在 /etc/named.rfc1912.zones 或者 /etc/named.conf 中定義是否允許遠程動態更新

zone "jiangbowen.com.cn" IN {
	type master;
	file "jiangbowen.com.cn.zone";
	allow-update { 192.168.30.75; };    #允許192.168.30.75遠程動態更新DNS記錄
};

    爲 /var/named 目錄添加所屬組的寫權限

[root@CentOS74 ~]# chmod 770 /var/named/
[root@CentOS74 ~]# ll -d /var/named/
drwxrwx---. 5 root named 180 Jun 23 11:12 /var/named/

    因爲遠程動態更新 DNS 記錄時 named 進程會在 /var/named 目錄中新建文件,所以需要賦予 named 組對 /var/named 目錄擁有寫權限。

    由遠程向 192.168.30.74 的區域數據庫中添加新的 DNS 記錄

[root@CentOS75 ~]#⮀⮀nsupdate
> server 192.168.30.74
> zone jiangbowen.com.cn
> update add db.jiangbowen.com.cn 86400 IN A 1.1.1.1
> send
> quit

    查看 DNS 記錄

[root@CentOS69 ~]# host db.jiangbowen.com.cn
db.jiangbowen.com.cn has address 1.1.1.1

    查看新建的數據庫文件

[root@CentOS74 ~]# ll /var/named/jiangbowen.com.cn.zone*
-rw-r--r-- 1 named named  636 Jun 23 10:48 /var/named/jiangbowen.com.cn.zone
-rw-r--r-- 1 named named 1024 Jun 23 15:47 /var/named/jiangbowen.com.cn.zone.jnl    #使用nsupdate後產生的文件
[root@CentOS74 ~]# named-journalprint /var/named/jiangbowen.com.cn.zone.jnl   #使用named-journalprint工具查看
del jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 7 86400 3600 604800 10800
add jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 8 86400 3600 604800 10800
add db.jiangbowen.com.cn.	86400	IN	A	1.1.1.1
del jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 8 86400 3600 604800 10800
del db.jiangbowen.com.cn.	86400	IN	A	1.1.1.1
add jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 9 86400 3600 604800 10800
    刪除 DNS 記錄
[root@CentOS75 ~]# nsupdate
> server 192.168.30.74
> zone jiangbowen.com.cn
> update delete db.jiangbowen.com.cn 86400 IN A 1.1.1.1
> send
> quit

實現從 DNS 服務器

    在從服務器上聲明區域解析數據庫

zone "jiangbowen.com.cn" IN {
	type slave;                    #聲明自己時從服務器
	masters { 192.168.30.74; };    #定義主服務器是誰
	file "slaves/jiangbowen.com.cn.slave.zone";   #區域數據庫存放路徑
};

    使用 rndc reload 重載配置文件後,/var/named/slaves/ 中會自動生成一個區域數據庫文件

[root@CentOS174 ~]# ll /var/named/slaves/jiangbowen.com.cn.slave.zone
-rw-r--r-- 1 named named 856 Jun 23 15:54 /var/named/slaves/jiangbowen.com.cn.slave.zone    #注意時間

    到此實現了從服務器向主服務器拉取區域數據庫,下面實現主服務器向從服務器推送區域數據庫。

    在主服務器的區域數據庫中聲明從服務器

$ORIGIN .
$TTL 86400	; 1 day
jiangbowen.com.cn	IN SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. (
				11          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.jiangbowen.com.cn.
			NS	slave.jiangbowen.com.cn.     #聲明從服務器
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
slave			A	192.168.30.174    #定義從服務器的IP地址
websver			A	192.168.30.75
			A	192.168.30.174
www			CNAME	websver

    在主服務器上更新區域數據庫,注意修改序列號

[root@CentOS174 ~]# ll /var/named/slaves/jiangbowen.com.cn.slave.zone
-rw-r--r-- 1 named named 802 Jun 23 16:02 /var/named/slaves/jiangbowen.com.cn.slave.zone   #時間更新爲16:02

    爲了安全,建議在主服務器的主配置文件中定義

allow-transfer  { 192.168.30.174; };

    只允許指定主機拉取區域數據庫,其他主機只允許指定域名查詢。

實現泛 DNS

    泛 DNS 就是在區域數據庫中增加對應的 DNS 記錄,實現域名對用戶的容錯性。

			A	192.168.30.75     #當只查找域名,而沒有指定主機時,則解析爲192.168.30.75
*			A	192.168.30.174    #當查找的域名無法解析時,則解析爲192.168.30.174

    批量指定 DNS 記錄

$GENERATE 1-100 server$ A 	192.168.30.$

    測試泛 DNS

[root@CentOS69 ~]# host server1.jiangbowen.com.cn
server1.jiangbowen.com.cn has address 192.168.30.1
[root@CentOS69 ~]# host server2.jiangbowen.com.cn
server2.jiangbowen.com.cn has address 192.168.30.2
[root@CentOS69 ~]# host server99.jiangbowen.com.cn
server99.jiangbowen.com.cn has address 192.168.30.99
[root@CentOS69 ~]# host jiangbowen.com.cn
jiangbowen.com.cn has address 192.168.30.75
jiangbowen.com.cn mail is handled by 10 mail1.jiangbowen.com.cn.
jiangbowen.com.cn mail is handled by 20 mail2.jiangbowen.com.cn.
[root@CentOS69 ~]# host aaaa.jiangbowen.com.cn
aaaa.jiangbowen.com.cn has address 192.168.30.174

實現子域授權

    當子域需要獨立管理時,就需要子域授權

    修改父域服務器 /var/named/ 中的區域數據庫

[root@CentOS74 ~]#⮀⮀cat /var/named/jiangbowen.com.cn.zone 
$TTL 86400	; 1 day
@		IN	SOA	master.jiangbowen.com.cn. admin.jiangbowen.com.cn. (
				13          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.jiangbowen.com.cn.
			NS	slave.jiangbowen.com.cn.
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
			A 	192.168.30.75
*			A	192.168.30.174
$GENERATE	1-100 	server$		A 	192.168.30.$
ftp			NS	dns              #聲明ftp域由dns服務器託管
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
slave			A	192.168.30.174
dns			A	192.168.30.75    #定義dns服務器的地址
websver			A	192.168.30.75
			A	192.168.30.174
www			CNAME	websver

    在子域服務器上配置子域 DNS 

zone "ftp.jiangbowen.com.cn" IN {
	type master;
	file "ftp.jangbowen.com.cn.zone";
};
[root@CentOS75 named]# cat /var/named/ftp.jiangbowen.com.cn.zone 
$TTL 1D
@	IN SOA	master.ftp.jiangbowen.com.cn. admin.ftp.jiangbowen.com.cn. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	master
websver	A	192.168.30.75
master	A	192.168.30.75
www	CNAME	websver

    然後將雙方的主配置文件中的加密選項關閉,否則子域無法向上級域通信。

dnssec-enable no;
dnssec-validation no;

    測試子域DNS服務器,向父域 DNS 服務器請求子域地址

[root@CentOS69 ~]# dig www.ftp.jiangbowen.com.cn @192.168.30.74

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.ftp.jiangbowen.com.cn @192.168.30.74
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36724
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.ftp.jiangbowen.com.cn.	IN	A

;; ANSWER SECTION:
www.ftp.jiangbowen.com.cn. 86223 IN	CNAME	websver.ftp.jiangbowen.com.cn.
websver.ftp.jiangbowen.com.cn. 86223 IN	A	192.168.30.75

;; AUTHORITY SECTION:
ftp.jiangbowen.com.cn.	86223	IN	NS	master.ftp.jiangbowen.com.cn.

;; ADDITIONAL SECTION:
master.ftp.jiangbowen.com.cn. 86325 IN	A	192.168.30.75

;; Query time: 1 msec
;; SERVER: 192.168.30.74#53(192.168.30.74)
;; WHEN: Sat Jun 23 17:24:04 2018
;; MSG SIZE  rcvd: 118

[root@CentOS69 ~]# host www.ftp.jiangbowen.com.cn 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases: 

www.ftp.jiangbowen.com.cn is an alias for websver.ftp.jiangbowen.com.cn.
websver.ftp.jiangbowen.com.cn has address 192.168.30.75





發佈了75 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章