1. 程式人生 > >dns詳解(一)

dns詳解(一)

dns bind hosts

一:DNS(Domain Name Service),協議
二:DNS服務相關概念
三:DNS的實現方式
四:主配置文件格式
五:測試工具
六:配置正向區域



一:DNS(Domain Name Service),協議
C/S
53/{tcp,udp}:默認使用該協議通信
:主要是用udp實現解析

www.mt.com:FQDN(full qualified domain) //主機名
技術分享圖片 早期通過hosts文件進行標識

解析過程:hosts--->本地緩存-->DNS:/etc/resolv.conf

根域名:.
頂級域名:top level domain:tld //
組織域:.com,.net,.org,.gov,.edu,.mil
國家域:.lq,.tw,.hk,.ip,.cn,...

父域知道子域,但是子域不知道父域

查詢完後:緩存到本地,下一次的話就直接使用緩存
緩存也有TTL,用來保證有效 //TTL倒計時,到時清除


思想:分層而治,劃片[區]而管

www.baidu.com. //最後一個 . 是可以不帶的,但是是存在的


DNS查詢過程:兩段
1:到自己所指向的DNS服務器 //遞歸
2:本地DNS在網上查找的過程 //叠代

遞歸:弟弟我幫你
叠代:自己去吧

DNS查詢類型:
遞歸查詢;
叠代查詢

DNS名稱解析方式://兩個不同的數據庫
名稱--->IP:正向
IP-->名稱:反向
//早期智能正向解析,而不能反向解析
//反向:另外一個樹
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
[.]
/
[] //in-addr.arpa.
/
/
[1]
/ |
[1] [2]
\
[3]
\
[4]
1.2.3.4===4.3.2.1.in-addr.arpa
反向:IP地址表示的過程也是從下往上走:
表示的時候是:1.2.3.4
查找過程:
第一階段:本地dns-->.
第二階段:in-addr.arpa-->1-->2-->3
正向:也是從下往上查找的
表示的時候是:www.baidu.com
查找過程:
第一階段: 本地DNS--->.
第二階段:.-->.com-->.baidu--->www
註意:二者的名稱空間,非為同一個空間,即非為同一棵樹;因此,也不是同一個解析庫

dns相關網站
萬網//https://wanwang.aliyun.com/domain/
godaddy //https://sg.godaddy.com/zh/


二:DNS服務相關概念
1.主-輔DNS
輔:在主dns掛了的時候,及時頂上去
:在忙的時候,也可以做負載均衡
:只能輔到主dns去更新,復制
:新加入的條目,只能通過主DNS

主DNS:維護所負責解析的域數據庫的服務器;讀寫操作都可進行
從DNS:從主DNS或其他從DNS服務器那裏“復制”一份解析庫;但只能進行讀操作
“復制”操作的實施方式:
序列號:serial,也即是數據庫的版本號;主dns數據庫內容發生變化時,其版本號遞增
刷新時間間隔:refresh,從s每多久到主s檢查序列號更新狀況
重試時間間隔:retry,小於refresh//否則刷新時間已經改變,從s請求主解析庫失敗時,再次發起請求的時間間隔
過期時長:expire,從s多久之後放棄從主s同步數據;停止提供服務;
//因為他沒有權限,進行寫,所以他也就不再提供服務了
//需要手動配置為從為主NS
否定答案的緩存時長:我沒有知道,多長時間內你不要問我
主s“通知“從s隨時更新數據://從s定期間隔來復制,主s更新主動推送
pull:拉取,拉過來 //從s定期從主s pull數據
push:推送

區域傳送:
全量傳送:axfr傳送整個解析庫 //一般第一次的時候
增量傳送:ixfr僅傳送變化的數據
區域(zone)域(domain)
mt.com是一個域
FQDN-->IP
正向解析庫://也成為一個區域:正向解析區域
IP-->FQDN
反向解析庫://反向解析區域
一個域內有:正向解析區域和反向解析區域
一個域內:正向或者反向//又負責n個域的解析
區域是物理概念:例如一個正向或者反向的解析庫文件
域是邏輯概念:.com,.cn等
//因此這兩個是無所謂誰大誰小的

子域需要得到父域的授權

每一個DNS只知道自己的負責的DNS子域,而不知道父域是誰
因此每次查找,可能都需要到根查找
如果A請求NS1,單NS1不負責該域,NS1會直接查找根,而根是在配置文件中有直接定義的
全球的根節點服務器:13個,10:Usa,1:japan,1瑞士,1:英國
A-M標識,中國2014新增:L:
l.gtld-servers.net //中國的,位於北京
把DNS封了的話,國內的訪問國內的網站都將失效
安全:dns緩存毒化,主機名和dns對應到其他ip
現在有:DNSsec //dns數據上上進行簽名

