DNS

1、DNS概念簡述

DNS:Domain Name Service 域名解析服務,工做在應用層,是互聯網的一項服務。它做爲將域名和IP地址相互映射的一個分佈式數據庫,可以令人更方便地訪問互聯網。DNS監聽在TCP和UDP端口53。html

FQDN:全稱域名,如 www.example.comweb

  • www是主機名
  • example.com是域名

實現名稱到IP解析的有三種方式數據庫

  • 分散式解決方案:/etc/hosts,不易管理
  • 集中式解決方案:NIC,若是主機太多,對單一服務的壓力太大
  • 分佈式解決方案:DNS,解決了上倆個方式的不足

權威的DNS服務器:記錄主機名到IP的DNS服務器叫作權威的DNS服務器vim

主從DNS服務器:主服務器記錄發生變化,會同步到從服務器,(主從複製),實現容錯機制緩存

  • 序列號:解析庫版本號,主服務器解析庫變化時,其序列遞增
  • 刷新時間間隔:從服務器從主服務器請求同步解析的時間間隔
  • 重試時間間隔:從服務器請求同步失敗時,再次嘗試時間間隔
  • 過時時長:從服務器聯繫不到主服務器時,多久後中止服務

DNS的查詢類型安全

  • 遞歸查詢:服務器從根開始去找一級一級的找到目標主機,直到找到,負責到底
  • 迭代查詢:根服務器給了主機所在的域的IP,並無直接給出結果

DNS的解析類型:正反向解析是兩個不一樣的名稱空間,是兩棵不一樣的解析樹服務器

  • 正向解析:FQDN --> IP網絡

  • 反向解析:IP ---> FQDN 如郵件服務器須要用到反向解析技術session

DNS服務器的類型架構

  • 主服務器:管理和維護所負責解析的域內解析庫的服務器
  • 從服務器:從主服務器或從服務器「複製」(區域傳輸)解析庫副本
  • 緩存服務器

DNS的工做原理

  1. 客戶端向離它最近的DNS服務器發起了查詢請求,通常是由運營商提供
  2. 若是代理DNS服務器有記錄則直接能夠返回給客戶端;若是沒有記錄則去根DNS服務器請求,根DNS並不會存儲因此的主機名對應IP的記錄,它只會記錄它的子域的IP,例如.com等後綴的域,代理DNS服務器會拿到.com域的DNS服務器IP
  3. 而後再將請求發往.com.域的DNS服務器,若是仍是沒有找到主機,則再往它的下一級找,直到找到具體的主機,把IP返回給客戶端,同時代理DNS服務器也會緩存一份到本地

一次完整的查詢請求通過的流程:Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 頂級域名DNS-->二級域名DNS…

DNS域名

  • 根域:目前有13個根集羣服務器,美國10臺,日本1臺,荷蘭1臺,瑞典1臺
  • 一級域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 組織域、國家域(.cn, .ca, .hk, .tw)、反向域 等
  • 二級域名
  • 三級域名
  • 最多127級域名

ICANN(The Internet Corporation for Assigned Names and Numbers)互聯網名稱與數字地址分配機構,負責在全球範圍內對互聯網通用頂級域名(gTLD)以及國家和地區頂級域名(ccTLD)系統的管理、以及根服務器系統的管理

DNS服務管理工具

dig:只用於測試dns系統,不會查詢hosts文件進行解析

  • -x IP :測試反向解析
  • -t axfr ZONE_NAME @SERVER :模擬區域傳送
  • -t NS . @a.root-servers.net :查詢全部的根DNS服務器

host

  • -t:指定查詢記錄類型
  • host www.dongfei.tech 192.168.0.7 :向192.168.0.7查詢www.dongfei.tech這個域名

