一、DNS和bind簡介
DNS,Domain Name Service,簡稱域名服務,BIND(Berkeley Internet Name Domain)是DNS協議的實現,DNS是因特網上作爲域名和IP地址相互映射的一個分佈式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。
二、DNS解析過程
(圖片來自magedu)
過程解析:當用戶通過域名訪問一個網站時,現在本地查找HOSTS文件中的解析條目,沒有對應的條目,則會查找本地DNS緩存,如果沒有此域名的緩存,則會把解析請求發送給電腦中配置的本地DNS服務器(本地DNS服務器必須支持對客戶端遞歸)。本地DNS服務器接到請求後,如果是其直接負責區域內的主機,則會返回權威答案(aa),否則,查看是否有此條目的緩存記錄,有則返回非權威解析,沒有則將請求發送給根,一層一層迭代請求,直到找到主機所屬直接區域的DNS服務器,如果該區域內有此主機,則返回對應的IP給本地DNS,本地DNS再發送給客戶端,如果該區域內沒有此主機,則查詢失敗,終止查詢過程。
三、相關概念
根域(.)-->一級域(ICCNA)-->二級域(組織域)
一級域:
組織域:.com,.org,.mil,.gov,.edu,
國家域:.cn,.hk,.tw,.jp,.ir,.us,.uk
反向域:.in-addr.arpa
domain:域
zone:區域
namespace:名稱空間
FQDN:full queritify domain name,全稱域
查詢:
遞歸查詢:只發起一次請求,最終能得到答案
迭代:發起一次請求,不一定得到答案
DNS監聽端口:
UDP:53 用戶客戶端查詢域名的請求
TCP:53 用於主從DNS間的區域傳送
DNS服務器的類型:
主DNS服務器:維護所負責解析的域內解析庫服務器;解析庫管理維護;
輔助DNS服務器:從主DNS服務器或其它的從DNS服務器那裏“複製”(區域傳遞)一份解析庫;
緩存DNS服務器:緩存查詢記錄
轉發服務器:只負責轉發請求,不負責查詢
資源記錄的格式:
name [ttl(緩存時間)] IN 資源記錄類型(RRtype) Value
1、SOA
SOA,start of authority,起始授權記錄,一個區域文件有且只能有一個SOA記錄,且爲資源記錄的第一條.
name: 只能是區域名稱,通常可以簡寫爲@,例如:.
value:有n個數值,最主要的是主DNS服務器的FQDN,點不可省略
例子:
@ 600 IN SOA na.magedu.com. 管理員郵箱(admin.dnsstudy.com.)(
serial number ;序列號註釋,十進制數據,不能超過10位,通常使用日期
refresh time ;刷新時間,從服務器從主服務器請求同步解析庫的時間間隔
retry time ;重試時間,從服務器到主服務器請求同步解析庫失敗時,再次嘗試的
;時間間隔;應該小於refresh time
expire time ;過期時間,若主服務器在這個時間內仍無法通信則放棄同步
netgative answer ttl ; 否定答案的緩存時長
)
2、NS:NAME Server,名稱服務器,可以有多條記錄
name:區域名稱,通常可以簡寫爲@
value:DNS服務器的FQDN(可以使用相對名稱)
例子:
@ 600 IN NS ns
3、A:Address,主機名到IP的正向解析,只能定義在正向區域數據文件中
name:FQDN(可以使用相對名稱)
value:IP
例子:
www 600(單位s) IN A 1.2.3.4
www 600(單位s) IN A 1.2.3.5 # 相同FQDN的對應不同的IP時可以做輪詢
www 600(單位s) IN A 1.2.3.4
ftp 600(單位s) IN A 1.2.3.4
4、AAAA:主機名到IPv6的正向解析
5、CNAME:cononical NAME,設置別名
name :FQDN
value :FQDN
例子:
ftp IN CHANE www
6、MX:Mail eXchanger,郵件交換服務器,可以有多個
name:區域名稱,用於標識smtp服務器
value:包含優先級和FQDN
優先級:0-99,數字越小,級別越高,
例子:
@ 600 IN MX 10 mail
@ 600 IN MX 20 mail2
7、PRT:Pointer,反向域名解析記錄,IP 到FQDN,只能定義在反向區域數據文件中,反向區域名稱爲
逆向網絡地址加.in-addr.arpa後綴組成
name:IP,逆向的主機地址,例如172.16.100.7的name爲7.100,完全格式爲7.100.16.172.in-addr.arpa.
value:FQDN
例子:
4.3.2. 600 IN PTR www.test.com.
四、配置文件和工具
主配置文件:定義區域 /etc/named.conf
格式:
options{
//全局選項
}
zone "zone name" {
//定於區域
}
logging{
//日誌文件
}
include:加載別的文件
語法檢查:
name-checkconf 檢查主配置文件
name-checkzone "區域文件" 配置文件
dig 命令:
格式:dig [-t type] [-x addr] name @DNS服務器
選項:+[no]trace [不]適用迭代
+[no]tcp 是否使用tcp
+[no]recurse:是否使用遞歸
五、DNS配置
1、主從DNS服務器正向以及反向同步設置
主服務器(192.168.52.10)/etc/named.conf 配置:
--------------------------start--------------------------------------------------
acl allow_clients { # 設定允許遞歸IP的ACL 192.168.52.0/24; 127.0.0.0/8; }; listen-on port 53 { 192.168.52.10; }; # 監聽主機IP地址192.168.52.10的DNS端口 //allow-query { localhost;}; # 將此項註釋,即允許所有主機查詢 allow-recursion { allow-clients; }; # 允許對應ACL中的IP遞歸,默認yes爲允許所有 //include "/etc/named.root.key"; # 將此項註釋 /*-----------建立正向區域---------------------*/ zone "ops.com" IN { # 增加區域ops.com type master; # 設置爲主區域 file "ops.com.zone"; }; /*-----------建立反向區域---------------------*/ zone "52.168.192.in-addr.arpa" IN { type master; file "192.168.52.ptr.zone"; allow-transfer { 192.168.52.20; };
/*-----------正向區域文件ops.com.zone設置--------*/
[root@Centos6_6-1 ~]# cat /var/named/ops.com.zone $TTL 1D @ IN SOA dns1.ops.com. admin.ops.com. ( 2015091612 8H 15M 7D 1D ) IN NS dns1 IN NS dns2 dns1 IN A 192.168.52.10 dns2 IN A 192.168.52.20 www IN A 192.168.52.10
/*-----------正向區域文件192.168.52.ptr.zone設置---------------------*/
[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone $TTL 1D @ IN SOA dns1.ops.com. admin.ops.com. ( 2015091612 8H 15M 1W 1D ) IN NS dns1.ops.com. IN NS dns2.ops.com. IN MX 10 mail.ops.com. 10 IN PTR dns1.ops.com. 20 IN PTR dns2.ops.com. 10 IN PTR www.ops.com. 15 IN PTR mail.ops.com.
# 設置區域文件訪問權限
[root@Centos6_6-1 named]# chown :named ops.com.zone [root@Centos6_6-1 named]# chown :named 192.168.52.ptr.zone [root@Centos6_6-1 named]# chmod 640 ops.com.zone 192.168.52.ptr.zone
# 檢測區域語法
[root@Centos6_6-1 ~]# named-checkzone ops.com /var/named/ops.com.zone zone ops.com/IN: loaded serial 2015091611 OK
# 檢測named配置文件語法
[root@Centos6_6-1 ~]# named-checkconf [root@Centos6_6-1 ~]# service named restart [root@Centos6_6-1 ~]# cat /var/named/ops.com.zone $TTL 1D @ IN SOA dns1.ops.com. admin.ops.com. ( 2015091612 8H 15M 7D 1D ) IN NS dns1 IN NS dns2 IN MX 10 mail dns1 IN A 192.168.52.10 dns2 IN A 192.168.52.20 www IN A 192.168.52.10 mail IN A 192.168.52.15 pop IN CNAME mail
[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone $TTL 1D @ IN SOA dns1.ops.com. admin.ops.com. ( 2015091612 8H 15M 7D 1D ) IN NS dns1.ops.com. IN NS dns2.ops.com. IN MX 10 mail.ops.com. 10 IN PTR dns1.ops.com. 20 IN PTR dns2.ops.com. 10 IN PTR www.ops.com. 15 IN PTR mail.ops.com.
--------------------------- end -----------------------------------------------
DNS從服務器(192.168.52.20)配置(配置後需重啓服務)
/etc/named.conf :
zone "ops.com" IN { type slave; masters { 192.168.52.10; }; file "slaves/ops.com.zone"; allow-transfer { none; }; }; zone "52.168.192.in-addr.arpa" IN { type slave; masters { 192.168.52.100; }; file "slaves/192.168.52.arpa.zone"; allow-transfer { none; }; };
# 驗證
[root@Centos6_6-1 ~]# tail /var/log/messages #查看日誌文件 ... Sep 18 23:30:59 Centos6_6-1 named[4445]: zone ops.com/IN: sending notifies (serial 2015091611) Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of 'ops.com/IN': AXFR started Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of 'ops.com/IN': AXFR ended ... Sep 19 00:54:27 Centos6_6-1 named[4793]: zone ops.com/IN: sending notifies (serial 2015091612) Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of '52.168.192.in-addr.arpa/IN': AXFR started Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of '52.168.192.in-addr.arpa/IN': AXFR ended
[root@Centos6_6-2 ~]# ll /var/named/slaves/ # 文件已經生成,可以用cat查看裏面內容 是否和主DNS的是否一致 -rw-r--r--. 1 named named 443 Sep 17 07:05 192.168.52.ptr.zone -rw-r--r--. 1 named named 452 Sep 17 07:09 ops.com.zone
# 用dig工具查詢相關RR是否正常
[root@Centos6_6-1 ~]# dig -t NS ops.com @192.168.52.10 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS dns2.ops.com. ops.com. 86400 IN NS dns1.ops.com. ;; ADDITIONAL SECTION: dns1.ops.com. 86400 IN A 192.168.52.10 dns2.ops.com. 86400 IN A 192.168.52.20 [root@Centos6_6-1 ~]# dig -x 192.168.52.10 @192.168.52.10 [root@Centos6_6-1 ~]# dig -t A www.ops.com @192.168.52.20 [root@Centos6_6-1 ~]# dig -t MX ops.com @192.168.52.20
六、子域授權及轉發
子域授權:
1、在父域服務器(192.168.52.10)上區域文件/var/named/ops.com.zone添加一下兩行:
linux IN NS dns.linux dns.linux IN A 192.168.52.30
2、子域服務器(192.168.52.30)上的配置文件/etc/named.conf
# 新增區域 linux.ops.com zone "linux.ops.com" IN { type master; file "linux.opscom.zone"; };
# 子域服務器新建對應linux.ops.com.zone 區域文件
[root@Centos6_6-3 ~]# vim /var/named/linux.ops.com.zone $TTL 1D @ IN SOA dns.linux.ops.com. admin.ops.com. ( 2015091610 8H 15M 7D 1D ) IN NS dns dns IN A 192.168.52.30 www IN A 192.168.52.30
[root@Centos6_6-1 named]# chown :named linux.ops.com.zone [root@Centos6_6-1 named]# chmod 640 linux.ops.com.zone [root@Centos6_6-1 ~]# dig -t A [email protected] ... ;;QUESTION SECTION: ;www.linux.ops.com. IN A ;;ANSWER SECTION: www.linux.ops.com. 86400 IN A 192.168.52.30 ;;AUTHORITY SECTION: linux.ops.com. 86400 IN NS dns.linux.ops.com. ;;ADDITIONAL SECTION: dns.linux.ops.com. 86400 IN A 192.168.52.30
區域轉發:
1、子域域名服務器(192.168.52.30)上的配置文件/etc/named.conf
zone "ops.com" IN { # ops.com區域解析請求轉發到父域域名服務器192.168.52.10 type forward; forwarders { 192.168.52.10; }; };
[root@Centos6_6-3 ~]# dig -t A www.ops.com @192.168.52.30 # 解析父域的域名驗證轉發是否成功 ... ;;QUESTION SECTION: ;www.ops.com. IN A ;;ANSWER SECTION: www.ops.com. 86400 IN A 192.168.52.10 ;;AUTHORITY SECTION: ops.com. 86400 IN NS dns1.ops.com. ops.com. 86400 IN NS dns2.ops.com. ;;ADDITIONAL SECTION: dns2.ops.com. 86400 IN A 192.168.52.20 dns1.ops.com. 86400 IN A 192.168.52.10
六、view(視圖)
視圖可以實現不同的請求返回不同的解析值,這對不同運營商的用戶訪問web服務器時返回解析IP時有非常重要的作用,由於國情原因,跨運營商訪問會出現互聯互通問題,而view就可以結合acl實現聯通用戶訪問web服務器可以解析返回聯通IP,而電信用戶訪問返回電信IP。定義view之後,所有的zone都需要放置在view中,此處在/etc/named.rfc1912.zones 文件中定義視圖,需要把/etc/named.conf文件中的根zone刪除,重新定義到此文件view中,否則會報錯。
配置:
[root@localhost named]# cat /etc/named.rfc1912.zones ... acl ct_ip { 192.168.0.0/16; }; # 模擬定義電信IP ACL acl cnc_ip { 172.16.0.0/16; }; # 模擬定義聯通IP ACL view telecom { # 模擬定義電信view match-clients { ct_ip; }; # 匹配電信 ACL --------------------------------------------------------------------------------------- zone "." IN zone "localhost.localdomain" IN zone "localhost" IN 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 zone "1.0.0.127.in-addr.arpa" IN zone "0.in-addr.arpa" IN 注意:節省篇幅,裏面的value值不列出來。 -------------------------------------------------------------------------------------------------------------------------------------- zone "devops.com." IN { type master; file "devops.com.telecom"; }; }; view unicom { # 模擬定義聯通view match-clients { cnc_ip;any; }; # 匹配聯通ACL,其他不匹配的也默認以聯通視圖解析 zone "devops.com." IN { type master; file "devops.com.unicom"; }; };
[root@localhost named]# cat devops.com.telecom # 定義區域telecom的zone文件 $TTL 1D @ IN SOA dns.devops.com. admin.devops.com. ( 2015091612 8H 15M 1W 1D ) IN NS dns dns IN A 192.168.52.100 www IN A 192.168.52.200
[root@localhost named]# cat devops.com.unicom # 定義區域unicom的zone文件d $TTL 1D @ IN SOA dns.devops.com. admin.devops.com. ( 2015091612 8H 15M 1W 1D ) IN NS dns dns IN A 172.16.0.100 www IN A 172.16.0.200
[root@localhost ~]# ifconfig # 實驗要求,定義了一個模擬電信段IP:192.168.52.100 #和一個模擬聯通段的IP::172.16.0.100 eth0 Link encap:Ethernet HWaddr 00:0C:29:9B:17:8B inet addr:192.168.52.100 Bcast:192.168.52.255 Mask:255.255.255.0 eth0:0 Link encap:Ethernet HWaddr 00:0C:29:9B:17:8B inet addr:172.16.0.100 Bcast:172.16.255.255 Mask:255.255.0.0
驗證:
[root@localhost named]# dig -t A www.devops.com @192.168.52.100 # 驗證電信用戶的訪問解析 ;;QUESTION SECTION: ;www.devops.com. IN A ;;ANSWER SECTION: www.devops.com. 86400 IN A 192.168.52.200 # 成功返回了電信IP ;;AUTHORITY SECTION: devops.com. 86400 IN NS dns.devops.com. ;;ADDITIONAL SECTION: dns.devops.com. 86400 IN A 192.168.52.100
[root@localhost named]# dig -t A www.devops.com @172.16.0.100 # 驗證聯通用戶的訪問解析 ;;QUESTION SECTION: ;www.devops.com. IN A ;;ANSWER SECTION: www.devops.com. 86400 IN A 172.16.0.200 # 成功返回了聯通IP ;;AUTHORITY SECTION: devops.com. 86400 IN NS dns.devops.com. ;; ADDITIONAL SECTION: dns.devops.com. 86400 IN A 172.16.0.100