2.區域數據庫文件:
資源記錄:Resouce Record,簡稱rr;
記錄類型:A,AAAA,PTR,SOA,NS,CNAME,MX

SOA:start of authority:起始授權記錄;一個區域解析庫有且只能喲一個SOA記錄,而且必須放在第一條;
NS:Name service,域名服務記錄;一個區域解析庫可以有多個NS記錄;其中一個為主
A:address,地址記錄FQDN-->IPV4
AAAA:地址記錄,FQDN-IPv6
CNAME:Canonical Name:別名記錄
PTR:Pointer ,IP--->FQDN
MX:mail eXchanger,郵件交換器
優先級:0-99,數字越小,優先級越高
資源記錄類型還有很多種,這只是其中幾種而已

3.資源記錄的定義格式:
語法:name [TTL] IN RR_TYPE value
資源記錄類型:SOA,NS,MX,A,AAAA,CANME,PTR
區域傳送:AXRF,IXFR
資源記錄定義的格式:
name [ttl] IN RR_TYPE value

SOA:
name:當前區域的名字;例如"magedu.com.",或者"2.3.4.in-addr.arpa.";
區域名字可以用@取代
value:由多部分組成
1.當前區域的區域名稱(也可以使用主DNS服務器名稱)
2.當前區域管理員的郵箱地址,但地址中不能使用@符號,使用“."取代
3.(主從服務協調屬性的定義以及否定答案的TTL)
{serial,refresh,retry,expire,negative answer}
serial,refresh time,retry time,expire time,否定答案的TTL
M,H,D,W
例如:SOA

        magedu.com.  86400 IN  SOA  mt.com. admin.mt.com.  (
                                2017010801;serial 是為以內
                                2H ;refresh time刷新時間
                                10min; retry
                                1W;expire
                                1D;否定答案的TTL值
                                )
        SOA:6+5=11
        NS:5
        MX:6

例如:NS
name:當前區域的名稱
value:當前區域的某DNS服務器的名字,例如ns.mt.com.

mt.com. 86400 IN NS ns1.mt.com.
例如:MX
name:當前區域的區域名稱
value:當前區域某郵件交換服務器的主機名
註意:MX記錄可以有多個;但每個記錄的value之前應該有一個數字表示其優先級
mt.com. 86400 IN MX 10 mx1.mt.com.
mt.com. 86400 IN MX 9 mx2.mt.com.
例如:A
name:某FQDN,例如www.mt.com.
value:某v4地址
例如:

www.mt.com. IN A 1.1.1.1
www.mt.com. IN A 1.1.1.2
bbs.mt.com. IN A 1.1.1.1
例如:AAAA
name:FQDN
value:IPv6地址
例如:PTR
name:IP地址,有特定格式,IP反過來寫,而且加特定後綴
例如1.2.3.4的記錄應該寫為 4.3.2.1.in-addr.arpa.
value:FQDN

4.3.2.1.in-addr.arpa. IN PTR www.mt.com.
例如CNAME:
name:別名FQDN
value:FQDN格式的正式名字

web.mt.com. IN CNAME www.mt.com.

註意:
1.TTl可以從全局集成
2.@表示當前區域的名稱
3.相鄰的兩個記錄,其name相同時,後面的可以省略
www.mt.com. IN A 1.1.1.1
www.mt.com. IN A 1.1.1.2
可以
www.mt.com. IN A 1.1.1.1
IN A 1.1.1.2
//後一個不寫
4.MX,NS等類型的記錄其value為一個FQDN,此FQDN應該有一個A記錄

4.緩存DNS
緩存DNS server:自己不負責任何域,只負責幫人查找解析
DNS服務器類型:
不負責解析域:
緩存DNS //接受所有DNS查詢,進行遞歸解析
負責解析至少一個域:
主DNS
輔助DNS //備份以及負載均衡

緩存DNS
一個DNS服務器可以不包含任何域的配置信息,它將接收到的所有DNS查詢進行遞歸解析,
將解析的結果返回給我們的查詢客戶端,並且將查詢結果緩存下來,
這樣的服務器就稱之為Caching DNS Server

三:DNS的實現方式
DNS的開源實現:
dnsmasp //提供dhcp和bind
bind //這裏重點講bind
1.DNS and Bind
BIND的安裝配置:
BIND:berkely Internet Name Domain-->ISC.org{bind,dhcpd}
早期為伯克利負責維護,後期為ISC
dns:協議
bind:dns的一種實現
named:bind程序的運行的進程名
yum info bind
yum list all bind*