rndc

  • reload: 重載主配置文件和區域解析庫文件
  • reload zonename: 重載區域解析庫文件
  • retransfer zonename: 手動啓動區域傳送,而無論序列號是否增長
  • notify zonename: 從新對區域傳送發通知
  • reconfig: 重載主配置文件
  • querylog: 開啓或關閉查詢日誌文件/var/log/message
  • trace: 遞增debug一個級別
  • trace LEVEL: 指定使用的級別
  • notrace:將調試級別設置爲 0
  • flush:清空DNS服務器的全部緩存記錄

named-checkconf:檢查配置文件的語法

named-checkzone "dongfei.com" /var/named/dongfei.com.zone :查詢區域數據庫文件的語法

2、DNS服務

DNS的實現:bind(Bekerley Internat Name Domain ) ,由 ISC (www.isc.org) 維護,本章全部配置實例的bind版本爲 :bind-9.9.4-61.el7.x86_64

軟件包名:bind

服務名:named

提供的服務:DNS域名解析

主配置文件:/etc/named.conf

options {  #全局選項
    listen-on port 53 { 127.0.0.1; };  //默認監聽本機的53號端口,若是沒有其餘需求則註釋掉
    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|no;  //遞歸查詢,默認開啓
    dnssec-enable yes;  //sec功能,與安全加密傳輸相關的選項,若是要作轉發,須要關閉此選項
    dnssec-validation yes;  //同上一條,須要關閉
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
    allow-transfer { none; }:容許區域傳送的主機;白名單,默認開啓,建議關閉
};

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";

DNS解析數據庫文件存放位置:/var/named/

區域定義:/etc/named.rfc1912.zones

zone "test.com" IN { //internation 記錄
    type {master|slave|hint|forward};   //類型,主服務器
    file "test.com.zone";  //區域數據庫文件
};

區域文件模板:/etc/named.rfc1912.zones

# cat /var/named/named.localhost 
$TTL 1D  #默認的TTL值
@       IN SOA  @ rname.invalid. (                            #SOA記錄
                                        0       ; serial        #序列號
                                        1D      ; refresh       #主從複製的時間間隔
                                        1H      ; retry         #若是主從複製失敗重試時間
                                        1W      ; expire        #失效時間
                                        3H )    ; minimum       #否認答案的TTL值
        NS      @           #名字服務器記錄
        A       127.0.0.1    #正向解析記錄
        AAAA    ::1          #IPv6的正向解析記錄

區域解析數據庫文件:

資源記錄:Resource Record 簡稱 RR

語法格式:name [TTL] IN rr_type value

  • name:當前區域的名字,列如 www.example.com.,注意:最後的 "." 必定要加,若是不加則會把你的域名當成區域名字,再在後邊加上你的默認域名。 「@」:表示當前域名的名字

TTL:例如$TTL 1D的意思是默認的TTL值爲1天

TTL(Time- To-Live),簡單的說它表示一條域名解析記錄在DNS服務器上緩存時間.當各地的DNS服務器接受到解析請求時,就會向域名指定的DNS服務器發出解析請求從而得到解析記錄;在得到這個記錄以後,記錄會在DNS服務器中保存一段時間,這段時間內若是再接到這個域名的解析請求,DNS服務器將再也不向DNS服務器發出請求,而是直接返回剛纔得到的記錄;而這個記錄在DNS服務器上保留的時間,就是TTL值。

同一個名字能夠經過多條記錄定義多個不一樣的值;此時DNS服務器會以輪詢方式響應

同一個值也可能有多個不一樣的定義名字;經過多個不一樣的名字指向同一個值進行定義;此僅表示經過多個不一樣的名字能夠找到同一個主機

  • IN:關鍵字
記錄類型
  • A :正向解析,名字到IP
主機名(簡稱只寫主機名,如www)   A   ip地址

@   A   192.168.0.12        //不須要輸入www,直接輸入域名則可訪問此網站
*   A   192.168.0.12      //泛域名解析,只要請求的是這個域,可是沒有匹配的主機,則應答此條記錄
$GENERATE 1-254 websvr$ A 192.168.0.$   //循環,表示websvr1 A 192.168.0.1 到 websvr254 A 192.168.0.254的254條記錄
  • AAAA:正向解析,名字到IPV6
  • PTR:反向解析
