什么是 DNS ?
DNS (Domain Name System) 用于將域名解析為 ip 地址, 同時(shí)也可以將 ip 地址解析為域名(反向解析)。
好處
- 對于用戶,不再需要記住一連串?dāng)?shù)字(192.168.1.1)
- 對于管理員或听,可以更換IP地址,而不影響名稱解析
將域名解析為 IP 地址的過程
當(dāng)用戶想要解析 www.google.com
時(shí),系統(tǒng)會依次執(zhí)行以下步驟脚猾,直到得到結(jié)果:
- 查看本機(jī)的
host
文件(Windows:C:\Windows\System32\drivers\etc\host
Linux:/etc/hosts
) - 到系統(tǒng)設(shè)置的DNS查詢 IP 地址(8.8.8.8)
- 如果該DNS是
google.com
的權(quán)威名稱服務(wù)器,讀取 Zone 信息并返回www.google.com
的IP地址 - 如果該DNS是非權(quán)威名稱服務(wù)器砚哗,則檢查緩存龙助;如果緩存中沒有
google.com
和com
,則前往根名稱服務(wù)器.
查詢com
的地址蛛芥,再遞歸查詢www.google.com
的地址提鸟,再將結(jié)果緩存到內(nèi)存一段時(shí)間
- 如果該DNS是
DNS 類型
DNS (Domain Name System) 通常被成為名稱服務(wù)器 Name Server,有兩種類型:
-
authoritative name sever
權(quán)威名稱服務(wù)器仅淑,可以再分為兩種類型:-
primary/master name server
主名稱服務(wù)器 -
secondary/salve name server
次名稱服務(wù)器
-
-
recursive name server
遞歸名稱服務(wù)器
權(quán)威服務(wù)器:Zone 文件保存在該服務(wù)器(域名的擁有者)
遞歸名稱服務(wù)器:遞歸地去其他權(quán)威服務(wù)器中查詢域名信息(提供名稱解析服務(wù))
將權(quán)威和遞歸服務(wù)器部署在不同物理服務(wù)器上
- 權(quán)威服務(wù)器需要保持24小時(shí)在線称勋。
- 遞歸服務(wù)器解析域名時(shí)需要較長時(shí)間,需要限制客戶端數(shù)量涯竟,以防御 DDOS 攻擊赡鲜。
Zone
Zone
定義了一個(gè)域名下 (example.com
) 主機(jī)和對應(yīng)IP地址的信息(由一行資源記錄定義)
Zone 信息保存在主名稱服務(wù)器的 Zone 文件中,次名稱服務(wù)器會從主名稱服務(wù)器獲取 Zone 文件
BIND
BIND (Berkeley Internet Name Domain) 用來搭建名稱服務(wù)器庐船,它包含:
-
named
名稱服務(wù)器 -
rndc
管理工具 -
dig
,nslookup
測試工具
Empty Zones
BIND 會為私有IP地址(由 RFC 1918 定義)創(chuàng)建一系列 Empty Zones银酬,阻止遞歸名稱服務(wù)器發(fā)送無效的名稱查詢到互聯(lián)網(wǎng)并立即返回 NXDOMAIN, 而不是SERVFAIL
搭建 DNS
準(zhǔn)備
系統(tǒng): CentOS 7
named 配置文件:/etc/named.conf
(全局配置), /etc/named/
(存放輔助配置文件)
Zone 文件目錄:/var/named/
Zone 文件模板: /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost
IP地址配置:(為DNS分配一個(gè)靜態(tài)IP地址)
防火墻配置
放行端口 53 (一般使用 UDP)
備份配置文件
# 安裝 BIND
~ sudo yum -y install bind bind-utils
# 備份配置文件
~ cp /etc/named.conf /etc/named.conf~
# 復(fù)制 Zone 模板文件
~ cp /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost /var/named/
為 example.com
搭建權(quán)威名稱服務(wù)器
需求
DNS 服務(wù)器: dns - 192.168.1.200
主機(jī)1 :host1 - 192.168.1.1
Web 服務(wù)器: serve - 192.168.1.80
別名: www - server1
全局配置 named.conf
# 創(chuàng)建輔助文件 example.com
~ sudo vim /etc/named/example.com
#下面的 "example.com" 作為變量名 $ORIGIN 的值, example.com.
~ sudo cat /etc/named/example.com
zone "example.com" IN {
type master;
file "example.com.zone";
};
# 修改權(quán)限及擁有者
~ sudo chmod 640 /etc/named/example.com
~ sudo chown root:named /etc/named/example.com
~ sudo ls -l /etc/named/example.com
-rw-r-----. 1 root named 75 May 6 02:03 /etc/named/example.com
Zone 文件
# 創(chuàng)建 Zone 文件
~ sudo vim /var/named/example.com.zone
~ sudo cat /var/named/example.com.zone
$TTL 1D
@ IN SOA example.com. root.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.com.
A 192.168.1.200
;
;
dns IN A 192.168.1.200
host1 IN A 192.168.1.1
server1 IN A 192.168.1.80
www IN CNAME server1
# 修改權(quán)限和擁有者
~ sudo chmod 640 /var/named/example.com.zone
~ sudo chown root:named /var/named/example.com.zone
~ sudo ls -l /var/named/example.com.zone
-rw-r-----. 1 root named 273 May 6 02:50 /var/named/example.com.zone
# 啟動 named 或者 重新讀取文件
~ sudo systemctl start named
~ sudo systemctl reload named
~ sudo systemctl status named -l
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2018-05-05 22:53:43 CST; 4h 5min ago
Process: 3182 ExecReload=/bin/sh -c /usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Process: 1549 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1546 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1552 (named)
CGroup: /system.slice/named.service
└─1552 /usr/sbin/named -u named -c /etc/named.conf
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: 9.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: A.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: B.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: reloading configuration succeeded
May 06 02:59:19 localhost.localdomain named[1552]: reloading zones succeeded
May 06 02:59:19 localhost.localdomain named[1552]: zone example.com/IN: loaded serial 0
May 06 02:59:19 localhost.localdomain named[1552]: all zones loaded
May 06 02:59:19 localhost.localdomain named[1552]: running
May 06 02:59:19 localhost.localdomain named[1552]: zone example.com/IN: sending notifies (serial 0