DNS(Domain name server,域名服務器)
是進行域名和與之對應的IP地址轉換的服務器。
我們平時上網都是輸入主機名來訪問網站的,例如:www.baidu.com,這是一個主機名;
倆主機間通信要使用 IP+端口 的方式,因為IP地址不容易被人記憶,所以就使用方便人記憶的主機名,而電腦更容易接受IP地址的方式,所以我們就需要一個‘翻譯官’——域名服務器。它可以把IP轉換為主機名,也可以將主機名轉換為IP地址;
早期,為了提供主機名與IP地址對應的應用,在本地引入了一個hosts文件,里面記錄了每個主機名字和IP地址的對應關系;一個主機名還可以有多個別名。
隨著互聯網內的主機的增多,hosts文件也越來越大,而且還要不斷更新,這種方法就不適用了;
這時,DNS服務器應運而生;
DNS協議采用分層的倒置的樹狀結構機制管理主機名,把大范圍分成多個小范圍。例如:你要申請一個域名baidu.con,在這個域名范圍內添加3個主機:
一個是www,這個域名就是www.baidu.com;
一個主機作為bbs論壇使用,這個域名就是bbs.baidu.com;
一個主機作為blog博客使用,這個域名就是blog.baidu.com;
就是基于這種機制管理主機名的,因此,最頂級的叫根域.(點號)表示,即所有主機名都在根域下;
一級域:按照組織的類型的不同分為:
.com 表示商業機構
.org 表示非盈利性組織
.gov 表示政府機構
.mil 表示軍事機構
.net 表示網絡服務機構
.edu 表示教育機構
.name 表示個人網站
.info 表示信息提供
DNS查詢類型:
遞歸查詢:本地客戶端向本地的DNS服務器查詢,只發出去一次請求,就給它返回答案;就像你找人問路,那個人雖然不知道你的目的地,但他會問朋友或者別人,直到問到答案人后交給你。
迭代查詢:要發出去多次請求,需要自己查詢不同的域名,最后才返回答案。再說上面問路的事,這次是你問A,A說B知道,你去問B吧;你問B,B說C知道,你問C去吧,就這樣,直到你問出答案。
全球有13臺根服務器
域名空間:父域只知道自己直屬子域的地址,子域不知道父域的地址,所有DNS都知道13臺根域的地址;
DNS服務器角色
主DNS:存放區域文件,管理域資源;
輔DNS:沒有自己的區域文件,區域數據是從主DNS復制而來;
緩存服務器:(cache-only):提供高速緩存;
域資源類型
SOA:起始授權機構,定義DNS區域中的權威服務器;
NS:定義DNS區域正在提供DNS服務的主機;
A記錄:主機記錄(正向區域);
PTR指針:反向記錄;
MX:郵件交換記錄;
*:泛域名
CNAME:別名
DNS服務器端口
TCP:53(負責主/輔DNS數據復制)
UDP:53(負責DNS解析)
DNS主配置文件
options { #選項
listen-on port 53 { 192.168.100.136; }; #服務監聽端口為53
listen-on-v6 port 53 { ::1; }; #服務監聽端口為53(ipv6)
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; #DNS加密
dnssec-validation yes; #DNS加密高級算法
dnssec-lookaside auto; #DNS加密的相關東西
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key"; #加密用的key(私鑰公鑰的加密,很強)
};
logging { #日志
channel default_debug {
file "data/named.run"; #運行狀態文件
severity dynamic; #靜態服務器地址(根域)
};
};
zone "." IN { #根域解析
type hint;
file "named.ca"; #根域配置文件
};
include "/etc/named.rfc1912.zones"; #擴展配置文件(新開域名)
/etc/named.rfc1912.zones 文件分析
zone "localhost.localdomain" IN { #本地主機全名解析
type master; #類型為主域
file "named.localhost"; #域配置文件(文件存放在/var/named目錄中)
allow-update { none; }; #不允許客戶端更新
};
zone "localhost" IN { #本地主機名解析
type master;
file "named.localhost";
allow-update { none; };
};