12  PTR websrv.dongfei.com.
14  PTR web2srv.dongfei.com.
100 PTR mailsrv.dongfei.com.
  • NS:名字服務器記錄,記錄誰是這個域的DNS服務器,包括主服務器和從服務器
NS  dns  //表示192.168.0.1這臺主機是這個域的dns服務器
dns     A   192.168.0.1
  • CNAME:別名記錄
websrv  A   192.168.0.10
websrv  A   192.168.0.11
websrv  A   192.168.0.12
www     CNAME   websrv   //訪問www.xxxx.com的時候則表明訪問192.168.0.10-12,DNS會作輪調應答,實現負載均衡的功能
  • MX:郵件記錄
@       MX  10  mailsrv1
@       MX  20  mailsrv2
mailsrv1    A   192.168.0.100
mailsrv2    A   192.168.0.200
  • SOA:起始受權記錄,記錄域中的主DNS服務器,一個區域解析庫中只能有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄

SOA記錄的格式:域名稱 IN SOA 主DNS主機名 域管理員郵箱 (序列號 主從同步的時間間隔 同步失敗的嘗試時間間隔 聯繫不上主DNS多長時間後失效 域名沒法找到,在多長時間內不會再去查詢)

@ IN    SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )

實例1:配置DNS主服務器的正向解析

​ 1)安裝bind

# yum install bind
# systemctl start named

​ 2)修改主配置文件,將下邊倆條註釋掉

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };  //監聽本機的全部地址
//  allow-query     { localhost; };  //容許給全部客戶端解析

​ 3)修改區域數據文件

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {     //internation 記錄
    type master;            //類型,主服務器
    file "dongfei.com.zone";  //區域數據庫文件,指向/var/named/dongfei.com.zone
};

​ 4)新建區域解析數據庫文件,/var/named/dongfei.com.zone

# vim /var/named/dongfei.com.zone
$TTL 1D  //表明全局的TTL值
@ IN    SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H ) //SOA記錄,按格式寫
        NS  dns1            //NS記錄,域中有幾個DNS服務器都要寫出來
dns1    A   192.168.0.7      //NDS服務器的A記錄,0.7是本機的IP
www     A   192.168.0.6      //一條正向解析記錄,這裏的0.6是web服務器

# chgrp named /var/named/dongfei.com.zone  //切記,修改文件的權限和所屬組,保證named進程有此文件的可讀屬性
# chmod 640 /var/named/dongfei.com.zone
# ll /var/named/dongfei.com.zone
-rw-r-----. 1 root named 120 Jun  1 19:39 /var/named/dongfei.com.zone

​ 5)測試

# named-checkconf  //檢查主配置文件
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone  //檢查
# rndc reload  //重載配置文件
# dig www.dongfei.com @192.168.0.7  //在客戶端上使用dig命令測試,若是返回有如下值則說明成功
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6

實例2:配置DNS主服務器的反向解析

​ 1)在/etc/name.rfc1912.zone中加入

zone "0.168.192.in-addr.arpa" IN {  //地址須要反着寫,與正向解析不一樣,是另外一顆樹
    type master;
    file "192.168.0.zone";
};

​ 2)建立區域數據文件

# vim /var/named/192.168.0.zone
$TTL 1D
@ IN    SOA dns.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
                        NS  dns.dongfei.com.
dns.dongfei.com         A   192.168.0.7
100                     PTR mail.dongfei.com.

# chgrp named /var/named/192.168.0.zone
# chmod 640 /var/named/192.168.0.zone
# rndc reload

​ 3)重載配置文件,測試

# vim /etc/resolv.conf
nameserver 192.168.0.7  //在客戶端將DNS服務器指向咱們配置的DNS服務器
# dig -x 192.168.0.100  //測試,若是出現如下信息則表示成功
;; ANSWER SECTION:
100.0.168.192.in-addr.arpa. 86400 IN    PTR     mail.dongfei.com.

實例3:DNS服務的動態更新

