DNS簡介
DNS是Domain Name System的簡稱,DNS的主要作用就是講主機名解析成ip地址的過程,因為在計算機網絡當中是通過ip地址來進行主機間通信的,ipv4的地址是32位,人類記憶起來十分困難,更何況ipv6的128位,所以我們需要一個簡單容易記憶的字符串來替換ip地址,當我們訪問www.baidu.com它能知道訪問的是某個ip地址的服務器,這時需要一種機制能夠完成從域名(FQDN)到主機識別的ip地址之間的轉換,DNS沒出現的時候,這個解析過程是通過hosts文件來記錄域名和ip的對應關系,但是host文件有缺陷,只能作用于本機,不能更新同步所有的主機使用,管理起來相當困難。
DNS是一個分布式,分層次的主機名管理架構,通過配置DNS服務器地址,主機不需要知道對應的ip地址就能通過主機名的形式訪問互聯網。DNS利用類似到處抓那個的目錄結構將主機名的管理分配在不同層級的DNS服務器中,經過分層管理,每一集DNS服務器負責部分域名信息,這也就減輕了DNS服務器的負載,同時也方便記錄的更新同步。
DNS服務
dns工作的tcp和udp的53端口,tcp的53端口主要用來傳輸數據,而udp的53端口用來查詢
在linux中,dns服務器的軟件一般使用的是BIND:Bekerley Internat Name Domain,目前這個軟件是由ISC組織來維護,其背后的查詢過程是根據數據來查詢的
本地名稱即系配置文件:hosts
/etc/hosts Linux系統
C:\Windows\System32\drivers\etc\hosts windows系統
兩者的書寫格式相同,格式如下:
1.1.1.1 www.abc.com
1.1.1.1 www.def.com
FQDN是Full Qualified Domain Name的簡稱,叫完整主機名,完整主機名是由主機名和域名構成。那什么是主機名和域名呢,域名是你到域名注冊機構注冊的二級域,比如baidu.com,我們平時訪問的www.baidu.com當中的www就是主機名,主機名和域名之間用實心的點號表示。
在學習文件系統是知道目錄結構的最頂層是根目錄,根是一切文件的七點,DNS同根文件系統一樣都是倒樹狀結構,在最頂層是由一個叫做根服務器,主要負責頂級域名的管理,所謂頂級域名就是像.com、.cn 、.net 、 .gov 、.org 、.edu等等,在下面的頂級域名服務器則負責其所對應的二級域名。如baidu.com,在接下來二級域名服務器負責對應的主機名稱解析或者其三級域名解析,如nes.baidu.com,依次類推
其中根節點是由分布在世界各地的13臺服務器組成,其中10臺位于美國地區,另外三臺設置與英國、瑞典和日本,在13太根服務器當中有1臺為主根服務器放置在美國,其余12臺均為輔助根服務器,所有的根服務器均有美國政府授權的互聯網域名與號碼分配機構ICANN組織統一管理,負責全球互聯網域名根服務器、域名體系和ip地址的管理
DNS域名
根域
一級域名:Top Level Domain 簡稱tld
com edu mil gov net org int
可以分為三類:組織域、國家域(.cn .ca .hk .tw),反向域
二級域名
三級域名
最多127級域名
ICANN(The Internet Corporation for Assign Names and Numbers)互聯網名稱與數字地址分配機構,負責在全球范圍內對互聯網通用頂級域名以及國家和地區頂級域名系統的管理、以及根服務器系統的管理
DNS解析
DNS查詢類型
遞歸查詢:只發出一次請求
迭代查詢:發出多次請求
DNS名稱解析方式
名稱—ip:正向解析
ip—–名稱:反向解析
注意:二者的名稱空間,不是同一個空間,即分為同一顆樹,一次,也不是同一個解析庫
一次完整的查詢請求經過的流程
—>hosts文件—–>DNS local cache —->DNS server(rescursion)
自己負責解析的域:直接查詢數據庫并返回答案
不是自己負責解析的域:server cache—->iteration(迭代)
解析答案
可定答案
否定答案:不存在查詢的鍵,因此,不存在與其查詢鍵對應的值
權威答案:有直接負責的DNS服務器返回的答案
非權威答案
DNS服務器的類型
主DNS服務器:維護所負責解析的域樹數據庫的那臺服務器,讀寫操作均可進行
從DNS服務器:從主DNS服務器哪里或其他的從DNS服務器哪里復制一份,但只能進行讀操作
緩存DNS服務器(轉發器)
復制操作的實方方式
序列號:數據庫的版本號,主服務器內容發生變化時,其版本號迪則呢過
刷新時間間隔:refresh,從服務器沒多久到主服務器檢查順序號更新情況
重試時間間隔:retry,從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔,此時間比刷新時間要短
過期時長:exprire,從服務器始終聯系不上主服務器時,多久之后放棄從主服務器同步數據,停止提供服務否定答案的緩存時長
主服務器通知從服務器隨時更新數據
區域傳送
全量傳送:傳送整個數據庫 axfr
增量傳送:僅傳送變化的數據 ixfr
區域(zone)和域(domain)
baidu.com 域
FQDN—>ip 正向解析庫
ip—>FQDN 反向解析庫
區域數據庫文件
資源記錄Resource 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 Exchange郵件交換器,優先級0-99,數字越小,優先級越高
資源記錄的格式
語法 name [TTL] IN RR_TYPE value
SOA:
name:當前區域的名字,例如:magedu.com或者2.3.4.in-addr.arpa
value:有多部分組成
當前區域的區域名稱(也可以使用主DNS服務器名稱)
當前區域管理員的郵箱地址,但地址中不能使用“@”符號,使用點號代替
主從服務協調屬性的定義以及否定答案的ttl
例如:
magedu.com. 300 IN SOA ns1.magedu.com. admin.magedu.com. (
2016092501 ;序列號位數不能超過10位serial
2H ;刷新時間 refresh
10M ;重試時間 retry
1W ;過期時間 expire
7D) ;否定答案的TTL值 negative answer
NS
name:當前區域的區域名稱
value:當前區域的某DNS服務器的名字,例如:ns.magedu.com.
注意:一個區域可以有多個NS記錄
例如:
magedu.com. 300 IN NS ns1.magedu.com.
magedu.com. 300 IN NS ns2.magedu.com.
MX
name:當前區域的區域名稱
value:當前區域某郵件交換器的主機名
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
注意:MX記錄可以有多個,但每個value之前應該有一個數字表示其優先級
A
name:某FQDN例如:www.magedu.com
value:某iPv4地址
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 2.2.2.2
bbs.magedu.com. IN A 1.1.1.1
注意:
*.magedu.com. IN A 3.3.3.3
magedu.com. IN A 4.4.4.4
避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
AAAA
name:FQDN
value:ipv6
跟A記錄差不過,只不過FQDN對應的地址是128位的ipv6地址
PTR
name:ip地址有特定格式,ip反過來寫,而且加特定后綴,如1.2.3.4的記錄應該寫為4.3.2.1.in-addr.arpa.
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
簡寫為
4.in-addr.arpa. IN PTR www.magedu.com.
注意:網絡地址及后綴可省略;主機地址依然需要反著寫
CNAME
name:FQDN格式的別名
value:FQDN格式的正式名稱
例如:
web.magedu.com. IN CNAME www.magedu.com
注意:
1) TTL值可以從全局繼承
2) @表示當前區域的名稱
3) 相鄰的兩條記錄其name相同時,后一條的name可省略
4) MX,NS等類型的記錄的value為FQDN,此FQDN應該有一個A記錄(正向區域)
域名注冊:
代理商:萬網,新網,godaddy
注冊完成之后,想用自己專用服務來解析,在后臺進行管理,把NS記錄執行服務器的名稱,和A記錄指向的服務器地址
BIND的安裝配置
BIND: Bekerley Internat Name Domain 由ISC組織維護
dns協議
bind:dns協議的一種實現
named:bind程序的運行的進程名
程序包
bind-utils:被bind和bind-utils包中的程序功用用到的庫文件
bind:提供的dns server程序以及常用的測試程序
bind-chroot:選裝,讓named運行與jail(沙箱)模式下(保證bind的安全)
bind
主配置文件:/etc/named.conf
或包含進來其他文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
服務腳本文件
/etc/rc.d/init.d/named unbound.service
解析庫文件
/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
默認與bnd安裝在同一主機,且只能過127.0.0.1鏈接named進程
提供輔助性的?功能 953/tcp
bind程序安裝完成之后,默認即可做緩存名稱服務器使用,如果沒有專門負責解析的區域,直接即可啟動服務
CentOS6 service named start
CentOS7 systemctl strat named.service
配置文件
主配置文件
全局配置段:options { …}
日志配置段:logging {…}
區域配置段:zone{…} 本機能夠為那些zone進行解析,就要定義那些zone
注意:任何服務程序如果期望其能夠通過網絡被其他主機訪問,至少應該監聽在一個能與外部主機通信的ip地址上,每個配置語句必須以分號結尾
緩存名稱服務器的配置
監聽能與外部通信的地址
listen-on port 53
lsten-on port 53 { 10.1.253.65;}
學習時建議關閉dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaslde no ;
關閉僅允許本地查詢
注釋allow-query { localhost;};
檢查配置文件語法錯誤
named-checkconf [ /etc/named.conf]
解析庫文件語法檢查
named-checkzone “magedu.com” /var/named/magedu.com.zone”
測試工具
dig host nslookup
dig命令
dig [-t RR_TYPE] [@server] [query options]
用于測試dns系統,因此不會查詢hosts文件
查詢選項
+[no]trace 跟蹤解析過程
+[no]recurse 進行遞歸解析
反向解析
dig -x ip
模擬完全區域傳送
dig -t axfr domain [@server]
host命令
host[ -t RR_TYPE] name server_ip
nslookup命令
nslookup [-options][name][server]
交互式模式
nslookup>
server ip,已指定的ip為dns服務器進行查詢
set q=RR_TYPE:要查詢的資源記錄類型
name:要查詢的名稱
rndc命令:named服務控制命令
rndc status 查看狀態
rndc flush 清空dns服務器的所有緩存記錄
rndc reload 重載主配置文件和區域解析庫文件
rndc zone 重載區域解析庫文件
rndc trace 遞增debug一個級別
rndc reconfig 重載主配置文件
rndc retransfer zone 手動啟動區域傳送過程,而不管序列號是否增加
rndc querylog 開啟或關閉查詢日志文件/var/log/messages
配置解析一個正向區域
1) 定義區域
2) 建立區域數據文件
3) 讓服務器重載配置文件和區域數據文件
以xiao.com為例
在主配置文件或主配置文件輔助的配置文件中實現
zone “xiao.com” IN {
type master ;
file “zone_name.zone”;
};
注意:區域即為域名
建立區域數據文件(主要記錄為A或AAAA)
在/var/named目錄下創建區域數據文件
文件為/var/named/xiao.com.zone
$TTL 300
@ IN SOA dns.xiao.com. admin.xiao.com. (
2016092501
3H
10M
3D
7D)
IN SOA ns1.xiao.com.
IN MX 10 mx1.xiao.com.
ns1 IN A 172.18.16.112
mx1 IN A 172.18.16.113
www IN A 17218.16.115
web IN CNAME www
bbs IN A 172.18.16.1
bbs IN A 172.18.16.2
修改此文件的屬主為named并將權限改為640
chown named xiao.com.zone
chmod 640 xiao.com.zone
檢查語法錯誤
named-checkconf
named-checkzone “xiao.com” /var/named/xiao.com.zone
讓服務器重新加載配置文件
service named restart
配置一個反向區域
定義區域
在主配置文件或主配置文件輔助文件中實現
zone “16.18.172.in-addr.arpa IN {
type master ;
file “172.18.16.zone” ;
};
注意反向區域的名字反寫的網段地址.in-addr.ara
定于區域解析庫文件(主要記錄為PTR)
示例:區域名稱為172.18.16.zone
@ IN SOA dns.xiao.com. admin.xiao.com. (
2016092501
1H
10M
3D
7D)
IN NS ns1.xiao.com.
112 IN PTR ns1.xiao.com.
113 IN PTR mx1.xiao.com.
115 IN PTR www.xiao.com.
1 IN PTR bbs.xiao.com.
2 IN PTR bbs.xiao.com.
修改此文件的屬主為named并將權限改為640
chown named 172.18.16.zone
chmod 640 172.18.16.zone
檢查語法錯誤
named-checkconf
named-checkzone “16.18.in-addr.arpa” /var/named/ 172.18.16.zone
讓服務器重新加載配置文件
service named restart
測試:使用其他主機來解析
正向解析
反向解析
主從服務器
注意:從服務器區域級別的概念
配置一個從區域
在從服務器上
定義區域
zone “xiao.com” IN {
type slave ;
file “slaves/xiao.com.zone” ;
};
從服務器配置
主服務器配置,只需要在區域數據文件中添加從服務器的NS記錄和A記錄即可
配置文件語法檢查
named-checkconf
重載配置
rndc reload
測試:只需將主服務的區域數據文件序列號變化,重載服務即可,查看日志是否有如下內容
從服務器,不需要重載,查看日志,看是否傳輸成功
注意:
1) 應該為一臺獨立的名稱服務器
2) 主服務器的區域解析庫文件中必須有一條NS記錄執行從服務器
3) 從服務器只需要定義區域,而無需提供解析庫文件;解析庫文件應該放置于/var/named/slaves目錄中
4) 主服務器允許從服務器區域傳送
5) 主從服務器的時間應該同步,可通過ntp進行
6) bind程序的八本應該保持一致,否則,應該從高,主低
DNS服務是由named用戶運行的,/var/named目錄named用戶沒有寫權限,數據時不會直接同步的,而/var/named/slaves目錄的屬主和屬組是named用戶,所以named用戶可以對該目錄可寫,所有區域傳送文件存在在此
在主服務器上配置
確保區域數據文件中每個從服務器配置NS記錄,并且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄且此A后面的地址為真正的從服務器的ip地址,如果沒有添加NS記錄和A記錄,主服務器配置了刷新時間,從服務器以哪個配置的時間到主服務器檢查序列號的變化情況,如果發生變化,就會同步數據
子域授權
正向解析區域授權子域的方法(主服務器)
在主區域數據文件中添加如下內容
ops.xiao.com. IN NS ns1.ops.xiao.com.
ops.xiao.com. IN NS ns2.ops.xiao.com.
ns1.ops.xiao.com. IN A 10.1.252.100
ns2.ops.xiao.com. IN A 10.1.252.198
從服務器添加一個區域和區域數據文件即可
zone “ops.xiao.com” IN {
type master ;
file “ops.xiao.com.zone” ;
};
在區域數據庫目錄下創建區域數據文件ops.xiao.com.zone
$TTL 300
@ IN SOA dns.ops.xiao.com. admin.ops.xiao.com. (
2016092501
3H
10M
3D
7D)
IN SOA ns1.ops.xiao.com.
ns1.ops.xiao.com. IN A 10.1.252.100
www IN A 10.1.252.101
重載配置
rndc reload
這時候就可以在主服務器上測試子域是否能解析
dig -t A www.ops.xiao.com @172.18.16.112
轉服服務器
注意:被轉發的服務器允許你為當前服務器做遞歸
區域轉發:僅轉發對某特定區域的解析請求
zone “zone_name” IN {
type forward ;
forwar {first|only} ;
forwarders { server_ip; } ; 將收到的請求轉發給那臺dns服務器
first:首先轉發,轉發器不響應時,自行去迭代查詢(查找根)
only:只轉發,不響應時,不做任何回應
示例:
另外一個DNS服務器其對xiao.com域本地解析不了,需要將請求轉發到該域的dns服務器上,定義一個zone類型為forward
zone "xiao.com" IN {
type forward;
forward only;
forwarders { 10.1.253.65; 10.1.252.198; };
};
測試:在本機上解析www.xiao.com使用本機來解析
全局轉發:針對凡本地沒有通過zone定義的區域查詢請求通通轉給某轉發器
options {
forward only|first;
forwarders { server ip ; };
};
注意:最好關閉dnssec功能
dnssec-enable no;
dnssec-validation no;
bind中的安全相關的配置
acl訪問控制列表,把一個或多個ip地址歸并一個命令的集合,隨后通過此名稱即可對此集合內的所有主機實現統一調用
acl acl_name {
ip;
net/prelen;
};
示例:
acl mynet {
10.1.0.0/16;
127.0.0.0/8;
};
bind中有四個內置的acl
none:沒有一個主機
any:任意主機
local:本機
localnet:本機所在的ip所屬的網絡
注意:只能先定義,后使用,因此一般定義在配置文件中,處于options前面
訪問控制指定
allow-query { };允許查詢的主機白名單
allow-transfer { };允許向那些主機做區域傳送,默認為向所有主機傳送,應該配置僅允許從服務器能夠傳送
allow-recursion { }; 允許那些主機向當前dns服務器發起遞歸查詢請求
allow-update { };DDNS,允許動態更新區域數據庫中的文件
bind view 視圖
view view_name {
match-clients { };
zone
zone
…
};
示例:
view internal {
match-clients { 10.1.252.100; };
zone “xiao.com” IN {
type master;
file ‘”xiao.com.zone”;
};
};
view external {
match-clients { any; };
zone “xiao.com” IN {
type master;
file ”xiao.com.zone”;
};
};
注意:
1) 一個bind服務器可以定義多個view,每個view定義一個或多個zone
2) 每個view用來匹配一組客戶端
3) 多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件
4) 一旦啟用了view,所有的zone都只能定義在view中
5) 僅在允許遞歸請求的客戶端所在view中定義根區域
6) 客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
DNS排錯
#dig A example.com
<<>> DiG9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<-opcode: QUERY, status: NOERROR, id: 30523
…
SERVFAIL:Thenameserverencountered a problem while processing the query.
可使用dig +trace排錯,可能是網絡和防火墻導致
NXDOMAIN:The queried name does not exist in the zone.
可能是CNAME對應的A記錄不存在導致
REFUSED:The nameserverrefused the client's DNS request due to policy restrictions.
可能是DNS策略導致
NOERROR不代表沒有問題,也可以是過時的記錄
查看是否為權威記錄,flags:aa標記判斷
被刪除的記錄仍能返回結果,可能是因為*記錄存在
如:*.example.com.INA172.25.254.254
注意“.”的使用
避免CNAME指向CNAME記錄,可能產生回環
test.example.com. IN CNAME lab.example.com.
lab.example.com. IN CNAME test.example.com.
正確配置PTR記錄,許多服務依賴PTR,如sshd,MTA
正確配置輪詢round-robin記錄
壓力測試
vim test.txt
xiao.com NS
www.xiao.com A
web.xiao.com A
bbs.xiao.com A
ops.xiao.com A
使用queryperf工具進行壓力測試
queryperf –d test.txt –s 127.0.0.1
打開日志功能
rndc querylog
rndc status
queryperf –d test.txt -s 127.0.0.1
wc -l /var/log/messages 查看里面的壓力測試查詢的記錄
原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/49587