程序包:
bind-utils:被bind和bind-utils包中的程序共同用到的文件
bind:提供dns server程序,以及幾個常用到的測試程序
bind-chroot:可以選擇程序,根切換,早期bind有漏洞,為了減少破壞,使用chroot
:所有配置文件都放在chroot目錄中,然後所有的環境和配置文件都放在哪裏

rpm -ql bind-utils //提供的命令有:dig,host,nslookup,nsupdate
yum install bind
rpm -ql bind //查看bind的所有生成文件

主配置文件:/etc/named.conf
或包含近來的其他文件
/etc/named.rfc1912.zones
/etc/named.root.key
解析庫文件:
/var/named/目錄下
一般名字為:ZONE_NAME.zone
註意:
1.一臺DNS服務器可同時為多個區域提供解析
2.必須要有根區域文件:named.ca
3.還應該有兩個區域解析庫:localhost和127.0.0.1的正反向解析
named.localhost:正向,named.loopback:反向

rndc:名稱服務器的遠程控制工具
remote name domain controller: 953/tcp但默認監聽於127.0.0.1地址,因此僅允許本地使用
修改配置文件:cp /usr/share/man/man5/rndc.conf.5.gz 解壓到/etc/rndc.conf

2.緩存名稱服務器
bind程序安裝完成之後,默認即可做緩存服務器
其他用戶指向該name server即可,緩存服務器,允許本地遞歸即可
systemctl start named.service

註意:
1.named監聽tcp和udp的53號端口
2.緩存域名服務器是不需要定義任何區域的,區域主要由:v4&v6的正反向解析記錄即可
因為他不需要負責任何區域,只需要解析自己就可以了

四:主配置文件格式
全局配置段:
options{...}
日誌配置段:
logging{...}
區域配置段:
zone{...}
由本級負責解析或者轉發的區域
註:每個配置語句都以分號結尾,否則即為語法錯誤

1.緩存名稱服務器的配置:
監聽能與外部通信的地址
listen-on port 53 { 192.168.4.100; }; //花括號前後都有空格,監聽地址分號結尾

dnssec-enable no; //可能會影響實驗
dnssec-validation no;
allow-query { 192.168.4.0/24; }//允許內網主機查詢

//bindkeys-file "/etc/named.iscdlv.key"; //已經關閉了dnssec因此這個密鑰文件就沒有用了
註釋: /* ,,, */ 多行註釋, //單行註釋
named-checkconf //檢查語法錯誤
named-checkconf /etc/namned.conf //指定配置文件位置
systemctl restart named.service
netstat -tnul |grep 53
tcp:953是rndc
2.vim /etc/resolv.conf 修改 :最多只能有個三個
nameserver 192.168.4.100 //監聽的地址指向自己
ping www.baidu.com //在緩存nameserver上測試,能夠ping通
dig -t A www.baidu.com //在本機使用,也可以,速度比較快
Got answer:請求得到了答案
flags: qr:查詢請求 ra:請求答案

ANSWER SECTION:可能是本地的緩存解析的
AUTHORITY SECTION:權威段,誰負責解析的
ADDITIONAL SECTION:附加段,真實的ip對應
只要本地測試可以,就證明,本地做緩存服務器是可以的

3.允許其他人查詢
/etc/named.conf
allow-query { 192.168.4.0/24; };
dig -t A www.baidu.com @192.168.4.100 //其他內部主機測試即可

小結:自己把nameserver指向自己,listen-on port修改對就可以了

五:測試工具
dig,host,nslookup
1.dig命令
dig [-t RR_TYPE] name @Server
用於測試dns系統,因此不會使用hosts文件
查詢:
+[no]trace :跟蹤解析過程
+[no]recurse:進行遞歸解析
dig +trace -t A www.baidu.com //追蹤查詢過程
1.找根:一個根返回頂級域 .com的所有dns,只有一個會響應 .--> .com
2. com服務器,告訴我們baidu的所有dns,只有一個響應,.com-->baidu.com.
3. baidu.com的服務器,找到www,www是一個cname,因此返回
dig -x 192.168.4.100 //反向解析

模擬完全區域傳送
dig -t axfr DOMAIN [@server}

2.host命令
host -t A www.baidu.com
host -t NS baidu.com //baidu.com這個域內的NS
host [-t RR_TYPE] name SERVER_IP
3.nslookup命令
nslookup [options] [name] [server]
nslookup>
server IP:指定nameserver
set q=RR_TYPE
192.168.0.1
4.rndc named服務控制命令
rndc status //查看狀態
rndc stop //可以關閉
rndc flush //清空服務器緩存
rndc reload [zone] //重載
rndc refresh zone //該zone轉為維護模式,不讓其解析