​ 1)打開容許指定主機更新數據庫

zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
    allow-update { 192.168.0.6; };  //容許192.168.0.6遠程更新數據庫
};

​ 2)放開數據庫文件夾和文件的權限

# chmod 770 /var/named/
# ll -d /var/named/
drwxrwx---. 5 root named 173 Jun  1 20:55 /var/named/
# rndc reload

​ 3)在客戶端測試,上傳一條更新記錄

# nsupdate 
> server 192.168.0.7
> zone dongfei.com
> update add ftp.dongfei.com 86400 IN A 192.168.0.101
> send
> quit
# dig ftp.dongfei.com @192.168.0.7  // 出現如下信息表示成功
;; ANSWER SECTION:
ftp.dongfei.com.        86400   IN      A       192.168.0.101

這時咱們再回來看DNS服務器的/var/named/文件夾下出現了一個 dongfei.com.zone.jnl 的文件,這個文件是更新數據庫的日誌文件,它不會當即同步到區域數據中庫文件中,而是會先存放到日誌文件中,過一下子再向數據庫文件中同步。

# named-journalprint /var/named/dongfei.com.zone.jnl 查看日誌文件

3、DNS的主從複製

DNS服務通常須要一臺主,倆臺從,若是主DNS服務器出現故障後能夠向從DNS服務器請求解析;客戶端須要將主DNS設置爲主DNS服務器,將從DNS服務器設置爲備DNS服務器

實例3:配置主從DNS服務

192.168.0.7 爲主DNS服務器

192.168.0.11 爲從DNS服務器

192.168.0.6 爲客戶端

​ 1)主服務器配置

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    allow-transfer { 192.168.0.11; };  //只容許從DNS服務器同步區域數據庫

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
            NS  dns2         //將從DNS服務器的NS記錄添加到此
dns1        A   192.168.0.7
dns2        A   192.168.0.11  //將從DNS服務器的A記錄添加到此

ftp         A   192.168.0.101
www         A   192.168.0.6
@           MX  10  mail
mail        A   192.168.0.100

​ 2)配置從DNS服務器

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    allow-transfer  { none; };  //爲了數據安全,不容許任何主機從從DNS服務器上拉取區域數據

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type slave;  //類型爲從服務器
    masters { 192.168.0.7; };  //主DNS服務器的IP
    file "slaves/dongfei.com.zone.slave";  //數據庫文件保存到 /var/named/slaves/ 文件夾下,名字叫dongfei.com.zone.slave
};

# systemctl restart named //重啓服務
# ls /var/named/slaves/ //能夠看到數據庫文件則證實已經同步成功
dongfei.com.zone.slave

​ 3)在客戶端測試

# vim /etc/resolv.conf  //修改DNS配置文件
; generated by /sbin/dhclient-script
nameserver 192.168.0.7
nameserver 192.168.0.11

# dig www.dongfei.com
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6
;; SERVER: 192.168.0.7#53(192.168.0.7)

主服務器能夠正常解析,接下來咱們將主機模擬故障,好比把網絡斷掉

# dig www.dongfei.com  //再次在客戶端測試,發現如今已是從服務響應咱們的解析請求了
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6
;; SERVER: 192.168.0.11#53(192.168.0.11) //192.168.0.11是從服務器地址

dig -t axfr magedu.com @192.168.0.7 手動抓取區域記錄

  • 注意:

    1. 用戶查詢是走的UDP的53端口
    2. 主從複製的時候須要放開tcp和udp 的53號端口
    3. 須要的防火牆開放tcp和udp的53號端口

4、DNS子域委派

在互聯網中咱們的單個DNS服務沒法去存儲全部主機的域名到IP的記錄,好比根域,它只是未來至查詢.com 的請求委派給.com域的DNS服務器,來自.org的查詢交給.org域的DNS服務器。具體怎麼實現配置,那咱們來一塊兒研究吧

實例4:配置子域委派的實現

環境:

​ 父:192.168.0.7,dongfei.com

