互聯網的誕生,衍生了更多的服務,每個主機可以通過IP地址上網,訪問相應的服務,面對這麼多IP地址,人們就想出了採用名稱來訪問服務的辦法。這樣DNS就應運而生,它能夠實現IP和域名間的相互轉換。下面筆者就詳細介紹linux系統下的DNS。
簡介:DNS是應用層協議,監聽53端口,能夠實現IP和域名的相互解析,其中FQDN-->IP爲正向解析,IP-->FQDN爲反向解析。域名是一個倒立的樹,上級域能夠查詢到下級,而下級不知道上級域,且它只知道根。
原理:當進行域名解析時,網絡中有兩種查詢:遞歸查詢和迭代查詢,查詢到的結果返回給用戶。
DNS相關術語:
- 查詢類型:遞歸查詢(recursive)當用戶訪問DNS服務器,此時DNS會不斷詢問,直至給出結果,這樣會消耗大量的互聯網資源。
- 例:當用戶訪問tech.kingshuo.com時,DNS服務器首先會去詢問根.,根會指定去訪問com域,查詢到kingshuo.com域時,然後再去找tech.kingshuo.com,然後就給出查詢結果
- 迭代查詢 當用戶訪問DNS服務器時,此時DNS服務器會指出誰會知道相應的域
- 實際互聯網中,爲了很好的利用資源,會採用結合兩種查詢共同實現。
- DNS服務器類型:主服務器
- 輔助名稱服務器
- cacheing-name服務器
- 主服務器無法負載查詢時,輔助名稱服務器會啓用,給出相應的查詢結果。緩存服務器能夠緩存解析記錄,下次查詢時能夠迅速的給出結果。
- 主機服務器
- 從服務器
- 從服務器會從主服務器上獲得一份DNS名稱解析的記錄,這樣能夠加快域名的解析。
- 區域類型:
- hint 根域,也稱爲跟提示
- master 主服務器
- slave 從服務器
- 區域傳送:axfr 完全區域傳送
- ixfr 增量區域傳送
- 比較主從服務器的序列號,當主的大於從的就開始區域傳送,然而在傳送時間間隔內主機服務器宕掉後,會啓用notify機制通知從服務器。
- 例:
- #dig -t axfr kingshuo.com @192.168.0.101
- 域和區域:
- 域是邏輯概念,其中包括正向區域和反向區域
- 區域是物理概念
- 查詢過程:
- 查找/etc/hosts文件-->查找本地dns緩存-->server緩存-->authoritive
- 查詢結果:權威答案
- 非權威答案
- 權威答案是負責區域返回的結果,而非權威答案是緩存記錄或者從服務器返回的結果
- 例:使用dig命令查詢時,有aa字樣的爲權威答案,否則則是非權威答案
- ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
安裝DNS服務器:
#yum install bind
編輯dns的配置文件:
- #vim /etc/named.conf
- options {
- directory "/var/named";<---區域存放的目錄
- };
- zone "." IN {
- type hint; <----區域類型
- file "named.ca"; <----區域文件
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";<----正向區域類型文件
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local"; <---反向區域文件
- };
編輯區域文件:
正向區域文件localhost.zone
- $TTL 86400<------最大生存時間
- $ORIGIN localhost.
- @ IN SOA ns.localhost. admin.localhost. (
- 2011082201<-----序列號
- 1H<-------發送間隔時間
- 10M<-----重試時間
- 7D<------過期時間
- 1D )<----否定回答間隔時間
- IN NS ns.localhost.
- localhost IN A 127.0.0.1
反向區域文件named.local
- $TTL 86400
- @ IN SOA localhost. root.localhost. (
- 1997022700 ; Serial
- 28800 ; Refresh
- 14400 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
- IN NS localhost.
- 1 IN PTR localhost.
其他DNS命令:
- #dig -t NS . @a.root-server.net > /var/named/named.ca<--生成named.ca文件
- #dig +rescurs -t A www.baidu.com <---強行進行遞歸查詢
- +norescus <---不要遞歸查詢
- +trace -t A www.baidu.com <---追蹤解析過程
- #service named configtest <---檢查配置文件
- #named-checkconf <---檢查配置語法錯誤
- #named-checkzone "localhost" /var/named/localhost.zone<---檢查區域語法錯誤
- #service named start <----重啓DNS服務
- #dig -x 192.168.0.5 <---反向解析
- #rndc-confgen > /etc/rndc.conf <---手動生成rndc
- rndc是遠程配置工具 953端口
- #rndc reload 重載
- #rndc stop 停止named
- #rndc flush 清空服務器緩存
- #rndc status 查看狀態
---------------------------------------------------------------------------------
案例解析: 考慮到某公司內網客戶端衆多,且彼此間訪問經常需要用到主機名的情況下,
公司計劃自建一臺DNS服務器kingshuo.com,爲了防止主服務宕掉後用戶無法相互訪問,此時還搭建一個從DNS服務器;爲了內部快速解析tech.kingshuo.com,採取了子域授權;區別內部和外部DNS解析
安裝DNS軟件:
#yum install bind
#####################主DNS服務器的配置##########################
編輯/etc/named.conf文件:
- #vim /etc/named.conf
- acl internel {
- 192.168.0.0/24;<----內網地址
- 127.0.0.0/8;
- };
- acl externel {
- 172.16.0.0/16;<----外網地址
- };
- options {
- directory "/var/named";
- recursion no; <-----不允許遞歸查詢
- };
- view INNET {<-----建立視圖
- match-clients { internel; };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type master;
- file "kingshuo.zone.inter";
- allow-transfer { 192.168.0.102; }; <-----只允許傳送給此地址,防止信息丟失
- };
- zone "0.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.zone.inter";
- allow-transfer { 192.168.0.102; };
- };
- };
- view EXNET {
- match-clients { externel; };
- recursion no; <-----不允許遞歸查詢
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type master;
- file "kingshuo.zone.exter";
- };
- zone "0.16.172.in-addr.arpa" IN {
- type master;
- file "172.16.zone.exter";
- };
- };
編輯區域文件:
#cd /var/named
#dig -t NS . @a.root-server.net > named.ca
相應的localhost.zone,named.local如上配置即可,此處不再贅餘。
vim kingshuo.zone.inter
- $TTL 86400
- $ORIGIN kingshuo.com.
- @ 600 IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- IN MX 10 mail.kingshuo.com.
- ns1 IN A 192.168.0.101
- ns2 IN A 192.168.0.102
- mail IN A 192.168.0.102
- www IN A 192.168.0.101
- admin IN A 192.168.0.101
- tech.kingshuo.com IN NS ns1.tech.kingshuo.com.<----聲明子域
- ns1.tech.kingshuo.com IN A 192.168.0.102
#vim 192.168.zone.inter
- $TTL 86400
- @ IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- 101 IN PTR ns1.kingshuo.com.
- 102 IN PTR ns2.kingshuo.com.
- 102 IN PTR mail.kingshuo.com.
- 101 IN PTR www.kingshuo.com.
- 101 IN PTR admin.kingshuo.com.
#vim kingshuo.zone.exter
- $TTL 86400
- $ORIGIN kingshuo.com.
- @ 600 IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- IN MX 10 mail.kingshuo.com.
- ns1 IN A 172.16.0.101
- ns2 IN A 172.16.0.102
- mail IN A 172.16.0.100
- www IN A 172.16.0.100
#vim 172.16.zone.exter
- $TTL 86400
- @ IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- 101 IN PTR ns1.kingshuo.com.
- 102 IN PTR ns2.kingshuo.com.
- 100 IN PTR mail.kingshuo.com.
- 100 IN PTR www.kingshuo.com.
###################輔助名稱服務器的配置####################
編輯/etc/named.conf文件:
#vim /etc/named.conf
- options {
- directory "/var/named";
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type slave;
- file "slaves/kingshuo.zone";
- masters { 192.168.0.101; };
- allow-transfer { none; };
- };
- zone "0.168.192.in-addr.arpa" IN {
- type slave;
- file "slaves/192.168.zone";
- masters { 192.168.0.101; };
- allow-transfer { none; };
- };
- zone "tech.kingshuo.com" IN {
- type master;
- file "tech.kingshuo.zone";
- };
編輯named.ca,named.local,localhost.zone文件如上。
編輯子域:
#vim tech.kingshuo.zone
- $TTL 86400
- $ORIGIN tech.kingshuo.com.
- @ 600 IN SOA ns1.tech.kingshuo.com. admin.tech.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.tech.kingshuo.com.
- IN NS ns2.tech.kingshuo.com.
- IN MX 10 mail.tech.kingshuo.com.
- ns1 IN A 192.168.0.102
- ns2 IN A 192.168.0.101
- mail IN A 192.168.0.102
- www IN A 192.168.0.101
配置停當,您這裏就可以重啓DNS服務器進行相關的測試了。