《Linux就該這麼學》培訓筆記_ch13_使用Bind提供域名解析服務linux
文章最後會post上書本的筆記照片。算法
域名相較於由數字構成的IP地址更容易被理解和記憶,因此人們更習慣經過域名的方式來訪問網絡中的資源。可是,網絡中的計算機之間只能基於IP地址來相互識別對方的身份,並且要想在互聯網中傳輸數據,也必須基於外網的IP地址來完成。vim
DNS(Domain Name System,域名系統)是一項用於管理和解析域名與IP地址對應關係的技術,即可以接受用戶輸入的域名或IP地址,而後自動查找與之匹配(或者說具備映射關係)的IP地址或域名,即:
緩存
DNS域名解析服務採用的目錄樹層次結構:安全
域名後綴通常分爲國際域名和國內域名。原則上來說,域名後綴都有嚴格的定義,但在實際使用時能夠沒必要嚴格遵照。目前最多見的域名後綴有.com(商業組織)、.org(非營利組織)、.gov(政府部門)、.net(網絡服務商)、.edu(教研機構)、.pub(公共大衆)、.cn(中國國家頂級域名)等。服務器
DNS提供了三種類型的服務器:網絡
13臺根DNS服務器的具體信息:(亞洲僅在日本有一臺根DNS服務器)oop
名稱 | 管理單位 | 地理位置 | 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 |
BIND(Berkeley Internet Name Domain,伯克利因特網名稱域)服務是全球範圍內使用最普遍、最安全可靠且高效的域名解析服務程序。建議在生產環境中安裝部署bind服務程序時加上chroot(俗稱牢籠機制)擴展包,以便有效地限制bind服務程序僅能對自身的配置文件進行操做,以確保整個服務器的安全。post
安裝bind服務程序:yum install -y bind-chroot
bind服務程序中有三個比較關鍵的文件:
bind服務程序名稱爲named,在部署bind服務以前要先修改bind服務程序的主配置文件/etc/named.conf,使得服務器上的全部IP地址都可提供DNS域名解析服務,以及容許全部人對本服務器發送DNS查詢請求。
vim /etc/named.conf #在11行和17行,地址均改成any ... 11 listen-on port 53 { any; }; #服務器上的全部IP地址都可提供DNS域名解析服務。原始值爲127.0.01 ... 17 allow-query { any; }; #容許全部人對本服務器發送DNS查詢請求。原始值爲localhost ...
若是遇到啓動bind服務程序失敗的狀況,能夠執行如下命令:
正向(域名/主機名 -> IP),反向(IP -> 域名)。
配置正反向解析須要編輯區域配置文件和數據配置文件。
第1步:編輯區域配置文件(/etc/named.rfc1912.zones)。
區域配置文件用來保存域名和IP地址對應關係的所在位置。在這個文件中,定義了域名與IP地址解析規則保存的文件位置以及服務類型等內容,而沒有包含具體的域名、IP地址對應關係等信息。服務類型有三種,分別爲hint(根區域)、master(主區域)、slave(輔助區域),其中經常使用的master和slave指的就是主服務器和從服務器。
vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { #正向解析參數 type master; #服務類型爲主服務器 file "linuxprobe.com.zone"; #域名與IP地址解析規則保存的文件位置(/var/named/linuxprobe.com.zone) allow-update {none;}; #容許哪些客戶機動態更新該解析信息(這裏不容許任何人) }; zone "10.168.192.in-addr.arpa" IN { #反向解析參數,表示192.168.10.0./24網段的反向解析區域 type master; file "192.168.10.arpa"; };
第2步:編輯數據配置文件(var/named/xxxx)。(文件名在編輯區域配置文件時已經自定義)
從/var/named目錄中複製一份正向解析的模板文件(named.localhost),反向解析的模板文件(named.loopback)。而後把域名和IP地址的對應數據填寫數據配置文件中並保存。在用cp命令複製時必定要加上-a參數,保留原始文件的全部者、所屬組、權限屬性等信息,這裏的權限相當重要!以便讓bind服務程序順利讀取文件內容。
注意域名最後一個「.」,在輸入網址時一般爲了方便而省略,但在作dns配置時不能省略掉!
cd /var/named/ cp -a named.localhost linuxprobe.com.zone cp -a named.loopback 192.168.10.arpa vim linuxprobe.com.zone #編輯正向解析數據配置文件 $TTL 1D #生存週期爲1天 @ IN SOA linuxprobe.com. root.linuxprobe.com. ( #受權信息開始(Start Of Authority) 域名 域名管理員郵箱(郵箱的@符號用.代替) 0 ; serial #更新序列號(該序列號做爲slave與master更新的依據,通常利用日期來設定) 1D ; refresh #更新時間(命令slave多久進行一次主動更新) 1H ; retry #重試延時(當到了refresh時間但slave沒法鏈接master時重試鏈接的時間間隔) 1W ; expire #失效時間(當slave一直沒法鏈接上master,則通過expire的時間後命令) 3H); minimum #無效解析記錄的緩存時間(沒有指定生存期的數據,能夠保存在數據庫中的時間和TTL) NS ns.linuxprobe.com. #域名服務器記錄(Name Server,NS後面接的必定是主機名稱) ns IN A 192.168.10.10 #地址記錄(A表示正向解析的標記,格式 [hostname] IN A [IP]) IN MX 10 mail.linuxprobe.com. #郵箱交換記錄(MX與Mail Server有關,用途是郵件轉發,MX後的數值越小越優先,後面的hostname必須有一條A記錄) mail IN A 192.168.10.10 www IN A 192.168.10.10 bbs IN A 192.168.10.20 vim 192.168.10.arpa #編輯反向解析數據配置文件 $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爲指針記錄,僅用於反向解析(格式: [IP] IN PTR [主機名稱]) 10 PTR mail.linuxprobe.com. 10 PTR www.linuxprobe.com. 20 PTR bbs.linuxprobe.com.
第3步:把網卡的DNS地址修改成本機的IP地址,重啓網卡服務和named服務,用nslookup命令檢驗正反向解析結果。
nslookup命令用於檢測可否從DNS服務器中查詢到域名與IP地址的解析記錄,進而更準確地檢驗DNS服務器是否已經可以爲用戶提供服務。
vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 #修改網卡參數 ... DNS=192.168.10.10 #把DNS地址改成本機ip地址 ... systemctl restart network #重啓網卡服務 systemctl restart named #重啓named服務 nslookup >www.linuxprobe.com #顯示提供正向解析的服務器爲192.168.10.10,解析出IP:192.168.10.10 >bbs.linuxprobe.com #解析出IP:192.168.10.20 >mail.linuxprobe.com #解析出IP:192.168.10.10 >192.168.10.10 #顯示提供反向解析的服務器爲192.168.10.10,解析出域名:ns/www/mail.linuxprobe.com. >192.168.10.20 #解析出域名:bbs.linuxprobe.com.
在上一節實驗的基礎上,以客戶端192.168.10.20做爲從服務器,從主服務器192.168.10.10上同步數據配置文件。
主服務器192.168.10.10要作的更改:
vim /etc/named.rfc1912.zones #更改主服務器的區域配置文件,使其容許指定從服務器的更新請求 zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; allow-update { 192.168.10.20; }; #容許來自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; }; }; systemctl restart named #重啓named服務 iptables -F #清空iptables防火牆 service iptables save
從服務器要作的工做:
yum install -y bind-chroot vim /etc/named.conf ... 11 listen-on port 53 { any; }; ... 17 allow-query { any; }; ... vim /etc/named.rfc1912.zones #編輯區域配置文件 zone "linuxprobe.com" IN { type slave; #從服務器類型爲slave masters { 192.168.10.10; }; #指明主服務器ip地址 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"; }; vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 #修改網卡DNS參數 ... DNS=192.168.10.20 ... systemctl restart network #重啓網卡服務 systemctl restart named #重啓named服務 cd /var/named/slaves #進入同步數據配置文件的存放位置/var/named/slaves ls #看到有對應的數據配置文件(內容通過加密),說明同步成功 nslookup #檢驗提供DNS解析服務的是否是本機自身 >192.168.10.10 >www.linuxprobe.com #顯示由192.168.10.20提供DNS解析,解析出對應IP爲192.168.10.10
bind服務程序爲了提供安全的解析服務,已經對TSIG(RFC 2845)加密機制提供了支持。TSIG主要是利用了密碼編碼的方式來保護區域信息的傳輸(Zone Transfer),即TSIG加密機制保證了DNS服務器之間傳輸域名區域信息的安全性。
在上一節實驗基礎上,配置TSIG加密傳輸功能,使得只有擁有與主服務器相同的密鑰認證文件的從服務器才能從主服務器更新DNS信息。
dnssec-keygen命令:用於生成安全的DNS服務密鑰,格式:dnssec-keygen [參數]。
dnssec-keygen命令的經常使用參數:
參數 | 做用 |
-a | 指定加密算法,包括RSAMD5(RSA)、RSASHA一、DSA、NSEC3RSASHA一、NSEC3DSA等 |
-b | 密鑰長度(HMAC-MD5的密鑰長度在1~512位之間) |
-n | 密鑰的類型(HOST表示與主機相關) |
主服務器要作的工做:
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave #生成一個主機名稱爲master-slave的128位HMAC-MD5算法的密鑰文件(公鑰+私鑰) ls -al Kmaster-slave.+157+46845.* #運用通配符查看生成的密鑰文件,會有一個私鑰文件(後綴爲private)和公鑰文件(後綴爲key) cat Kmaster-slave.+157+46845.private #查看私鑰文件,複製當中的key參數值 ... Key: 1XEEL3tG5DNLOw+1WHfE3Q== ... cd /var/named/chroot/etc/ #進入bind服務程序用於保存配置文件的目錄 vim transfer.key #建立密鑰驗證文件 key "master-slave" { #密鑰名稱 algorithm hmac-md5; #加密算法 secret "1XEEL3tG5DNLOw+1WHfE3Q=="; #私鑰加密字符串 }; chown root:named transfer.key #把文件所屬組改成named chmod 640 transfer.key #下降文件權限 ln transfer.key /etc/transfer.key #建立一個密鑰驗證文件的硬連接到/etc目錄(配置主配置文件時須要,密鑰驗證文件必須在/etc目錄) vim /etc/named.conf #編輯bind服務主配置文件,開啓並加載Bind服務的密鑰驗證功能 ... 9 include "/etc/transfer.key"; #密鑰驗證文件必須在/etc目錄 18 allow-transfer { key master-slave; }; #只容許擁有該密鑰驗證文件的人進行同步 ... systemctl restart named #重啓bind服務程序
以後,清空從服務器/var/named/slaves目錄中從主服務器同步過來的數據配置文件,而後重啓bind服務,發現已經沒法再從主服務器獲取到數據配置文件了。
rm -rf /var/named/slaves/* #清空目錄下全部數據配置文件 systemctl restart named #重啓bind服務 ls /var/named/slaves #再查看slaves目錄,發現依然爲空,此時從服務器沒法再從主服務器中獲取數據配置文件
從服務器要作的工做:
cd /var/named/chroot/etc #進入bind服務程序的配置文件目錄 vim transfer.key #建立密鑰認證文件(參數和主服務器的密鑰驗證文件同樣) key "master-slave" { algorithm hmac-md5; secret "1XEEL3tG5DNLOw+1WHfE3Q=="; }; chown root:named transfer.key chmod 640 transfer.key ln transfer.key /etc/transfer.key #建立密鑰驗證文件的硬連接 vim /etc/named.conf ... 9 include "/etc/transfer.key"; ... 43 server 192.168.10.10 #指明主服務器的IP地址和密鑰名稱 44 { 45 keys { master-slave; }; 46 }; ... systemctl restart named ls /var/named/slaves/ #重啓bind服務後,查看slaves目錄,又能從主服務器同步到數據配置文件
DNS緩存服務器(Caching DNS Server)是一種不負責域名數據維護的DNS服務器。緩存服務器就是把用戶常用到的域名與IP地址的解析記錄保存在主機本地,從而提高下次解析的效率(最多隻是毫秒級的提高,意義不大)。DNS緩存服務器通常用於常常訪問某些固定站點並且對這些網站的訪問速度有較高要求的企業內網中,但實際的應用並不普遍。
此實驗很簡單,配置是不會有錯的,但至於爲何客戶機不能解析dns,很大緣由可能出在上級DNS服務器不容許同步DNS信息。上級DNS服務器地址指的是獲取數據配置文件的服務器。
緩存服務器準備兩張網卡,一張橋接(能上外網),一張僅主機模式(只能主機間通訊),客戶機只有一張僅主機模式網卡。只要客戶機能解析外網的DNS,就說明必定是由緩存服務器提供域名解析服務的。
緩存服務器須要作的:配置bind服務程序的主配置文件,添加緩存轉發參數,重啓bind服務。
vim /etc/named.conf ... 17 forwarders { 8.8.8.8; }; #上級DNS服務器地址最好ping測試下,ping通再用 ... systemctl restart named #重啓bind服務
客戶機須要作的:修改網卡參數,把DNS地址改成緩存服務器的IP,重啓網卡。
vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 ... DNS=192.168.10.10 ...
systemctl restart network
隨後客戶機用nslookup測試外網網站,檢驗DNS可否被解析。
當一個網站知名度愈來愈高,海內外都有用戶,僅僅把網站部署在一個地方,勢必形成部分用戶訪問速度很慢,所以知名度極高的網站一般須要在全球各地部署服務器,經過DNS服務的分離解析功能,便可讓位於不一樣地理範圍內的讀者經過訪問相同的網址,而從不一樣的服務器獲取到相同的數據。
圖解:
DNS服務器須要作的:
vim /etc/named.conf #配置bind服務的主配置文件 ... 11 listen-on port 53 { any; }; ... 17 allow-query { any; }; ... 51 # zone "." IN { #註釋等同刪除,刪除根域信息 52 # type hint; 53 # file "named.ca"; 54 # }; vim /etc/named.rfc1912.zones #編輯區域配置文件 1 acl "china" { 122.71.115.0/24; }; #使用acl參數分別定義兩個變量名稱(china與american),後續參數china=122.71.115.0/24 2 acl "american" { 106.185.25.0/24; }; 3 view "china"{ #經過判斷用戶的IP地址屬於哪一個網段,而後去分別加載不一樣的數據配置文件(linuxprobe.com.china或linuxprobe.com.american) 4 match-clients { "china"; }; 5 zone "linuxprobe.com" { #常規的zone參數定義 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 }; cd /var/named #進入存放數據配置文件的目錄 cp -a named.localhost linuxprobe.com.china #複製兩份正向解析的模板 cp -a named.localhost linuxprobe.com.american vim linuxprobe.com.china $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ;) minimum NS ns.linuxprobe.com. ns IN A 122.71.115.10 www IN A 122.71.115.15 vim linuxprobe.com.american $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ;) minimum NS ns.linuxprobe.com. ns IN A 106.185.25.10 www IN A 106.185.25.15 systemctl restart named #重啓bind付務
客戶機須要作的:
分別設置網卡地址爲122.71.115.1(北京)和106.185.25.1(美國),將DNS地址分別設置爲服務器主機的兩個IP地址:122.71.115.10(北京)和106.185.25.10(美國),nslookup測試。