​ 子:192.168.0.11,bj.dongfei.com

​ 1)配置父域

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    dnssec-enable no;
    dnssec-validation no;

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
bj          NS  dns2.dongfei.com.  //將bj域的請求委派給dns2來處理
dns1        A   192.168.0.7
dns2        A   192.168.0.11

# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# rndc reload

​ 2)配置子域

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };

# vim /etc/named.rfc1912.zones
zone "bj.dongfei.com" IN {
    type master;
    file "bj.dongfei.com.zone";
};

# vim /var/named/bj.dongfei.com.zone
$TTL 1D
@ IN SOA dns1.bj.dongfei.com. admin.bj.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   192.168.0.11
www     A   192.168.0.6

# chgrp named /var/named/bj.dongfei.com.zone
# chmod 640 /var/named/bj.dongfei.com.zone
# rndc reload

​ 3)在客戶端測試

# dig www.bj.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.bj.dongfei.com.     86385   IN      A       192.168.0.6

5、DNS轉發

  • 1) 全局轉發: 對非本機所負責解析區域的請求,全轉發給指定的服務器
  • 2) 特定區域轉發:僅轉發對特定的區域的請求,比全局轉發優先級高

注意:被轉發的服務器須要可以爲請求者作遞歸,不然轉發請求不予進行;關閉dnssec功能(dnssec-enable no; dnssec-validation no; )

轉發器類型:

  1. first模式:優先先轉發到目標DNS服務器,若是區域不存在,再轉發到根上去查詢
  2. onyl模式:只轉發到目標DNS服務器,若是目標主機沒有此查詢的信息則轉發失敗

實例5:配置DNS轉發(全局轉發)

192.168.0.11 爲轉發DNS服務器

192.168.0.7 爲目標DNS服務器

​ 1)配置轉發DNS服務器

# vim /etc/named.conf
options {
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    recursion yes;  //開啓遞歸查詢
    dnssec-enable no;
    dnssec-validation no;
    forward only;  //only模式
    forwarders { 192.168.0.7; };  //目標DNS服務器IP
};

# rndc reload //重載配置文件

​ 2)配置目標DNS服務器

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-transfer { 192.168.0.11; };
    recursion no;  //關閉遞歸查詢
    dnssec-enable no;
    dnssec-validation no;

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
dns1        A   192.168.0.7
webs        A   192.168.0.6
webs        A   192.168.0.5
www         CNAME   webs
@           MX  10 mail
mail        A   192.168.0.100
ftp         A   192.168.0.101

# rndc reload

​ 3)在客戶端測試

# dig www.dongfei.com @192.168.0.11
;; ANSWER SECTION:
www.dongfei.com.        86369   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86369   IN      A       192.168.0.6
webs.dongfei.com.       86369   IN      A       192.168.0.5
;; SERVER: 192.168.0.11#53(192.168.0.11)  //真正的域名解析信息在192.168.0.7上,這裏由0.11代爲去查詢

若是對單個域進行轉發則把配置寫到區域配置文件中便可

# vim /etc/named.rfc1912.zones
zone "dongfei.com" {
   type forward;
   forward only;
   forwarders { 192.168.0.7; };
};

6、智能DNS

互聯網上各個地區的網絡站點分佈到各個地區,這時就須要按地區爲當地地區的客戶解析到當地的站點服務器,好比在北京和在上海打開同一個網站顯示的信息是不一樣的;這就須要用到智能DNS解析的技術。

商站點或者視頻站點,這些站點須要快速響應客戶的請求,不可能將服務器搭建到一個地區,而是須要分佈到各個省市,在每一個地方有緩存服務器,這就是CDN: Content Delivery Network內容分發網絡的工做,通常由單獨的CDN公司搭建機房服務於各大電商視頻等站點。

接下來,咱們一塊兒研究一下如何實現智能DNS解析吧

ACL規則

acl: 把一個或多個地址歸併爲一個集合,並經過一個統一的名稱調用;只能先定義,後使用,所以通常定義在配置文件中,處於options的前面

