互聯網訪問絕大多數都是基于域名的訪問,互聯網訪問的基礎是基于IP來實現的,因此,需要有一種將域名解析成IP的機制,讓用戶在利用域名訪問時,自動將域名轉換成為對應的IP,這就是DNS的功能。
DNS的基礎概念
DNS:Domain Name Service,基于C/S模式的域名解析服務,應用層協議;監聽在53/udp,53/tcp端口;TCP用來區域傳送; UDP用來解析。
區域(zone)和域(domain)
區域是物理概念,域是邏輯概念。
比如:sfn.cn.這個域
FQDN–>IP:
正向解析庫和正向解析的功能,就是一個正向解析區域。
IP–>FQDN:
反向解析庫和反向解析的功能,就是一個反向解析區域。
一般而言,一個域分為正向解析區域和反向解析區域,但是單純的域卻不一定比區域大,因為父域的區域,可能就比子域的域要大。
區域數據庫文件
主要由資源記錄(RR,resource record)組成。
常見資源記錄類型:SOA、NS、MX、A、AAAA、PTR、CNAME。
SOA:start of authority,起始授權記錄,一個區域解析庫有且只能有一個SOA記錄,且必須放在所有資源記錄的第一條。
NS:name service,域名服務記錄,一個區域解析庫可以有多個NS記錄,一個NS記錄表示一臺DNS服務器,其中一個為主的,其余的為輔的。
MX:mail exchanger,郵件交換器,用于標明域內郵件服務器的地址的記錄,MX記錄可以有多個,其MX記錄有優先級的概念,優先級 0-99,數字越小,優先級越高。
A:address,地址記錄,也就是從FQDN–>IPv4
AAAA:address,地址記錄,從FQDN–>IPv6
PTR:pointer,主要用于實現IP–>FQDN
CNAME:別名記錄。
資源記錄的定義格式
語法:NAME [TTL] IN RR_TYPE VALUE
SOA記錄:
NAME:當前區域的名字,例如:sfn.cn. 或者如果是反向區域,則 1.168.192.in-addr.arpa.
VALUE:有多部分組成
<1>當前區域的區域名稱(也可以使用主DNS服務器名稱);
<2>當前區域的管理員的郵箱地址,但地址中不能使用@符號,一般用點號.來替代;
<3>主從服務的協調屬性的定義以及否定答案的緩存時長,整個內容要用()括號括起來,每行內容之后可以用;分號表示后面的都是注釋信息。
完整的SOA記錄定義示例:
sfn.cn. 86400 IN SOA sfn.cn. admin.sfn.cn (
2016091801 //代表序列號,不能超過10位
2H //代表從服務器向主服務器同步數據的刷新時間間隔,此處表示2小時
10M //表示聯系不上主服務器時,從服務器再次聯系主服務器時的間隔時間,10分鐘
1W //表示過期時間,也就是服務器始終聯系不上主服務器時的最長等待時間,也就是此時間一過,就判定主服務器故障,然后從服務器也停止服務,1周
1D //表示否定答案的緩存時長,1天
)
NS記錄:
可有多個NS記錄,一個NS記錄對應一個DNS服務器,每個NS記錄應該有一個對應的A記錄。
NAME:當前區域的區域名稱
VALUE:當前區域的某DNS服務器的名字,例如ns1.sfn.cn
例如:
sfn.cn. 86400 IN NS ns1.sfn.cn.
sfn.cn. 86400 IN NS ns2.sfn.cn.
MX記錄:
MX記錄可以有多個,一個MX記錄對應一個郵件服務器,每個記錄的VALUE之前應該有一個數字,用于表示其優先級,數字越小,優先級越高。每個MX記錄應該有一個對應的A記錄。
NAME:當前區域的區域名稱
VALUE:當前區域某郵件服務器的主機名
例如:
sfn.cn. IN MX 5 mail1.sfn.cn.
sfn.cn. IN MX 20 mail2.sfn.cn.
A記錄:
FQDN–>IPv4
NAME:某FQDN,如:web.sfn.cn.
VALUE:某IPv4地址
例如:
web.sfn.cn. IN A 1.1.1.1
web.sfn.cn. IN A 1.1.1.2
bbs.sfn.cn. IN A 1.1.1.2
一個主機名額可以有多個IP,一個IP也可以有多個主機名
*.sfn.cn. IN A 10.1.32.1
表示將前面沒有單獨定義的都解析到10.1.32.1
sfn.cn. IN A 10.1.32.1
表示當用戶訪問域名前不帶任何字符時,也即是直接訪問sfn.cn.時解析到的地址是10.1.32.1
$GENERATE 1-254 server$ IN A 1.1.1.$
表示將server1.sfn.cn. 解析的地址為1.1.1.1
server2.sfn.cn. 解析的地址為1.1.1.2
server3.sfn.cn. 解析為1.1.1.3
….
server254.sfn.cn. 解析為1.1.1.254
同理:
$GENERATE 5-20 test$ IN A 1.1.1.2$
表示將test5.sfn.cn. 解析的地址為1.1.1.25
test6.sfn.cn. 解析的地址為1.1.1.26
test7.sfn.cn. 解析為1.1.1.27
….
test20.sfn.cn. 解析為1.1.1.220
AAAA記錄:
FQDN–>IPv6地址,定義方式與A記錄類似
PTR記錄:
反向解析記錄
NAME:IP地址,有特定格式,IP反過來寫,而且要加特定后綴,如:192.168.1.2的記錄應該寫成2.1.168.192.in-addr.arpa。
VALUE:為FQDN
例如:
2.1.168.192.in-addr.arpa. IN PTR bbs.sfn.cn.
CNAME記錄:
別名記錄
FQDN格式的別名;
VALUE:FQDN格式的正式名稱
例如:
web.sfn.cn. IN CNAME www.sfn.cn.
表示web.sfn.cn.是www.sfn.cn.的別名
注意:
<1>TTL值可以從全局繼承,不用每個記錄都單獨定義
<2>@可以用來表示當前的區域的名字
<3>相鄰的兩條記錄,其NAME相同時,后面那條記錄的NAME可以省略
<4>任何MX、NS等類型的記錄的value為一個FQDN,此FQDN應該有一個A記錄