Linux之DNS(詳解)
什麼是DNS?
DNS 是域名系統 (Domain Name System) 的縮寫,它是由解析器和域名伺服器組成的。域名伺服器是指儲存有該網路中所有主機的域名和對應IP地址,並具有將域名轉換為IP地址功能的伺服器。其中域名必須對應一個IP地址,而IP地址不一定有域名。域名系統採用類似目錄樹的等級結構。域名伺服器為客戶機/伺服器模式中的伺服器方,它主要有兩種形式:主伺服器和轉發伺服器。將域名對映為IP地址的過程就稱為“域名解析”。在Internet上域名與IP地址之間是一對一(或者多對一)的,域名雖然便於人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析伺服器來完成,DNS就是進行域名解析的伺服器。 DNS 命名用於 Internet 等 TCP/IP 網路中,通過使用者友好的名稱查詢計算機和服務。當用戶在應用程式中輸入 DNS 名稱時,DNS 服務可以將此名稱解析為與之相關的其他資訊,如 IP 地址。因為,你在上網時輸入的網址,是通過域名解析系統解析找到了相對應的IP地址,這樣才能上網。其實,域名的最終指向是IP。通常情況下我們之用到了DNS伺服器的正向解析功能,而DNS還有方向解析功能,就是把IP地址解析成主機名。
DNS授權管理機制:
最大域就是根域,用.表示接下來就是一級域,也就是頂級域。注:根域和頂級域是特殊的,不能由個人指定。
然後就是二級域三級域等,直到最後的主機(這些是可以由公司、組織、個人申請使用的)
通過上邊例項我想大家大致明白了DNS的工作方式,但是又有一個問題出現了。
上述例項過程中,主機具體是怎麼問到www.baidu.com的地址呢?
這裡有兩種方式:
方式1(遞迴):主機問根域->根域問一級域->一級域問二級域->二級域找到www.baidu.com把資訊返回給一級域->一級域再把資訊返回給根域->根域再把資訊返回給主機
方:式2(迭代):主機問根域,根域說你去找一級域
主機問一級域,一級域說你去找二級域
主機問二級域,二級域把www.baidu.com的資訊告訴主機
到底是由哪種方式實現的呢?
實際上DNS是由這來那個種方式結合實現的。
【DNS具體實現過程】:事實上我們的主機是不能跟根域直接相連的,在解析過程中我們的主機事先是需要根域在哪的,主機在尋找根域的過程是用的遞迴的方式,而在找到根域後尋找目標主機時使用的是迭代方式。
注:如果在根域尋找目標主機的過程中使用的遞迴的方式的話,每次查詢到後還要再次反饋給根域那麼勢必會增加根域伺服器的負擔,所以為了減少根域伺服器的負擔,在查詢目標主機的過程中使用的是迭代的方式。
那麼我們想要訪問一臺主機的話每次都這樣去解析是很麻煩的一件事,而且勢必會佔用我們的頻寬和時間。
有沒有一種辦法讓我們第一次解析以後訪問都不用再解析呢?
這就需要我們計算機中的快取了,快取的功能就是為了減輕DNS伺服器的壓力,第一次解析完成後就會把這條記錄記憶在快取中,下次訪問的時候就會讀取快取中的記錄,而不用去找DNS伺服器解析。
同樣的,DNS伺服器中也有快取,目的就是為了讓一臺主機訪問後其他主機訪問的時候不在去找根域解析。大大減輕了伺服器的負擔。
Linux 下的DNS服務的工具:bind
其服務指令碼為:/etc/rc.d/init.d/named
其主配置檔案為:/etc/named.conf /etc/named.rfc1912.zones
其區域解析庫檔案:/var/named/ZONE_NAME.zone
DNS中的名稱與對應的主機名不要求是一樣的,一個名稱可以對應多個IP,一個IP也可以對應多個名稱。
反向域:.in-addr.arpa(反向解析時使用)
域:domain (邏輯概念)
區域:zone (物理概念)
【區域解析庫】每一行一個資源記錄rr(resource record)
資源記錄:有型別概念,用於標記此記錄解析的屬性
資源記錄型別:
SOA:起始授權記錄,一個區域檔案只能有一個
NS : name server 標記誰是解析伺服器,可有多個
MX: 標記誰是域內的郵件伺服器,可有多個(有優先順序0-99)
A : 主機名->IP的對映關係
PTR:IP->主機名的對映關係
AAAA:主機名->IPV6的對映關係
CNAME:正式名稱 如:A CNAME B :A是B的別名
注:A和PTR不能同時出現,一個解析庫要麼是正向解析庫要麼是反向解析庫。
【權威伺服器】:負責某域內全部主機的DNS伺服器
【非權威應答】:通過本地快取訪問主機
下面我們用實驗說明配置DNS模擬根實現,子域委派,以及主輔同步。
六臺機器,分別模擬 根, .com,magedu.com,slave,client,caching
關係如圖所示:
修改所有機器的 /etc/named.conf配置檔案如圖
options {
listen-on port 53 { any; };
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 { any; };
recursion no;
dnssec-enable no;
dnssec-validation no;
除根外所有機器的 /var/named/named.ca 檔案的主根伺服器ip地址指向我們設定的根的idi地址如圖所示:
; formerly NS.INTERNIC.NET
;
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 192.168.83.129
~
~
接下來我們配置根root
a. name.conf中刪除name.ca的專案
b. rfc1912檔案
zone "." IN {
type master;
file "root.zone";
};
c. root.zone
$TTL 1D
@ IN SOA ns. admin. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.
ns. A rootip
com. NS ns.com.
ns.com. A .comip
d.啟動named
配置com
a. rfc1912檔案
zone "com" IN {
type master;
file "com.zone";
};
b. com.zone
$TTL 1D
@ IN SOA ns.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.com.
ns A 192.168.153.8
magedu.com. NS ns1.magedu.com.
magedu.com. NS ns2.magedu.com.
ns1.magedu.com. A 主IP
ns2.magedu.com. A 從IP
c.啟動named
配置主magedu.com
a. rfc1912檔案
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
};
b. magedu.com.zone
$TTL 1D
@ IN SOA ns1.magedu.com. rname.invalid. (
2018091301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.magedu.com.
NS ns2.magedu.com.
ns1 A 主IP
ns2 A 從IP
www A 1.1.1.1
ftp A 2.2.2.2
* A 10.10.10.10
c.啟動named
配置從magedu.com
a. rfc1912檔案
zone "magedu.com" IN {
type slave;
masters { 主IP; };
file "slaves/MAGEDU.COM.ZONE";
};
b. 啟動named
開始測試:
關閉所有機器防火牆以及selinux
[[email protected] ~]# nslookup
www.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: www.magedu.com
Address: 1.1.1.1
> ftp.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: ftp.magedu.com
Address: 2.2.2.2
> hha.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: hha.magedu.com
Address: 10.10.10.10
測試主從
在主上開啟防火牆限制:
[[email protected] ~]# iptables -A INPUT -p tcp --dport 53 -j REJECT
去client測試
[email protected] ~]# nslookup
www.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: www.magedu.com
Address: 1.1.1.1
仍有結果所有從起作用了,
接下來把主從都給開啟防火牆
[[email protected] ~]# nslookup www.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
** server can't find www.magedu.com: NXDOMAIN
關閉防火牆接下來我們不在caching裡清快取,之前訪問過的,在開啟防火牆之後仍然可以訪問,說明快取裡有記錄,沒訪問過的則不能訪問。說明快取優先於本地查詢。
[[email protected] ~]# nslookup hsh.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: hsh.magedu.com
Address: 10.10.10.10
[[email protected] ~]# nslookup hsh.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
Non-authoritative answer:
Name: hsh.magedu.com
Address: 10.10.10.10
[[email protected] ~]# nslookup hh.magedu.com
Server: 192.168.83.132
Address: 192.168.83.132#53
** server can't find hh.magedu.com: NXDOMAIN