格式:

acl acl_name { 
  ip; 
  net/prelen; 
  …… 
};

bind有四個內置的acl:

​ none: 沒有一個主機

​ any: 任意主機

​ localhost: 本機

​ localnet: 本機的IP同掩碼運算後獲得的網絡地址

訪問控制的指令:

  • allow-query {}: 容許查詢的主機;白名單
  • allow-transfer {}:容許區域傳送的主機;白名單
  • allow-recursion {}: 容許遞歸的主機,建議全局使用
  • allow-update {}: 容許更新區域數據庫中的內容

view 視圖

view:視圖:實現智能DNS

  • 一個bind服務器可定義多個view,每一個view中可定義一個或多個zone
  • 每一個view用來匹配一組客戶端
  • 多個view內可能須要對同一個區域進行解析,但使用不一樣的區域解析庫文件

注意:

(1) 一旦啓用了view,全部的zone都只能定義在view中

(2) 僅在容許遞歸請求的客戶端所在view中定義根區域

(3) 客戶端請求到達時,是自上而下檢查每一個view所服務的客戶端列表

實例6:ACL和view實現智能DNS

在一臺主機上有倆張網卡,配置倆個網段來模擬來自不一樣地區的客戶

​ 192.168.0.7/24

​ 172.20.111.236/16

​ 1)添加ACL和視圖

# vim /etc/named.conf
acl bjnet {  //注意,acl要寫在options前邊,並且要注意acl的匹配順序關係,至上而下
    192.168.0.0/24;
};
acl shnet {
    172.20.0.0/16;
};
acl othernet {
    any;
};

options {
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
};

view bjview {
    match-clients {bjnet;};
    include "/etc/named.rfc1912.zones.beijing";
};
view shview {
    match-clients {shnet;};
    include "/etc/named.rfc1912.zones.shanghai";
};
view otherview {
    match-clients {othernet;};
    include "/etc/named.rfc1912.zones";
};

include "/etc/named.root.key";

注意:要將默認配置文件中的根區域配置放到/etc/named.rfc1912.zones文件中

​ 2)建立各地區區域配置文件

# vim /etc/named.rfc1912.zones.beijing 
zone "dongfei.com" {
    type master;
    file "dongfei.com.zones.beijing";
};
# vim /etc/named.rfc1912.zones.shanghai
zone "dongfei.com" {
    type master;
    file "dongfei.com.zones.shanghai";
};

​ 3)配置解析數據庫文件

# vim /var/named/dongfei.com.zones.beijing
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   192.168.0.7
www     A   192.168.0.1
# vim /var/named/dongfei.com.zones.shanghai
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   172.20.111.236
www     A   172.20.111.1

​ 4)在客戶端測試

# dig www.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.1
;; SERVER: 192.168.0.7#53(192.168.0.7)

# dig www.dongfei.com @172.20.111.236
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       172.20.111.1
;; SERVER: 172.20.111.236#53(172.20.111.236)
從上邊的測試結果,從不一樣IP段查詢同一個域名獲得的結果卻不同,從而能夠實現按地區來智能解析

7、模擬搭建互聯網名稱解析服務架構

​ 1)192.168.0.1 : web

# echo -e web1.dongfei.com\n\<h1\>hello web1\</h1\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.1
# web1.dongfei.comn<h1>hello web1</h1>

​ 2)192.168.0.2 : web2

# echo -e web2.dongfei.com\n\<h2\>hello web1\</h1\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.2
web2.dongfei.comn<h2>hello web2</h1>

​ 3)192.168.0.3 :dns1,配置dongfei.com域的主DNS服務器

# vim /etc/named.conf
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; };  //註釋掉
    allow-transfer { 192.168.0.4; };  //只容許192.168.0.4的主機,也就是從DNS來拉取區域解析數據庫
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
        NS  dns2
dns1    A   192.168.0.3
dns2    A   192.168.0.4