個人使用:
申請域名+ip
在註冊商:申請修改ns記錄:域名==ip



六:配置正向區域
以為mt.com域為例
1.定義區域
主配置文件或者主配置文件的輔助配置文件中實現
zone "ZONE_NAME" IN {
type {master|slave|hint|forward} //hint提示為根區域
file "ZONE_NAME.ZONE";
};
2.建立區域數據文件
在/var/named目錄下建立區域數據文件

3.讓服務器重載配置文件和區域數據文件
檢查語法格式
4.權限及屬組修改
chgrp named mt.com.zone
chmod o= mt.com.zone

172.16.4.100 ns1,bbs
172.16.4.12 mx1
172.16.4.13 mx2
172.16.4.14 www,web
172.16.4.15 bbs
實現:
1.vim /etc/named.rfc1912.zones //rfc:Request For Comments註釋請求文檔,各種協議標準文檔

            zone "mt.com" IN {        //mt.com這裏不加“."
                    type master;
                    file "mt.com.zone";   //默認位置位/var/named目錄中
            };
            ===================================
            zone "4.168.192.in-addr.arpa" IN {  //反向區域
                    type master;    
                    file "192.168.4.zone";        // 正向文件名
            }


================================================
2. /var/named/mt.com.zone
語法:name [TTL] IN RR_TYPE value{[域名|DNS_name]+mail}
例如:SOA
mt.com. 86400 IN SOA mt.com. admin.mt.com. (
2017010801;serial 是為以內
2H ;refresh time刷新時間
10min; retry
1W;expire
1D;否定答案的TTL值
)
value:可以不寫全,但是一定尾部不能帶 “." :ns1
寫全的話,是一定要帶"." :ns1.mt.com.
會自動補齊/etc/named.rfc1912.zones中定義的
zone"mt.com"
或者開頭:$ORIGIN mt.com.
反向區域中是不需要MX記錄的
反向記錄的第一條NS記錄,value要寫全,因為自動補齊的內容是4.168.192
======================================================
正向:

 $TTL 3600                //註:這個是$而不是@
 $ORIGIN mt.com.
 @    IN    SOA    ns1.mt.com.    admin.mt.com.    (  //註,這是小括號,不是花括號
                            2017030101
                            1H
                            10M
                            3D
                            1D )
                    IN    NS        ns1    
                    IN    MX 10    mx1    
                    IN    MX 20    mx2    
                ns1    IN    A    172.16.4.100
                mx1    IN    A    172.16.4.12
                mx2    IN    A    172.16.4.13
                www    IN    A    172.16.4.14
                web    IN    CNAME    www
                bbs    IN    A    192.168.4.15
                bbs    IN    A    192.168.4.100

===========================================================
反向: //出錯很有可能是IP地址寫錯了

$TTL 3600
$ORIGIN 4.168.192.in-addr.arpa.
@    IN    SOA    ns1.mt.com.    admin.mt.com. (
                                2017030101
                                1H
                                10M
                                3D
                                12H )
                    IN    NS    ns1.mt.com.
                100    IN    PTR    ns1.mt.com.
                100    IN    PTR    bbs.mt.com.
                12    IN    PTR    mx1.mt.com.
                13    IN    PTR    mx2.mt.com.
                100    IN    PTR    www.mt.com.
                14    IN    PTR    web.mt.com.
                15    IN    PTR    bbs.mt.com.

========================================================
3.named-checkconf
named-checkzone mt.com /var/named/mt.com.zone
rndc status;rndc reload ;rndc status
number of zones:會發生改變
測試:
dig -t NS mt.com
dig -t MX mt.com
dig -t A bbs.mt.com //兩次執行可能會發生變化
4.修改屬性
chown :named mt.com.zone
chmod o= mt.com.zone //取消其他人的權限

chmod o= 192.168.4.zone
chgrp named 192.168.4.zone
5.測試
dig -x 192.168.4.100

註意:rpm -ql bind //假如刪除了bind的配置可以到/usr/share/man/man5中找回配置文件
Windows查看查看DNS緩存:
ipconfig /displaydns

解析順序驗證:

1.[root@localhost ~]# cat /etc/nsswitch.conf |grep -i name
# An example Name Service Switch config file. This file should be
# dns Use DNS (Domain Name Service)
hosts: files dns myhostname //先從hosts文件(files),後采用dns
2.cat /etc/resolv.conf
nameserver 8.8.8.8

本文出自 “黑馬騰空” 博客,請務必保留此出處http://hmtk520.blog.51cto.com/12595610/1983897

dns詳解(一)