章節簡述: linux
本章講解了DNS域名解析服務的原理以及做用,介紹了域名查詢功能中正向解析與反向解析的做用,並經過實驗的方式演示瞭如何在DNS主服務器上部署正、反解析工做模式,以便讓你們深入體會到DNS域名查詢的便利以及強大。git
本章還介紹瞭如何部署DNS從服務器以及DNS緩存服務器來提高用戶的域名查詢體驗,以及如何使用chroot牢籠機制插件來保障bind服務程序的可靠性,並向你們演示如何在主服務器與從服務器之間部署TSIG密鑰加密功能,來進一步保障迭代查詢中數據的安全性。最後,本章還從實戰層面講解了DNS分離解析技術,讓來自不一樣國家、不一樣地區的用戶都能得到最優的網站訪問體驗。算法
相信你們在學完本章內容以後,必定會對bind服務程序有更深刻的瞭解和認識,並能深入地體會到做爲互聯網基礎設施中重要一環的DNS域名解析服務,在互聯網中所承擔的重要角色和發揮的重要做用。數據庫
本章目錄結構vim
13.1 DNS域名解析服務
相較於由數字構成的IP地址,域名更容易被理解和記憶,因此咱們一般更習慣經過域名的方式來訪問網絡中的資源。可是,網絡中的計算機之間只能基於IP地址來相互識別對方的身份,並且要想在互聯網中傳輸數據,也必須基於外網的IP地址來完成。瀏覽器
爲了下降用戶訪問網絡資源的門檻,DNS(Domain Name System,域名系統)技術應運而生。這是一項用於管理和解析域名與IP地址對應關係的技術,簡單來講,就是可以接受用戶輸入的域名或IP地址,而後自動查找與之匹配(或者說具備映射關係)的IP地址或域名,即將域名解析爲IP地址(正向解析),或將IP地址解析爲域名(反向解析)。這樣一來,咱們只須要在瀏覽器中輸入域名就能打開想要訪問的網站了。DNS域名解析技術的正向解析也是咱們最常使用的一種工做模式。緩存
鑑於互聯網中的域名和IP地址對應關係數據庫太過龐大,DNS域名解析服務採用了相似目錄樹的層次結構來記錄域名與IP地址之間的對應關係,從而造成了一個分佈式的數據庫系統,如圖13-1所示。安全
圖13-1 DNS域名解析服務採用的目錄樹層次結構服務器
域名後綴通常分爲國際域名和國內域名。原則上來說,域名後綴都有嚴格的定義,但在實際使用時能夠沒必要嚴格遵照。目前最多見的域名後綴有.com(商業組織)、.org(非營利組織)、.gov(政府部門)、.net(網絡服務商)、.edu(教研機構)、.pub(公共大衆)、.cn(中國國家頂級域名)等。
當今世界的信息化程度愈來愈高,大數據、雲計算、物聯網、人工智能等新技術不斷涌現,全球網民的數量聽說也超過了35億,並且每一年還在以10%的速度迅速增加。這些因素致使互聯網中的域名數量進一步激增,被訪問的頻率也進一步加大。假設全球網民每人天天只訪問一個網站域名,並且只訪問一次,也會產生35億次的查詢請求,如此龐大的請求數量確定沒法被某一臺服務器所有處理掉。DNS技術做爲互聯網基礎設施中重要的一環,爲了爲網民提供不間斷、穩定且快速的域名查詢服務,保證互聯網的正常運轉,提供了下面三種類型的服務器。
主服務器:在特定區域內具備惟一性,負責維護該區域內的域名與IP地址之間的對應關係。
從服務器:從主服務器中得到域名與IP地址的對應關係並進行維護,以防主服務器宕機等狀況。
緩存服務器:經過向其餘域名解析服務器查詢得到域名與IP地址的對應關係,並將常常查詢的域名信息保存到服務器本地,以此來提升重複查詢時的效率。
簡單來講,主服務器是用於管理域名和IP地址對應關係的真正服務器,從服務器幫助主服務器「打下手」,分散部署在各個國家、省市或地區,以便讓用戶就近查詢域名,從而減輕主服務器的負載壓力。緩存服務器不太經常使用,通常部署在企業內網的網關位置,用於加速用戶的域名查詢請求。
DNS域名解析服務採用分佈式的數據結構來存放海量的「區域數據」信息,在執行用戶發起的域名查詢請求時,具備遞歸查詢和迭代查詢兩種方式。所謂遞歸查詢,是指DNS服務器在收到用戶發起的請求時,必須向用戶返回一個準確的查詢結果。若是DNS服務器本地沒有存儲與之對應的信息,則該服務器須要詢問其餘服務器,並將返回的查詢結果提交給用戶。而迭代查詢則是指,DNS服務器在收到用戶發起的請求時,並不直接回複查詢結果,而是告訴另外一臺DNS服務器的地址,用戶再向這臺DNS服務器提交請求,這樣依次反覆,直到返回查詢結果。
因而可知,當用戶向就近的一臺DNS服務器發起對某個域名的查詢請求以後(這裏以www.linuxprobe.com爲例),其查詢流程大體如圖13-2所示。
圖13-2 向DNS服務器發起域名查詢請求的流程
當用戶向網絡指定的DNS服務器發起一個域名請求時,一般狀況下會有本地由此DNS服務器向上級的DNS服務器發送迭代查詢請求;若是該DNS服務器沒有要查詢的信息,則會進一步向上級DNS服務器發送迭代查詢請求,直到得到準確的查詢結果爲止。其中最高級、最權威的根DNS服務器總共有13臺,分佈在世界各地,其管理單位、具體的地理位置,以及IP地址如表13-1所示。
表13-1 13臺根DNS服務器的具體信息
名稱 | 管理單位 | 地理位置 | IP地址 |
A | INTERNIC.NET | 美國-弗吉尼亞州 | 198.41.0.4 |
B | 美國信息科學研究所 | 美國-加利弗尼亞州 | 128.9.0.107 |
C | PSINet公司 | 美國-弗吉尼亞州 | 192.33.4.12 |
D | 馬里蘭大學 | 美國-馬里蘭州 | 128.8.10.90 |
E | 美國航空航天管理局 | 美國加利弗尼亞州 | 192.203.230.10 |
F | 因特網軟件聯盟 | 美國加利弗尼亞州 | 192.5.5.241 |
G | 美國國防部網絡信息中心 | 美國弗吉尼亞州 | 192.112.36.4 |
H | 美國陸軍研究所 | 美國-馬里蘭州 | 128.63.2.53 |
I | Autonomica公司 | 瑞典-斯德哥爾摩 | 192.36.148.17 |
J | VeriSign公司 | 美國-弗吉尼亞州 | 192.58.128.30 |
K | RIPE NCC | 英國-倫敦 | 193.0.14.129 |
L | IANA | 美國-弗吉尼亞州 | 199.7.83.42 |
M | WIDE Project | 日本-東京 | 202.12.27.33 |
13.2 安裝Bind服務程序
BIND(Berkeley Internet Name Domain,伯克利因特網名稱域)服務是全球範圍內使用最普遍、最安全可靠且高效的域名解析服務程序。DNS域名解析服務做爲互聯網基礎設施服務,其責任之重可想而知,所以建議你們在生產環境中安裝部署bind服務程序時加上chroot(俗稱牢籠機制)擴展包,以便有效地限制bind服務程序僅能對自身的配置文件進行操做,以確保整個服務器的安全。
[root@linuxprobe ~]# yum install bind-chroot Loaded plugins: langpacks, product-id, subscription-manager ………………省略部分輸出信息……………… Installing: bind-chroot x86_64 32:9.9.4-14.el7 rhel 81 k Installing for dependencies: bind x86_64 32:9.9.4-14.el7 rhel 1.8 M Transaction Summary ================================================================================ Install 1 Package (+1 Dependent package) Total download size: 1.8 M Installed size: 4.3 M Is this ok [y/d/N]: y Downloading packages: -------------------------------------------------------------------------------- Total 28 MB/s | 1.8 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 32:bind-9.9.4-14.el7.x86_64 1/2 Installing : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2 Verifying : 32:bind-9.9.4-14.el7.x86_64 1/2 Verifying : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2 Installed: bind-chroot.x86_64 32:9.9.4-14.el7 Dependency Installed: bind.x86_64 32:9.9.4-14.el7 Complete!
bind服務程序的配置並不簡單,由於要想爲用戶提供健全的DNS查詢服務,要在本地保存相關的域名數據庫,而若是把全部域名和IP地址的對應關係都寫入到某個配置文件中,估計要有上千萬條的參數,這樣既不利於程序的執行效率,也不方便往後的修改和維護。所以在bind服務程序中有下面這三個比較關鍵的文件。
主配置文件(/etc/named.conf):只有58行,並且在去除註釋信息和空行以後,實際有效的參數僅有30行左右,這些參數用來定義bind服務程序的運行。
區域配置文件(/etc/named.rfc1912.zones):用來保存域名和IP地址對應關係的所在位置。相似於圖書的目錄,對應着每一個域和相應IP地址所在的具體位置,當須要查看或修改時,可根據這個位置找到相關文件。
數據配置文件目錄(/var/named):該目錄用來保存域名和IP地址真實對應關係的數據配置文件。
在Linux系統中,bind服務程序的名稱爲named。首先須要在/etc目錄中找到該服務程序的主配置文件,而後把第11行和第17行的地址均修改成any,分別表示服務器上的全部IP地址都可提供DNS域名解析服務,以及容許全部人對本服務器發送DNS查詢請求。這兩個地方必定要修改準確。
[root@linuxprobe ~]# vim /etc/named.conf 1 // 2 // named.conf 3 // 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 // server as a caching only nameserver (as a localhost DNS resolver only). 6 // 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 // 9 10 options { 11 listen-on port 53 { any; }; 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 allow-query { any; }; 18 19 /* 20 - If you are building an AUTHORITATIVE DNS server, do NOT enable re cursion. 1,1 Top 21 - If you are building a RECURSIVE (caching) DNS server, you need to enable 22 recursion. 23 - If your recursive DNS server has a public IP address, you MUST en able access 24 control to limit queries to your legitimate users. Failing to do so will 25 cause your server to become part of large scale DNS amplification 26 attacks. Implementing BCP38 within your network would greatly 27 reduce such attack surface 28 */ 29 recursion yes; 30 31 dnssec-enable yes; 32 dnssec-validation yes; 33 dnssec-lookaside auto; 34 35 /* Path to ISC DLV key */ 36 bindkeys-file "/etc/named.iscdlv.key"; 37 38 managed-keys-directory "/var/named/dynamic"; 39 40 pid-file "/run/named/named.pid"; 41 session-keyfile "/run/named/session.key"; 42 }; 43 44 logging { 45 channel default_debug { 46 file "data/named.run"; 47 severity dynamic; 48 }; 49 }; 50 51 zone "." IN { 52 type hint; 53 file "named.ca"; 54 }; 55 56 include "/etc/named.rfc1912.zones"; 57 include "/etc/named.root.key"; 58
如前所述,bind服務程序的區域配置文件(/etc/named.rfc1912.zones)用來保存域名和IP地址對應關係的所在位置。在這個文件中,定義了域名與IP地址解析規則保存的文件位置以及服務類型等內容,而沒有包含具體的域名、IP地址對應關係等信息。服務類型有三種,分別爲hint(根區域)、master(主區域)、slave(輔助區域),其中經常使用的master和slave指的就是主服務器和從服務器。將域名解析爲IP地址的正向解析參數和將IP地址解析爲域名的反向解析參數分別如圖13-3和圖13-4所示。
圖13-3 正向解析參數
圖13-4 反向解析參數
下面的實驗中會分別修改bind服務程序的主配置文件、區域配置文件與數據配置文件。若是在實驗中遇到了bind服務程序啓動失敗的狀況,而您認爲這是因爲參數寫錯而致使的,則能夠執行named-checkconf命令和named-checkzone命令,分別檢查主配置文件與數據配置文件中語法或參數的錯誤。
出現問題?大膽提問!
因讀者們硬件不一樣或操做錯誤均可能致使實驗配置出錯,請耐心再仔細看看操做步驟吧,不要氣餒~
Linux技術交流請加A羣:560843(滿),B羣:340829(推薦),C羣:463590(推薦),點此查看全國羣。
*本羣特點:經過口令驗證確保每個羣員都是《Linux就該這麼學》的讀者,答疑更有針對性,不按期免費領取定製禮品。
13.2.1 正向解析實驗
在DNS域名解析服務中,正向解析是指根據域名(主機名)查找到對應的IP地址。也就是說,當用戶輸入了一個域名後,bind服務程序會自動進行查找,並將匹配到的IP地址返給用戶。這也是最經常使用的DNS工做模式。
第1步:編輯區域配置文件。該文件中默認已經有了一些可有可無的解析參數,旨在讓用戶有一個參考。咱們能夠將下面的參數添加到區域配置文件的最下面,固然,也能夠將該文件中的原有信息所有清空,而只保留本身的域名解析信息:
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; allow-update {none;}; };
第2步:編輯數據配置文件。咱們能夠從/var/named目錄中複製一份正向解析的模板文件(named.localhost),而後把域名和IP地址的對應數據填寫數據配置文件中並保存。在複製時記得加上-a參數,這能夠保留原始文件的全部者、所屬組、權限屬性等信息,以便讓bind服務程序順利讀取文件內容:
[root@linuxprobe ~]# cd /var/named/ [root@linuxprobe named]# ls -al named.localhost -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.zone
編輯數據配置文件。在保存並退出後文件後記得重啓named服務程序,讓新的解析數據生效。考慮到正向解析文件中的參數較多,並且相對都比較重要,劉遄老師在每一個參數後面都做了簡要的說明。
[root@linuxprobe named]# vim linuxprobe.com.zone [root@linuxprobe named]# systemctl restart named
$TTL 1D | #生存週期爲1天 | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( | |
#受權信息開始: | #DNS區域的地址 | #域名管理員的郵箱(不要用@符號) | |||
0;serial | #更新序列號 | ||||
1D;refresh | #更新時間 | ||||
1H;retry | #重試延時 | ||||
1W;expire | #失效時間 | ||||
3H;)minimum | #無效解析記錄的緩存時間 | ||||
NS | ns.linuxprobe.com. | #域名服務器記錄 | |||
ns | IN A | 192.168.10.10 | #地址記錄(ns.linuxprobe.com.) | ||
IN MX 10 | mail.linuxprobe.com. | #郵箱交換記錄 | |||
IN A | 192.168.10.10 | #地址記錄(mail.linuxprobe.com.) | |||
www | IN A | 192.168.10.10 | #地址記錄(www.linuxprobe.com.) | ||
bbs | IN A | 192.168.10.20 | #地址記錄(bbs.linuxprobe.com.) |
第3步:檢驗解析結果。爲了檢驗解析結果,必定要先把Linux系統網卡中的DNS地址參數修改爲本機IP地址,這樣就可使用由本機提供的DNS查詢服務了。nslookup命令用於檢測可否從DNS服務器中查詢到域名與IP地址的解析記錄,進而更準確地檢驗DNS服務器是否已經可以爲用戶提供服務。
[root@linuxprobe ~]# systemctl restart network [root@linuxprobe ~]# nslookup > www.linuxprobe.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.linuxprobe.com Address: 192.168.10.10 > bbs.linuxprobe.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: bbs.linuxprobe.com Address: 192.168.10.20
13.2.2 反向解析實驗
在DNS域名解析服務中,反向解析的做用是將用戶提交的IP地址解析爲對應的域名信息,它通常用於對某個IP地址上綁定的全部域名進行總體屏蔽,屏蔽由某些域名發送的垃圾郵件。它也能夠針對某個IP地址進行反向解析,大體判斷出有多少個網站運行在上面。當購買虛擬主機時,可使用這一功能驗證虛擬主機提供商是否有嚴重的超售問題。
第1步:編輯區域配置文件。在編輯該文件時,除了不要寫錯格式以外,還須要記住此處定義的數據配置文件名稱,由於一下子還須要在/var/named目錄中創建與其對應的同名文件。反向解析是把IP地址解析成域名格式,所以在定義zone(區域)時應該要把IP地址反寫,好比原來是192.168.10.0,反寫後應該就是10.168.192,並且只需寫出IP地址的網絡位便可。把下列參數添加至正向解析參數的後面。
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; allow-update {none;}; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.arpa"; };
第2步:編輯數據配置文件。首先從/var/named目錄中複製一份反向解析的模板文件(named.loopback),而後把下面的參數填寫到文件中。其中,IP地址僅須要寫主機位,如圖13-5所示。
圖13-5 反向解析文件中IP地址參數規範
[root@linuxprobe named]# cp -a named.loopback 192.168.10.arpa [root@linuxprobe named]# vim 192.168.10.arpa [root@linuxprobe named]# systemctl restart named
$TTL 1D | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( |
0;serial | ||||
1D;refresh | ||||
1H;retry | ||||
1W;expire | ||||
3H);minimum | ||||
NS | ns.linuxprobe.com. | |||
ns | A | 192.168.10.10 | ||
10 | PTR | ns.linuxprobe.com. | #PTR爲指針記錄,僅用於反向解析中。 | |
10 | PTR | mail.linuxprobe.com. | ||
10 | PTR | www.linuxprobe.com. | ||
20 | PTR | bbs.linuxprobe.com. |
第3步:檢驗解析結果。在前面的正向解析實驗中,已經把系統網卡中的DNS地址參數修改爲了本機IP地址,所以能夠直接使用nslookup命令來檢驗解析結果,僅需輸入IP地址便可查詢到對應的域名信息。
[root@linuxprobe ~]# nslookup > 192.168.10.10 Server: 127.0.0.1 Address: 127.0.0.1#53 10.10.168.192.in-addr.arpa name = ns.linuxprobe.com. 10.10.168.192.in-addr.arpa name = www.linuxprobe.com. 10.10.168.192.in-addr.arpa name = mail.linuxprobe.com. > 192.168.10.20 Server: 127.0.0.1 Address: 127.0.0.1#53 20.10.168.192.in-addr.arpa name = bbs.linuxprobe.com.
13.3 部署從服務器
做爲重要的互聯網基礎設施服務,保證DNS域名解析服務的正常運轉相當重要,只有這樣才能提供穩定、快速且不間斷的域名查詢服務。在DNS域名解析服務中,從服務器能夠從主服務器上獲取指定的區域數據文件,從而起到備份解析記錄與負載均衡的做用,所以經過部署從服務器能夠減輕主服務器的負載壓力,還能夠提高用戶的查詢效率。
在本實驗中,主服務器與從服務器分別使用的操做系統和IP地址如表13-2所示。
表13-2 主服務器與從服務器分別使用的操做系統與IP地址信息
主機名稱 | 操做系統 | IP地址 |
主服務器 | RHEL 7 | 192.168.10.10 |
從服務器 | RHEL 7 | 192.168.10.20 |
第1步:在主服務器的區域配置文件中容許該從服務器的更新請求,即修改allow-update {容許更新區域信息的主機地址;};參數,而後重啓主服務器的DNS服務程序。
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; allow-update { 192.168.10.20; }; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.arpa"; allow-update { 192.168.10.20; }; }; [root@linuxprobe ~]# systemctl restart named
第2步:在從服務器中填寫主服務器的IP地址與要抓取的區域信息,而後重啓服務。注意此時的服務類型應該是slave(從),而再也不是master(主)。masters參數後面應該爲主服務器的IP地址,並且file參數後面定義的是同步數據配置文件後要保存到的位置,稍後能夠在該目錄內看到同步的文件。
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type slave; masters { 192.168.10.10; }; file "slaves/linuxprobe.com.zone"; }; zone "10.168.192.in-addr.arpa" IN { type slave; masters { 192.168.10.10; }; file "slaves/192.168.10.arpa"; }; [root@linuxprobe ~]# systemctl restart named
第3步:檢驗解析結果。當從服務器的DNS服務程序在重啓後,通常就已經自動從主服務器上同步了數據配置文件,並且該文件默認會放置在區域配置文件中所定義的目錄位置中。隨後修改從服務器的網絡參數,把DNS地址參數修改爲192.168.10.20,這樣便可使用從服務器自身提供的DNS域名解析服務。最後就可使用nslookup命令順利看到解析結果了。
[root@linuxprobe ~]# cd /var/named/slaves [root@linuxprobe slaves]# ls 192.168.10.arpa linuxprobe.com.zone [root@linuxprobe slaves]# nslookup > www.linuxprobe.com Server: 192.168.10.20 Address: 192.168.10.20#53 Name: www.linuxprobe.com Address: 192.168.10.10 > 192.168.10.10 Server: 192.168.10.20 Address: 192.168.10.20#53 10.10.168.192.in-addr.arpa name = www.linuxprobe.com. 10.10.168.192.in-addr.arpa name = ns.linuxprobe.com. 10.10.168.192.in-addr.arpa name = mail.linuxprobe.com.
13.4 安全的加密傳輸
前文反覆說起,域名解析服務是互聯網基礎設施中重要的一環,幾乎全部的網絡應用都依賴於DNS才能正常運行。若是DNS服務發生故障,那麼即使Web網站或電子郵件系統服務等都正常運行,用戶也沒法找到並使用它們了。
互聯網中的絕大多數DNS服務器(超過95%)都是基於BIND域名解析服務搭建的,而bind服務程序爲了提供安全的解析服務,已經對TSIG(RFC 2845)加密機制提供了支持。TSIG主要是利用了密碼編碼的方式來保護區域信息的傳輸(Zone Transfer),即TSIG加密機制保證了DNS服務器之間傳輸域名區域信息的安全性。
接下來的實驗依然使用了表13-2中的兩臺服務器。
書接上回。前面在從服務器上配妥bind服務程序並重啓後,便可看到從主服務器中獲取到的數據配置文件。
主機名稱 | 操做系統 | IP地址 |
主服務器 | RHEL 7 | 192.168.10.10 |
從服務器 | RHEL 7 | 192.168.10.20 |
[root@linuxprobe ~]# ls -al /var/named/slaves/ total 12 drwxrwx---. 2 named named 54 Jun 7 16:02 . drwxr-x---. 6 root named 4096 Jun 7 15:58 .. -rw-r--r--. 1 named named 432 Jun 7 16:02 192.168.10.arpa -rw-r--r--. 1 named named 439 Jun 7 16:02 linuxprobe.com.zone [root@linuxprobe ~]# rm -rf /var/named/slaves/*
第1步:在主服務器中生成密鑰。dnssec-keygen命令用於生成安全的DNS服務密鑰,其格式爲「dnssec-keygen [參數]」,經常使用的參數以及做用如表13-3所示。
表13-3 dnssec-keygen命令的經常使用參數
參數 | 做用 |
-a | 指定加密算法,包括RSAMD5(RSA)、RSASHA一、DSA、NSEC3RSASHA一、NSEC3DSA等 |
-b | 密鑰長度(HMAC-MD5的密鑰長度在1~512位之間) |
-n | 密鑰的類型(HOST表示與主機相關) |
使用下述命令生成一個主機名稱爲master-slave的128位HMAC-MD5算法的密鑰文件。在執行該命令後默認會在當前目錄中生成公鑰和私鑰文件,咱們須要把私鑰文件中Key參數後面的值記錄下來,一下子要將其寫入傳輸配置文件中。
[root@linuxprobe ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave Kmaster-slave.+157+46845 [root@linuxprobe ~]# ls -al Kmaster-slave.+157+46845.* -rw-------. 1 root root 56 Jun 7 16:06 Kmaster-slave.+157+46845.key -rw-------. 1 root root 165 Jun 7 16:06 Kmaster-slave.+157+46845.private [root@linuxprobe ~]# cat Kmaster-slave.+157+46845.private Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: 1XEEL3tG5DNLOw+1WHfE3Q== Bits: AAA= Created: 20170607080621 Publish: 20170607080621 Activate: 20170607080621
第2步:在主服務器中建立密鑰驗證文件。進入bind服務程序用於保存配置文件的目錄,把剛剛生成的密鑰名稱、加密算法和私鑰加密字符串按照下面格式寫入到tansfer.key傳輸配置文件中。爲了安全起見,咱們須要將文件的所屬組修改爲named,並將文件權限設置得要小一點,而後把該文件作一個硬連接到/etc目錄中。
[root@linuxprobe ~]# cd /var/named/chroot/etc/ [root@linuxprobe etc]# vim transfer.key key "master-slave" { algorithm hmac-md5; secret "1XEEL3tG5DNLOw+1WHfE3Q=="; }; [root@linuxprobe etc]# chown root:named transfer.key [root@linuxprobe etc]# chmod 640 transfer.key [root@linuxprobe etc]# ln transfer.key /etc/transfer.key
第3步:開啓並加載Bind服務的密鑰驗證功能。首先須要在主服務器的主配置文件中加載密鑰驗證文件,而後進行設置,使得只容許帶有master-slave密鑰認證的DNS服務器同步數據配置文件:
[root@linuxprobe ~]# vim /etc/named.conf 1 // 2 // named.conf 3 // 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 // server as a caching only nameserver (as a localhost DNS resolver only). 6 // 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 // 9 include "/etc/transfer.key"; 10 options { 11 listen-on port 53 { any; }; 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 allow-query { any; }; 18 allow-transfer { key master-slave; }; ………………省略部分輸出信息……………… [root@linuxprobe ~]# systemctl restart named
至此,DNS主服務器的TSIG密鑰加密傳輸功能就已經配置完成。此時清空DNS從服務器同步目錄中全部的數據配置文件,而後再次重啓bind服務程序,這時就已經不能像剛纔那樣自動獲取到數據配置文件了。
[root@linuxprobe ~]# rm -rf /var/named/slaves/* [root@linuxprobe ~]# systemctl restart named [root@linuxprobe ~]# ls /var/named/slaves/
第4步:配置從服務器,使其支持密鑰驗證。配置DNS從服務器和主服務器的方法大體相同,都須要在bind服務程序的配置文件目錄中建立密鑰認證文件,並設置相應的權限,而後把該文件作一個硬連接到/etc目錄中。
[root@linuxprobe ~]# cd /var/named/chroot/etc [root@linuxprobe etc]# vim transfer.key key "master-slave" { algorithm hmac-md5; secret "1XEEL3tG5DNLOw+1WHfE3Q=="; }; [root@linuxprobe etc]# chown root:named transfer.key [root@linuxprobe etc]# chmod 640 transfer.key [root@linuxprobe etc]# ln transfer.key /etc/transfer.key
第5步:開啓並加載從服務器的密鑰驗證功能。這一步的操做步驟也一樣是在主配置文件中加載密鑰認證文件,而後按照指定格式寫上主服務器的IP地址和密鑰名稱。注意,密鑰名稱等參數位置不要太靠前,大約在第43行比較合適,不然bind服務程序會由於沒有加載完預設參數而報錯:
[root@linuxprobe etc]# vim /etc/named.conf 1 // 2 // named.conf 3 // 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 // server as a caching only nameserver (as a localhost DNS resolver only). 6 // 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 // 9 include "/etc/transfer.key"; 10 options { 11 listen-on port 53 { 127.0.0.1; }; 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 allow-query { localhost; }; 18 19 /* 20 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. 21 - If you are building a RECURSIVE (caching) DNS server, you need to enable 22 recursion. 23 - If your recursive DNS server has a public IP address, you MUST enable access 24 control to limit queries to your legitimate users. Failing to do so will 25 cause your server to become part of large scale DNS amplification 26 attacks. Implementing BCP38 within your network would greatly 27 reduce such attack surface 28 */ 29 recursion yes; 30 31 dnssec-enable yes; 32 dnssec-validation yes; 33 dnssec-lookaside auto; 34 35 /* Path to ISC DLV key */ 36 bindkeys-file "/etc/named.iscdlv.key"; 37 38 managed-keys-directory "/var/named/dynamic"; 39 40 pid-file "/run/named/named.pid"; 41 session-keyfile "/run/named/session.key"; 42 }; 43 server 192.168.10.10 44 { 45 keys { master-slave; }; 46 }; 47 logging { 48 channel default_debug { 49 file "data/named.run"; 50 severity dynamic; 51 }; 52 }; 53 54 zone "." IN { 55 type hint; 56 file "named.ca"; 57 }; 58 59 include "/etc/named.rfc1912.zones"; 60 include "/etc/named.root.key"; 61
第6步:DNS從服務器同步域名區域數據。如今,兩臺服務器的bind服務程序都已經配置穩當,並匹配到了相同的密鑰認證文件。接下來在從服務器上重啓bind服務程序,能夠發現又能順利地同步到數據配置文件了。
[root@linuxprobe ~]# systemctl restart named [root@linuxprobe ~]# ls /var/named/slaves/ 192.168.10.arpa linuxprobe.com.zone
13.5 部署緩存服務器
DNS緩存服務器(Caching DNS Server)是一種不負責域名數據維護的DNS服務器。簡單來講,緩存服務器就是把用戶常用到的域名與IP地址的解析記錄保存在主機本地,從而提高下次解析的效率。DNS緩存服務器通常用於常常訪問某些固定站點並且對這些網站的訪問速度有較高要求的企業內網中,但實際的應用並不普遍。並且,緩存服務器是否能夠成功解析還與指定的上級DNS服務器的容許策略有關,所以當前僅需瞭解便可。
第1步:配置系統的雙網卡參數。前面講到,緩存服務器通常用於企業內網,旨在下降內網用戶查詢DNS的時間消耗。所以,爲了更加貼近真實的網絡環境,實現外網查詢功能,咱們須要在緩存服務器中再添加一塊網卡,並按照表13-4所示的信息來配置出兩臺Linux虛擬機系統。並且,還須要在虛擬機軟件中將新添加的網卡設置爲「橋接模式」,而後設置成與物理設備相同的網絡參數(此處須要你們按照物理設備真實的網絡參數來配置,圖13-6所示爲以DHCP方式獲取IP地址與網關等信息,重啓網絡服務後的效果如圖13-7所示)。
表13-4 用於配置Linux虛擬機系統所需的參數信息
主機名稱 | 操做系統 | IP地址 |
緩存服務器 | RHEL 7 | 網卡(外網):根據物理設備的網絡參數進行配置(經過DHCP或手動方式指定IP地址與網關等信息) |
網卡(內網):192.168.10.10 | ||
客戶端 | RHEL 7 | 192.168.10.20 |
圖13-6 以DHCP方式獲取網絡參數
圖13-7 查看網卡的工做狀態
第2步:在bind服務程序的主配置文件中添加緩存轉發參數。在大約第17行處添加一行參數「forwarders { 上級DNS服務器地址; };」,上級DNS服務器地址指的是獲取數據配置文件的服務器。考慮到查詢速度、穩定性、安全性等因素,劉遄老師在這裏使用的是北京市公共DNS服務器的地址210.73.64.1。若是你們也使用該地址,請先測試是否能夠ping通,以避免致使DNS域名解析失敗。
[root@linuxprobe ~]# vim /etc/named.conf 1 // 2 // named.conf 3 // 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 // server as a caching only nameserver (as a localhost DNS resolver only). 6 // 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 // 9 options { 10 listen-on port 53 { any; }; 11 listen-on-v6 port 53 { ::1; }; 12 directory "/var/named"; 13 dump-file "/var/named/data/cache_dump.db"; 14 statistics-file "/var/named/data/named_stats.txt"; 15 memstatistics-file "/var/named/data/named_mem_stats.txt"; 16 allow-query { any; }; 17 forwarders { 210.73.64.1; }; ………………省略部分輸出信息……………… [root@linuxprobe ~]# systemctl restart named
第3步:重啓DNS服務,驗證成果。把客戶端主機的DNS服務器地址參數修改成DNS緩存服務器的IP地址192.168.10.10,如圖13-8所示。這樣便可讓客戶端使用本地DNS緩存服務器提供的域名查詢解析服務。
圖13-8 設置客戶端主機的DNS服務器地址參數
在將客戶端主機的網絡參數設置穩當後重啓網絡服務,便可使用nslookup命令來驗證明驗結果(若是解析失敗,請讀者留意是不是上級DNS服務器選擇的問題)。其中,Server參數爲域名解析記錄提供的服務器地址,所以可見是由本地DNS緩存服務器提供的解析內容。
[root@linuxprobe ~]# nslookup > www.linuxprobe.com Server: 192.168.10.10 Address: 192.168.10.10#53 Non-authoritative answer: Name: www.linuxprobe.com Address: 113.207.76.73 Name: www.linuxprobe.com Address: 116.211.121.154 > 8.8.8.8 Server: 192.168.10.10 Address: 192.168.10.10#53 Non-authoritative answer: 8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com. Authoritative answers can be found from: in-addr.arpa nameserver = f.in-addr-servers.arpa. in-addr.arpa nameserver = b.in-addr-servers.arpa. in-addr.arpa nameserver = a.in-addr-servers.arpa. in-addr.arpa nameserver = e.in-addr-servers.arpa. in-addr.arpa nameserver = d.in-addr-servers.arpa. in-addr.arpa nameserver = c.in-addr-servers.arpa. a.in-addr-servers.arpa internet address = 199.212.0.73 a.in-addr-servers.arpa has AAAA address 2001:500:13::73 b.in-addr-servers.arpa internet address = 199.253.183.183 b.in-addr-servers.arpa has AAAA address 2001:500:87::87 c.in-addr-servers.arpa internet address = 196.216.169.10 c.in-addr-servers.arpa has AAAA address 2001:43f8:110::10 d.in-addr-servers.arpa internet address = 200.10.60.53 d.in-addr-servers.arpa has AAAA address 2001:13c7:7010::53 e.in-addr-servers.arpa internet address = 203.119.86.101 e.in-addr-servers.arpa has AAAA address 2001:dd8:6::101 f.in-addr-servers.arpa internet address = 193.0.9.1 f.in-addr-servers.arpa has AAAA address 2001:67c:e0::1
13.6 分離解析技術
如今,喜歡看咱們這本《Linux就該這麼學》的海外讀者愈來愈多,若是繼續把本書配套的網站服務器(https://www.linuxprobe.com)架設在北京市的機房內,則海外讀者的訪問速度勢必會很慢。可若是把服務器架設在美國那邊的機房,也將增大國內讀者的訪問難度。
爲了知足海內外讀者的需求,外加劉遄老師不差錢,因而能夠購買多臺服務器並分別部署在全球各地,而後再使用DNS服務的分離解析功能,便可讓位於不一樣地理範圍內的讀者經過訪問相同的網址,而從不一樣的服務器獲取到相同的數據。例如,咱們能夠按照表13-5所示,分別爲處於北京的DNS服務器和處於美國的DNS服務器分配不一樣的IP地址,而後讓國內讀者在訪問時自動匹配到北京的服務器,而讓海外讀者自動匹配到美國的服務器,如圖13-9所示。
表13-5 不一樣主機的操做系統與IP地址狀況
主機名稱 | 操做系統 | IP地址 |
DNS服務器 | RHEL 7 | 北京網絡:122.71.115.10 |
美國網絡:106.185.25.10 | ||
北京用戶 | Windows 7 | 122.71.115.1 |
海外用戶 | Windows 7 | 106.185.25.1 |
圖13-9 DNS分離解析技術
爲了解決海外讀者訪問https://www.linuxprobe.com時的速度問題,劉遄老師已經在美國機房購買並架設好了相應的網站服務器,接下來須要手動部署DNS服務器並實現分離解析功能,以便讓不一樣地理區域的讀者在訪問相同的域名時,能解析出不一樣的IP地址。
建議你們將虛擬機還原到初始狀態,並從新安裝bind服務程序,以避免多個實驗之間相互產生衝突。
第1步:修改bind服務程序的主配置文件,把第11行的監聽端口與第17行的容許查詢主機修改成any。因爲配置的DNS分離解析功能與DNS根服務器配置參數有衝突,因此須要把第51~54行的根域信息刪除。
[root@linuxprobe ~]# vim /etc/named.conf ………………省略部分輸出信息……………… 44 logging { 45 channel default_debug { 46 file "data/named.run"; 47 severity dynamic; 48 }; 49 }; 50 51zone "." IN {52type hint;53file "named.ca";54};55 56 include "/etc/named.rfc1912.zones"; 57 include "/etc/named.root.key"; 58 ………………省略部分輸出信息………………
第2步:編輯區域配置文件。把區域配置文件中原有的數據清空,而後按照如下格式寫入參數。首先使用acl參數分別定義兩個變量名稱(china與american),當下面須要匹配IP地址時只需寫入變量名稱便可,這樣不只容易閱讀識別,並且也利於修改維護。這裏的難點是理解view參數的做用。它的做用是經過判斷用戶的IP地址是中國的仍是美國的,而後去分別加載不一樣的數據配置文件(linuxprobe.com.china或linuxprobe.com.american)。這樣,當把相應的IP地址分別寫入到數據配置文件後,便可實現DNS的分離解析功能。這樣一來,當中國的用戶訪問linuxprobe.com域名時,便會按照linuxprobe.com.china數據配置文件內的IP地址找到對應的服務器。
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones 1 acl "china" { 122.71.115.0/24; }; 2 acl "american" { 106.185.25.0/24;}; 3 view "china"{ 4 match-clients { "china"; }; 5 zone "linuxprobe.com" { 6 type master; 7 file "linuxprobe.com.china"; 8 }; 9 }; 10 view "american" { 11 match-clients { "american"; }; 12 zone "linuxprobe.com" { 13 type master; 14 file "linuxprobe.com.american"; 15 }; 16 };
第3步:創建數據配置文件。分別經過模板文件建立出兩份不一樣名稱的區域數據文件,其名稱應與上面區域配置文件中的參數相對應。
[root@linuxprobe ~]# cd /var/named [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.china [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.american [root@linuxprobe named]# vim linuxprobe.com.china
$TTL 1D | #生存週期爲1天 | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( | |
#受權信息開始: | #DNS區域的地址 | #域名管理員的郵箱(不要用@符號) | |||
0;serial | #更新序列號 | ||||
1D;refresh | #更新時間 | ||||
1H;retry | #重試延時 | ||||
1W;expire | #失效時間 | ||||
3H;)minimum | #無效解析記錄的緩存時間 | ||||
NS | ns.linuxprobe.com. | #域名服務器記錄 | |||
ns | IN A | 122.71.115.10 | #地址記錄(ns.linuxprobe.com.) | ||
www | IN A | 122.71.115.15 | #地址記錄(www.linuxprobe.com.) |
[root@linuxprobe named]# vim linuxprobe.com.american
$TTL 1D | #生存週期爲1天 | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( | |
#受權信息開始: | #DNS區域的地址 | #域名管理員的郵箱(不要用@符號) | |||
0;serial | #更新序列號 | ||||
1D;refresh | #更新時間 | ||||
1H;retry | #重試延時 | ||||
1W;expire | #失效時間 | ||||
3H;)minimum | #無效解析記錄的緩存時間 | ||||
NS | ns.linuxprobe.com. | #域名服務器記錄 | |||
ns | IN A | 106.185.25.10 | #地址記錄(ns.linuxprobe.com.) | ||
www | IN A | 106.185.25.15 | #地址記錄(www.linuxprobe.com.) |
第4步:從新啓動named服務程序,驗證結果。將客戶端主機(Windows系統或Linux系統都可)的IP地址分別設置爲122.71.115.1與106.185.25.1,將DNS地址分別設置爲服務器主機的兩個IP地址。這樣,當嘗試使用nslookup命令解析域名時就能清晰地看到解析結果,分別如圖13-10與圖13-11所示。
圖13-10 模擬中國用戶的域名解析操做
圖13-11 模擬美國用戶的域名解析
1.DNS技術提供的三種類型的服務器分別是什麼?
答:DNS主服務器、DNS從服務器與DNS緩存服務器。
2.DNS服務器之間傳輸區域數據文件時,使用的是遞歸查詢仍是迭代查詢?
答:DNS服務器之間是迭代查詢,用戶與DNS服務器之間是遞歸查詢。
3.在Linux系統中使用Bind服務程序部署DNS服務時,爲何推薦安裝chroot插件?
答:能有效地限制Bind服務程序僅能對自身的配置文件進行操做,以確保整個服務器的安全。
4.在DNS服務中,正向解析和反向解析的做用是什麼?
答:正向解析是將指定的域名轉換爲IP地址,而反向解析則是將IP地址轉換爲域名。正向解析模式更爲經常使用。
5.是否能夠限制使用DNS域名解析服務的主機?如何限制?
答:是的,修改主配置文件中第17行的allow-query參數便可。
6.部署DNS從服務器的做用是什麼?
答:部署從服務器能夠減輕主服務器的負載壓力,還能夠提高用戶的查詢效率。
7.當用戶與DNS服務器之間傳輸數據配置文件時,是否可使用TSIG加密機制來確保文件內容不被篡改?
答:不能,TSIG加密機制保障的是DNS服務器與DNS服務器之間迭代查詢的安全。
8.部署DNS緩存服務器的做用是什麼?
答:DNS緩存服務器把用戶常用到的域名與IP地址的解析記錄保存在主機本地,從而提高下次解析的效率。通常用於常常訪問某些固定站點並且對這些網站的訪問速度有較高要求的企業內網中,但實際的應用並不普遍。
9. DNS分離解析技術的做用是什麼?
答:可讓位於不一樣地理範圍內的讀者經過訪問相同的網址,而從不一樣的服務器獲取到相同的數據,以提高訪問效率。