webs    A   192.168.0.1
webs    A   192.168.0.2
www     CNAME   webs
# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# named-checkconf
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone
# service named start
# dig www.dongfei.com @192.168.0.3
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86400   IN      A       192.168.0.1
webs.dongfei.com.       86400   IN      A       192.168.0.2

​ 4)192.168.0.4 :dns2,配置dongfei.com域的從DNS服務器

# vim /etc/named.conf 
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; };  //註釋掉
    allow-transfer { none; };  //不對任何主機作區域傳送
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" {
    type slave;  //類型爲從服務器
    masters { 192.168.0.3; };  //指向誰是個人主服務器
    file "slaves/dongfei.com.zone.slave";  //解析數據庫存放位置
};
# named-checkconf 
# service named start
# ls -l /var/named/slaves/  //查看一下有沒有數據庫文件,有則說明同步成功
-rw-r--r--. 1 named named 417 May 19 22:09 dongfei.com.zone.slave

​ 5)192.168.0.5 :com. 配置子域委派

# vim /etc/named.conf
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;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "com" IN {
    type master;
    file "com.zone";
};
# vim /var/named/com.zone
@ IN SOA dns1.com. admin.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dongfei NS  dns2.com.  //子域委派給192.168.0.3和192.168.0.4
dns1    A   192.168.0.5
dns2    A   192.168.0.3
dns2    A   192.168.0.4
# chgrp named /var/named/com.zone
# chmod 640 /var/named/com.zone
# named-checkconf
# service named start
# dig www.dongfei.com @192.168.0.5
www.dongfei.com.        86387   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86387   IN      A       192.168.0.1
webs.dongfei.com.       86387   IN      A       192.168.0.2
;; AUTHORITY SECTION:
dongfei.com.            86400   IN      NS      dns2.com.
;; ADDITIONAL SECTION:
dns2.com.               86400   IN      A       192.168.0.4
dns2.com.               86400   IN      A       192.168.0.3
;; SERVER: 192.168.0.5#53(192.168.0.5)

​ 6)192.168.0.6 :根域配置

# vim /etc/named.conf
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 no;
    dnssec-validation no;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "." {
    type master;
    file "root.zone";
};
# vim /var/named/root.zone 
$TTL 1D
@ IN SOA dns1. admin. ( 1 1D 2H 3D 1H )
        NS  dns1
com     NS  dns2
dns1    A   192.168.0.6
dns2    A   192.168.0.5
# chgrp named /var/named/root.zone
# chmod 640 /var/named/root.zone
# service named start
# dig www.dongfei.com @127.0.0.1
;; ANSWER SECTION:
www.dongfei.com.        86177   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86177   IN      A       192.168.0.1
webs.dongfei.com.       86177   IN      A       192.168.0.2

​ 7)192.168.0.7 :緩存DNS服務器配置

# vim /etc/named.conf
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 no;
    dnssec-validation no;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};  

zone "." IN {
    type hint;
    file "named.ca";
};
# vim /var/named/named.ca 
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     192.168.0.6  //將根服務器指向咱們本身搭建的根DNS服務器
# service named start

​ 8)192.168.0.8 :在客戶端測試

# vim /etc/resolv.conf
nameserver 192.168.0.7  //將本身的DNS服務器指向緩存服務器
# dig www.dongfei.com  //出現如下信息則說明成功
;; ANSWER SECTION:
www.dongfei.com.        86319   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86319   IN      A       192.168.0.1
webs.dongfei.com.       86319   IN      A       192.168.0.2
;; SERVER: 192.168.0.7#53(192.168.0.7)

​ 到此爲止,咱們能夠訪問如下www.dongfei.com,看看是否能夠正常解析

[root@client ~]# curl www.dongfei.com 
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com 
web1.dongfei.comn<h1>hello web1</h1>
[root@client ~]# curl www.dongfei.com 
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com 
web1.dongfei.comn<h1>hello web1</h1>

​ 從測試結果看來,不只能夠正常解析,還實現了DNS負載均衡的功能。

學習 ^_^ date 2018.06.02 16.37

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息