DNS——Domain Name Service,協議(C/S,53/udp,53/tcp)
BIND——Berkeley Internet Name Domain,ISC(www.isc.org)
互聯網絡上主機之間的通信依靠的是IP,而人或程序一般使用機器名稱,名稱轉換為地址的過程,解析,計算機名稱(域名稱)轉換為IP地址,域名解析。
本地名稱解析配置文件:hosts
? ? Linux系統:/etc/hosts
? ? Windows系統:%WINDOWS%/system32/drivers/etc/hosts
? ? 如:1.1.1.1 www.mysitename.com
? ? ? ? ? ? 2.2.2.2? www.isc.org
當本地主機訪問www.mysitename.com時,查詢這個名稱解析配置文件,找到對應的IP,訪問之。當網絡上的主機很少時,每臺機器維護一個本地的配置文件還比較容易,但隨著網絡擴展,主機越來越多,這種方式就無法適應。
在網上一臺服務器上維護一個hosts,所有主機要訪問某個名稱時,就到這臺機器上查找hosts文件,但是當超過一定規模時,對這個hosts文件的維護和訪問查找也變得困難和緩慢。
于是開始劃片而治,形成DNS樹狀結構,namespace,名稱空間。
Top Level Domain:tld,頂級域
? ? com,edu,mil,gov,net,org,int,。。。
頂級域分三類:組織域、國家域(.cn、.jp、...)、反向域。
域是一個范圍,域中有很多主機,主機的多少是域大小的根本因素。
一般域名是指的一個范圍,而常說的訪問某個域名,如www.abc.com,說的是主機的域名,即主機名加上域名,域名最右邊是點號,代表根,必須要有的,平時使用沒有是因為軟件幫我們自動添加。
理論上,客戶機訪問一個主機域名主機的過程:
上面圖示是一個理論上的過程,但是如果這樣,客戶機會很麻煩,實際中,客戶機不會頻繁的去訪問各個域管理機,而是會直接問詢設置中的域服務器,我們的主機IP地址設置中都會設置主DNS服務器地址,備DNS服務器地址等,客戶機是訪問這個DNS服務器的,由他來完成上面的過程。
DNS查詢類型:
? ? 遞歸查詢:發出一次查詢,就能得到最終結果的查詢,如客戶機向其DNS服務器發出的查詢。
? ? 迭代查詢:客戶機的DNS服務器查找到最終IP的過程,是迭代查詢,可能需要多次查詢。
這里,客戶機的DNS服務器只是一個代理,并不是真正的DNS服務器,只是負責幫助迭代查找域名對應IP的,而一個域的域服務器,才是這個域的負責者,負責維護記錄本域的所有信息。
名稱服務器:域內負責解析本域內的名稱的主機;域只是一個概念,落到實處,就是域的名稱服務器。
? ? 根服務器:13組服務器,這13組服務器中記錄了頂級域的名稱服務器與域名的對應信息。
解析類型:
? ? Name --> IP
? ? IP --> Name
? ? 注意:正反向解析是兩個不同的名稱空間,是兩顆不同的解析樹;
DNS服務器的類型:
? ? 主DNS服務器
? ? 輔助(從或備)DNS服務器
? ? 緩存DNS服務器
? ? 轉發器
主DNS服務器:維護所負責解析的域內解析庫服務器;解析庫由管理員維護;
從DNS服務器:從主DNS服務器或其他的從DNS服務器那里“復制”(區域傳遞)一份解析庫;
? ? 序列號:解析庫的版本號,前提:主服務器解析庫內容發生變化,其序列號遞增;從服務器通過序列號判斷是否需要同步解析庫;
? ? 刷新時間間隔:從服務器從主服務器請求同步解析庫的時間間隔;
? ? 重試時間間隔:從服務器從主服務器請求同步解析庫失敗時,再次嘗試的時間間隔;應小于刷新間隔,否則沒有意義了。
? ? 過期時長:從服務器始終聯系不到主服務器時,多久之后放棄從服務器角色,停止提供服務;?
? ? “通知”機制:主服務器內容修改后,主動通知從服務器。? ?
區域傳遞:
? ? 全量傳遞:傳遞整個解析庫;
? ??增量傳遞:傳遞解析庫變化的那部分內容;
DNS:
? ? Domain:
? ? ? ? 正向:FQDN --> IP
? ? ? ? 反向:IP --> FQDN
? ? ? ? 各需要一個解析庫來分別負責本地域名的正向和反向解析
? ? ? ? 正向區域:
? ? ? ? 反向區域:
FQDN:Full Qualified Domain Name,完全合格域名,或完全限定域名,正式域名
? ? www.mydomain.com.
一次完整的查詢請求經過的流程:
? ? Client --> hosts文件?--> Local Cache DNS --> DNS Server(recursion) --> Server Cache?--> iteration(迭代)?
? ? 解析答案:
? ? ? ? 肯定答案:
? ? ? ? 否定答案:請求的條目不存在等原因導致無法返回結果;
? ? ? ? 權威答案:
? ? ? ? 非權威答案:
區域解析庫:由眾多RR組成
資源記錄:Resource Record,RR
? ? 有記錄類型的概念,記錄類型:A,AAAA,PTR,SOA,NS,CNAME,MX
? ?SOA:Start Of Authority,起始授權記錄:一個區域解析庫有且僅能有一個SOA記錄,而且必須為解析庫的第一條記錄;
? ??A:internet Address,作用,FQDN?--> IP
? ? AAAA:FQDN?--> IPv6
? ? PTR:PoinTeR,IP?--> FQDN
? ? NS:Name Server,專用于標明當前區域的DNS服務器
? ? CNAME:Canonical Name,別名記錄
? ? MX:Mail eXchanger,郵件交換器,一個域接收郵件的主機
資源記錄定義的格式:
? ? 語法:name [TTL]? IN? ?rr_type? ?value??
? ? 注意:1)TTL可從全局繼承;2)@可用于引用當前區域的名字;3)同一個名字可以通過多條記錄定義多個不同的值,此時DNS服務器會以輪詢方式響應;4)同一個值也可能有多個不同的定義名字,通過多個不同的名字指向同一個值進行定義,此僅表示通過多個不同的名字可以找到同一個主機;
? ? SOA:
? ? ? ? name:當前區域的名字,如:"mydomain.com.";
? ? ? ? value:由多部分組成
? ? ? ? 1)當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字;
? ? ? ? 2)當前區域管理員的郵箱地址,但地址中不能使用@符號,一般用.替換,如:admin.mydomain.com;
? ? ? ? 3)(主從服務協調屬性的定義以及否定答案的統一的TTL)
? ? 例如:mydomain.com.? 86400 IN SOA? ns.mydomain.com.? admin.mydomain.com.? ? (
? ? ? ? 2024051001;序列號
? ? ? ? 2H? ;刷新時間
? ? ? ? 10M? ;重試時間
? ? ? ? 1W? ;過期時間
? ? ? ? 1D? ;否定答案的TTL值
? ? ? ? ?)
? ? NS:
? ? ? ? name:當前區域的名字
? ? ? ? value:當前區域的某DNS服務器的名字,如ns.mydomain.com.;
? ? ? ? ? ? 注意:一個區域可以有多個NS記錄;
? ? ? ? 如:
? ? ? ? mydomain.com.? ?IN? ?NS? ? ns1.mydomain.com.
? ? ? ? mydomain.com.? ?IN? ?NS? ? ns2.mydomain.com.
? ? ? ? 注意:
? ? ? ? ? ? 1)相鄰的兩個資源記錄的name相同時,后續的可省略;
? ? ? ? ? ? 2)對NS記錄而言,任何一個ns記錄后面的服務器名字,都應該在后續有一個A記錄
? ? MX:
? ? ? ? name:當前區域的名字
? ? ? ? value:當前區域的某郵件服務器(smtp服務器)的主機名;
? ? ? ? ? ? 一個區域內,MX記錄可有多個,但每個記錄的value之前應該有一個數字(0~99),表示此服務器的優先級,數字越小優先級越高;
? ? ? ? 如:mydomain.com.? ?IN? ? MX? ? 10? ?mx1.mydomain.com.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?IN? ? MX? ? 20? ?mx2.mydomain.com.
? ? ? ? 注意:對MX記錄而言,任何一個MX記錄后面的服務器名字,都應該在后續有一個A記錄
? ? A:
? ? ? ? name:某主機的FQDN,如www.mydomain.com.
? ? ? ? value:主機名對應主機的IP地址
? ? ? ? 如:
? ? ? ? ? ? www.mydomain.com.? ?IN? ? A? 1.1.1.1
? ? ? ? ? ??www.mydomain.com.? ?IN? ? A? 1.1.1.2
? ? ? ? ? ? mx1.mydomian.com.? ?IN? ? A? ?1.1.1.3
? ? ? ? ? ??mx2.mydomian.com.? ?IN? ? A? ?1.1.1.3
? ? ? ? 注意:為避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址;
? ? ? ? ? ? *.mydomain.com.? ? IN? A? 1.1.1.4
? ? ? ? ? ? mydomain.com.? ? ? IN? A? 1.1.1.4
? ? AAAA:
? ? ? ? name:FQDN
? ? ? ? value:IPv6
? ? PTR:
? ? ? ? name:IP,有特定格式,把IP地址反過來寫,如:1.2.3.4,要寫成:4.3.2.1;而且有特定后綴:in-addr.arpa,所以完整寫法為:4.3.2.1.in-addr.arpa.
? ? ? ? value:FQDN
? ? ? ? 如:
? ? ? ? ? ? 4.3.2.1.in-addr.arpa.? ? ? ?IN? ? PTR? ? www.mydomain.com.
? ? ? ? ? ? 簡寫成:4? ?IN? PTR? ?www.mydomain.com.
? ? ? ? 注意:網絡地址及后綴可省略;主機地址依然需要反著寫;
? ? CNAME:
? ? ? ? name:別名的FQDN
? ? ? ? value:正式名字的FQDN
? ? ? ? 如:? web.mydomain.com.? ? IN? ? CNAME? ? www.mydomain.com.
DNS and BIND:
子域授權:每個域的名稱服務器,都是通過其上級名稱服務器在解析庫中進行授權
? ? 類似根域授權tld:
? ? ?com.? ?IN? ? NS? ? ns1.com.
? ? ?com.? ?IN? ? NS? ? ns2.com.
? ? ?ns1.com.? ?IN? ? A??? ? 2.2.2.1
? ? ?ns2.com.? ?IN? ? A??? ? 2.2.2.2
? ? mydomain.com. 在.com.的名稱服務器上,解析庫中添加資源記錄:
? ? mydomain.com.? ? ?IN? ? NS? ? ? ns1.mydomain.com.
? ? mydomain.com.? ? ?IN? ? NS? ? ? ns2.mydomain.com.
? ? mydomain.com.? ? ?IN? ? NS? ? ? ns3.mydomain.com.
? ??ns1.mydomain.com.? ?IN? ?A? ? ?3.3.3.1
? ??ns2.mydomain.com.? ?IN? ?A? ? ?3.3.3.2
? ??ns3.mydomain.com.? ?IN? ?A? ? ?3.3.3.3
? ? glue record:粘合記錄
域名注冊:
? ? 代理商:萬網,新網;godaddy
? ? 注冊完成以后,想自己用專用服務來解析怎么做?
? ? ? ? 管理后臺:把NS記錄指向的服務器名稱,和A記錄指向的服務器地址設為自己的;
BIND的安裝配置:
dns服務,程序包名bind,程序名named
程序包:
? ??bind、bind-libs、bind-utils
? ? bind-chroot:以/var/named/chroot/為根
bind:
? ? 服務腳本:/etc/rc.d/init.d/named
? ? 主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
? ? 解析庫文件:/var/named/ZONE_NAME.ZONE
? ? ??注意:
????????1)一臺物理服務器可以同時為多個區域提供解析
? ? ? ? 2)必須要有根區域文件:/var/named/named.ca
? ? ? ? 3)應該有兩個(如果包括IPv6,應該更多)實現localhost和本地回環地址的解析庫;
? ? rndc:remote name domain controller,默認與bind安裝在同一主機,且只能通過127.0.0.1來連接named進程,提供輔助性的管理功能,使用953/tcp端口。
安裝:yum install bind -y
安裝完畢,查看安裝的文件:rpm -ql bind
安裝后的文件及目錄:
? /var/named/named.ca:是全球的13個根節點服務器;
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . <file>"
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.cache
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: April 11, 2017
; related version of root zone: 2017041101
;
; formerly NS.INTERNIC.NET
;
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30
;
; FORMERLY NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:84::b
;
; FORMERLY C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c
;
; FORMERLY TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13
D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d
;
; FORMERLY NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
E.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:a8::e
;
; FORMERLY NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f
;
; FORMERLY NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
G.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:12::d0d
;
; FORMERLY AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 198.97.190.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::53
;
; FORMERLY NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fe::53
;
; OPERATED BY VERISIGN, INC.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:c27::2:30
;
; OPERATED BY RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1
;
; OPERATED BY ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:9f::42
;
; OPERATED BY WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35
; End of file
? /var/named/named.localhost:本地localhost的解析庫
$TTL 1D
@ IN SOA @ rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS @A 127.0.0.1AAAA ::1
/var/named/named.loopback::本地回環地址的解析庫
$TTL 1D
@ IN SOA @ rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS @A 127.0.0.1AAAA ::1PTR localhost.
/etc/named.conf:主配置文件
? 全局配置:options{}
? 日志子系統配置:logging{}
? 區域定義:本機能夠為哪些zone進行解析,就定義哪些zone:
? ? zone “ZONE_NAME” IN? {}
? 包含的文件:include “”
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//options {listen-on port 53 { 127.0.0.1; };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 { localhost; };recursion yes;dnssec-enable yes;dnssec-validation yes;/* Path to ISC DLV key */bindkeys-file "/etc/named.iscdlv.key";managed-keys-directory "/var/named/dynamic";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};zone "." IN {type hint;file "named.ca";
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
/etc/named.rfc1912.zones:其他區域的定義
zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };
};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };
};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };
};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };
};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };
};
在解析庫中@代表區域名,就是這里的如localhost.localdomain、localhost
啟動:service named start
查看:通過結果,看到服務只是監聽在127.0.0.1,不會對外服務。
任何服務程序如果期望其能夠通過網絡被其他主機訪問,至少應該監聽在一個能與外部主機通信的IP地址上;
修改方法:將/etc/named.conf中options的第一行刪除或在地址中增加本機的IP地址,如下:
listen-on port 53 { 192.168.138.139; 127.0.0.1; };
緩存名稱服務器的配置:監聽外部地址即可,如上配置后,就成為了緩存名稱服務器。
dnssec:負責dns安全,一般建議關閉
? 關閉dnssec
主配置文件中還需要將allow-query { localhost; } 改為{ any; },recursion yes表示允許遞歸查找。
至此,一個緩存名稱服務器就完成了。
主DNS名稱服務器:
? ? (1)在主配置文件/etc/named.rfc1912.zones中定義區域
? ? zone "ZONE_NAME" IN {
? ? ? ? type master | slave | hint | forward;? ?
????????// master:主區域? slave:從區域;hint:根域;forward:轉發
? ? ? ? file "ZONE_NAME.zone";
? ? ? ? };
zone "mytest.com" IN {type master;file "mytest.com.zone";
};
? ? (2)定義區域解析庫文件
? ? ? ? 出現的內容:
? ? ? ? ? 宏定義:$TTL、$ORIGIN
? ? ? ? ? 資源記錄:RR
? ? 示例:/var/named/mytest.com.zone
$TTL 86400
$ORIGIN mytest.com.
@ IN SOA ns1.mytest.com. admin.mytest.com. (20240510011H5M7D1D )IN NS ns1IN NS ns2IN MX 10 mx1IN MX 20 mx2
ns1 IN A 192.168.138.101
ns2 IN A 192.168.138.102
mx1 IN A 192.168.138.103
mx2 IN A 192.168.138.104
www IN A 192.168.138.101
ftp IN CNAME www
檢查主配置文件是否存在語法錯誤:named-checkconf,將檢測/etc/named.conf及其包含的文件如/etc/named.rfc1912.zones
檢查解析庫文件語法:named-checkzone “zone_name” zone_name.file
如:named-checkzone "mytest.com" /var/named/mytest.com.zone
? ? (3)文件權限
名稱解析相關的文件屬主是root,屬組是named,要將自己創建的文件權限修改:
至此,主DNS服務器配置完畢,可以解析相關域的名稱了。
使用dig命令測試,我們創建的mytest.com區域中有www主機,就解析這個主機:
dig -t A www.mytest.com @192.168.138.139
修改mytest.com.zone文件,添加幾個www.mytest.com的A記錄,即同一個域名多個IP,然后重新加載:service named reload,也可以使用rndc reload
不使用restart,是因為restart會導致很多緩存等信息全部丟失,而reload只是重新加載解析庫文件,其他信息還在。然后再次測試解析:
如果在dig命令中不加@server,則會使用/etc/resolv.conf配置文件中的dns服務器進行解析:
測試命令dig:
? dig [-t type]? name? [@SERVER]? ?[query options]
? dig用于測試dns系統,因此,不會查詢hosts文件進行解析;
? 查詢選項:
? ? +[no]trace:是否跟蹤解析過程
? ? +[no]recurse:是否進行遞歸解析
對于測試的結果,要注意的是flags標記值:
host命令:
? host [-t type] name [SERVER]
nslookup命令:
? nslookup [-option] [name | -] [server]
? 交互式模式:nslookup>
? ? ? server IP:指明使用哪個DNS Server進行查詢;
? ? ? set q=RR_TYPE:指明查詢的資源記錄類型;
???????? ? ? NAME:要查詢的名稱
? ??