DNS服務

DNS服務器的功能:將域名解析爲IP地址(正向解析)或者將IP地址解析爲域名(反向解析)
/etc/hosts (域名解析緩存文件)
分佈式層次型
主機名+域名

DNS的解析過程(以解析www.baidu.com.cn爲例)
1.查看本地緩存
2.默認查詢本地/etc/hosts文件進行解析(具體先使用hosts文件或DNS由/etc/nsswitch.conf文件決定)
3.由本地域名服務器(/etc/resolv.conf)查詢根域名服務器(進行迭代解析)和下級服務器
4.本地域名服務器得到結果後會進行緩存,然後再將結果告訴客戶端


查詢www.baidu.com.cn
遞歸查詢:客戶機-->本地域名服務器(查詢沒有結果,接着下面的步驟)
迭代解析:本地域名服務器-->根域名服務器(dig @a.root-servers.net . ns)(得到cn服務器的IP地址)
    本地域名服務器-->cn服務器(得到com.cn服務器的IP地址)
    本地域名服務器-->com.cn服務器(得到baidu.com.cn的IP地址)
    本地域名服務器-->baidu.com.cn服務器(得到最終域名服務器,解析相應的主機名)

DNS服務器的類型
    主域名服務器(省級代理)
        負責一個或一個以上原始區域的域名解析,有自己的區域數據文件,是一個權威服務器
    從域名服務器(市級代理)
        區域數據文件是從主域名服務器複製過來的,從域名服務器不是一個權威服務器
    緩存域名服務器(個人代理)
        純粹的沒有區域數據文件(本身不能響應任何DNS請求,所有記錄全部向其它服務器查詢)

DNS的記錄類型
SOA:起始授權機構,至少是一個區域的權威服務器(主域名服務器),記錄的是權威服務器的IP地址
NS:名稱服務器,能解析特定域名的主機都是名稱服務器(主域名服務器和從域名服務器)
A:正向記錄,用於將域名解析爲IP地址
PTR:反向記錄,用於將IP地址解析爲域名(郵件服務器)
MX:郵件交換記錄,用於設置某個區域的郵件服務器地址
CNAME:別名記錄,將服務器名另外設置一個名稱
HINFO:硬件信息記錄,並不向客戶端發送迴應
TXT:域名服務器版本記錄,可以更改域名服務器的版本

DNS的客戶端工具(10.0.100.251爲DNS服務器IP)
host
    host www.sjjy.com 10.0.100.251
    host -t mx sjjy.com 10.0.100.251(針對沒有定義具體IP的記錄)
    host -t ns sjjy.com 10.0.100.251
    host 10.0.100.100 10.0.100.251
dig
    dig @10.0.100.251 blogs.sjjy.com
    dig @10.0.100.251 -t mx sjjy.com
nslookup
    nslookup www.sjjy.com 10.0.100.251
    nslookup
        server 10.0.100.251
        set type=mx
        sjjy.com
        

部署DNS服務器步驟
1.安裝DNS服務器軟件
    yum install bind*
2.在主配置文件裏面定義相關的區域及信息
    vim /etc/named.conf(注意是以“//”作爲註釋,不是“*”)
    options {
    listen-on port 53 { 127.0.0.1; }; --- 監聽端口和IP地址
    listen-on-v6 port 53 {};--- IPV6格式
    directory    "/var/named"; --- 區域數據文件
    dump-file    ""; --- 緩存文件
    statistics-file ""; ---
    memstatistics-file ""; ---
    allow-query    { localhost; }; --- 只允許本地查詢,可以添加網段
    recursion yes; --- 允許遞歸查詢

    dnssec-enable yes; --- DNS加密
    dnssec
    dnssec
    
    bindkeys-file
    managed-keys-directory
};

logging { ----  日誌通道(默認/var/log/messages)
    channel default_debug {
        file "";    
    }
};

zone "." IN(internet) {
    type hint; --- 類型爲緩存域名服務器(masetr(主域名服務器)|slave(從域名服務器))
    file "name.ca"; --- 存在於上面配置的directory目錄下面,記錄根域名服務器的地址
 
};

zone "sjjy.com" IN { --- 定義正向解析
    type master; --- 定義爲主域名服務器
    file "sjjy.com.zone"; --- 定義具體的區域文件
};

zone "0.10.in-addr.arpa" IN { --- 定義反向解析
    type master; --- 同上面定義的正向解析
    file "10.0.rev"; --- 定義具體的區域文件
};

//當/etc/hosts文件刪除,纔會調用下面兩個文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

};


編輯具體的區域文件
vim /var/named/sjjy.com.zone
$TTL 1D --- 緩存生存時間:1天
$ORIGIN    sjjy.com. --- 顯示的聲明區域名
@(代表具體的區域名稱(sjjy.com.zone))    IN    SOA(權威服務器記錄)    dns.sjjy.com. admin.sjjy.com.(管理員的郵件地址,“admin.”表示爲“admin@”) (
    0    ; serial(序列號,用於主從域名服務器之間,爲了識別何時進行更新,常用時間表示)
    1D    ;refresh(刷新時間,從域名服務器刷新的頻率)
    1H    ;retry(間隔時間,當連接失敗後,重連的間隔)
    1W(1個星期)    ;expire(清除時間)
    3H(3個小時)    ;minimum
)
    IN    NS    dns.sjjy.com. --- 定義名稱服務器,多個換行寫
    IN    NS    5(優先級,小的高,1-255)    dns2.sjjy.com.
    IN    MX    mail.sjjy.com.
dns    IN    A    10.0.100.251 --- 具體的主機對應的IP地址
dns    IN    A    10.0.100.250
mail    IN    A    10.0.100.100
www    IN    A    10.0.100.101
ftp    IN    A    10.0.100.102
blogs    IN    A    10.0.100.103
bk    IN    CNAME    blogs

vim /var/named/10.0.rev(可以不用寫別名)
$TTL 1D --- 緩存生存時間:1天
$ORIGIN    0.10.in-addr.arpa. --- 顯示的聲明區域名
@(代表具體的區域名稱(sjjy.com.zone))    IN    SOA(權威服務器記錄)    dns.sjjy.com. admin.sjjy.com.(管理員的郵件地址,“admin.”表示爲“admin@”) (
    0    ; serial(序列號,用於主從域名服務器之間,爲了識別何時進行更新,常用時間表示)
    1D    ;refresh(刷新時間,從域名服務器刷新的頻率)
    1H    ;retry(間隔時間,當連接失敗後,重連的間隔)
    1W(1個星期)    ;expire(清除時間,更新失敗後,多長時間後清除對應的緩存)
    3H(3個小時)    ;minimum(緩存服務器不能與主服務聯繫上後多長時間清除相應的記錄)
)
    IN    NS    dns.sjjy.com.
251.100    IN    PTR    dns.sjjy.com.
100.100    IN    PTR    mail.sjjy.com.
101.100    IN    PTR    www.sjjy.com.
102.100    IN    PTR    ftp.sjjy.com.
103.100    IN    PTR    blogs.sjjy.com.


檢查主配置文件和區域文件的語法是否有錯
named-checkconf /etc/named.conf    --- 檢查主配置文件語法
named-checkzone sjjy.com /var/named/sjjy.com.zone --- 檢查正向區域配置文件語法
named-checkzone 0.10.in-addr.arpa /var/named/10.0.rev --- 檢查反向區域配置文件語法

啓動域名服務器
service named start
service named reload --- 不中斷重啓(在不對主配置文件進行操作的情況下)

更改正向區域文件和反向區域文件的屬主和屬組(因爲運行named服務時是以named用戶執行的)
chown named:named /var/named/sjjy.com.zone
chown named:named /var/named/10.0.rev

根域名服務器的更新:dig @a.root-servers.net . ns > /var/named/named.ca

練習:使用自己姓名的拼音作爲域名搭建域名服務器,域名服務器要求有正反向區域,要求有soa、ns、mx、a、ptr、cname記錄的定義,部署完成後要能夠正常的提供相關域名的解析服務。


錯誤排除步驟
1.檢查配置文件語法是否正確
    named-checkconf /etc/named.conf
    named-checkzone zlj.com zlj.com.zone
    named-checkzone 0.10.in-addr.arpa 10.0.rev
2.檢查53號端口是否處於監聽狀態,監聽什麼地址
    lsof -i:53
    netstat -antpul | grep named
3.查看域名服務器配置是否正確
    vim /etc/resolv.conf
4.查看日誌文件
    vim /var/log/messages
5.查看SELinux是否關閉
    getenforce
    setenforce 0


錯誤集:
dns_rdata_fromtext: zlj.com.zone:10: near 'mail.zlj.com.': not a valid number
解決辦法:郵件服務器必須設置優先級

10.0.10.rev:3: SOA record not at top of zone (10.0.10.in-addr.arpa.10.0.10.in-addr.arpa)
解決辦法:注意區域名後面需要帶上".


從域名服務器(裏面的數據是非權威數據,給主域名服務器提供容錯功能和輔助解析,當主域名服務器宕機時,就會接管服務,在生存時間內有效)
vim /etc/named.conf
options {
    listen-on port 53 { 127.0.0.1; }; --- 監聽端口和IP地址
    listen-on-v6 port 53 {};--- IPV6格式
    directory    "/var/named"; --- 區域數據文件
    dump-file    ""; --- 緩存文件
    statistics-file ""; ---
    memstatistics-file ""; ---
    allow-query    { localhost; }; --- 只允許本地查詢,可以添加網段
    recursion yes; --- 允許遞歸查詢

    dnssec-enable yes; --- DNS加密
    dnssec
    dnssec
    
    bindkeys-file
    managed-keys-directory
};

zone "." IN {
    type hint; --- 類型爲緩存域名服務器(masetr(主域名服務器)|slave(從域名服務器))
    file "name.ca"; --- 存在於上面配置的directory目錄下面,記錄根域名服務器的地址
};

zone "sjjy.com" IN {
    type slave;
    file "slaves/sjjy.com.zone";
    master { 10.0.100.251; };
};

zone "0.10.in-addr.arpa" IN {
    type slave;
    file "slaves/10.0.100.rev"
    masters { 10.0.100.251; };
};

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

編輯主域名服務器的正向和反向區域文件,添加從域名服務器,並且加大serial
vim /var/named/sjjy.com.zone
添加    從域名服務器
    IN    NS    dns1.sjjy.com.
dns1    IN    A    10.0.100.10

vim /var/named/10.0.0.rev
添加    從域名服務器
    IN    NS    dns1.sjjy.com.
10    IN    PTR    dns1.sjjy.com.

增加安全性,指定只有這個IP才能進行傳輸
vim /etc/named.conf
zone "sjjy.com" IN {
添加    allow-transfer { 10.0.100.252; };
};

DNS的其他相關配置
1.轉發設置
vim /etc/named.conf
options { --- 全局定義,全部轉發
    forward first|only;    first:表示先進行轉發;only:表示先只選用轉發
};

2.acl訪問控制列表(對allow-query生效)
vim /etc/named.conf
acl mynet(列表名,自定義) { --- 不放在options裏面
    10.0.0.0/16;
    192.168.10.10;
    172.16.0.0/24
};
特殊字符串
any    匹配任意主機
none    不匹配任何主機
localhost    匹配本機上的任何ipv4網絡接口
localnets    匹配本機上的任何ipv4的本地網絡

3.also-notify主動通知從域名服務器進行更新(當主域名服務器有更改時,但只是進行了service named reload,就需要它)
vim /etc/named.conf
options {
    also-notify { 10.0.5.151; };
};
從域名服務器上進行配置允許
options {
    allow-notify { 主域名服務器IP; };
};

4.黑名單配置(寫進options裏面)
blackhole {
    10.0.10.100;
    102.10.10.0/24;
};


------------------------------------------------------
DNS智能解析
1.視圖的基本配置語法
    view 視圖名 {
        match-clients { 客戶端地址列表; };
        區域文件聲明;    
    };
    示例:
    view "hunan" {
    match-clients { 172.16.0.0/16; }; --- 當ip地址很多時,使用acl,可以單獨對acl生成一個文件,用include進行定義
    recursion yes;
    zone "sxjy.com" IN {
        type master;
        file "hn.sxjy.com.zone";
        allow-update { none; };
        allow-transfer { 172.16.20.223; };
        };
    zone "0.10.in-addr.arpa" IN {
        type master;
        file "hn.10.0.100.rev";
        allow-update { none; };
        allow-transfer { 172.16.20.223; };
        };
    };
    view "hubei" {
    match-clients { 172.20.0.0/16; }; --- 當ip地址很多時,使用acl,可以單獨對acl生成一個文件,用include進行定義
    recursion yes;
    zone "sxjy.com" IN {
        type master;
        file "hb.sxjy.com.zone";
        allow-update { none; };
        allow-transfer { 172.16.20.223; };
        };
    zone "0.10.in-addr.arpa" IN {
        type master;
        file "hb.10.0.100.rev";
        allow-update { none; };
        allow-transfer { 172.16.20.223; };
        };
    };
    編輯區域配置文件
    vim hn.sxjy.com.zone(下面的設置是zlj.com,如果要使用的話,要修改爲hn.sxjy.com)
$TTL 1D
$ORIGIN zlj.com.
@    IN    SOA    dns.zlj.com. admin.zlj.com. (
                    2016082309; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    IN    NS    dns.zlj.com.
    IN    NS    dns1.zlj.com.
    IN    MX    5    mail.zlj.com.
dns    IN    A    10.0.10.178
dns1    IN    A    10.0.10.186
mail    IN    A    10.0.10.178
www    IN    A    10.0.0.254
ftp    IN    A    10.0.10.178
tftp    IN    CNAME    ftp    
    
    相應的在編輯hb.sxjy.com.zone時,保持NS服務器的IP地址不變,其他的主機IP地址作相應的改變
$TTL 1D
$ORIGIN zlj.com.
@    IN    SOA    dns.zlj.com. admin.zlj.com. (
                    2016082309; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    IN    NS    dns.zlj.com.
    IN    NS    dns1.zlj.com.
    IN    MX    5    mail.zlj.com.
dns    IN    A    10.0.10.178
dns1    IN    A    10.0.10.186
mail    IN    A    10.0.100.178
www    IN    A    10.0.100.254
ftp    IN    A    10.0.100.178
tftp    IN    CNAME    ftp    


錯誤集:
** server can't find www.zlj.com:SERVFAIL
解決辦法:將相應的區域配置文件的屬主該爲named

擴展
TSGI事務簽名實現安全通信
首先,得要註釋掉/etc/named.conf配置文件裏面的dnssec,
第一步:在主服務器上生成密鑰(每個視圖都要生成一個密鑰)
   # cd /etc
   # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hunan
   # cat Kchangsha.+157+36507.private
 
   # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hubei

第二步:在所有服務器的配置文件中加載密鑰
   # vim /etc/named.conf
key "hunan" {
        algorithm hmac-md5;
        secret "9U4I7Ft1AGIm+d+MQ/rkaw==";
};

key "hubei" {
        algorithm hmac-md5;
        secret "9+tJAJ1soJT0daCB5evExw==";
};

第三步:設置主服務器的named.conf配置文件,在具體視圖中使用密鑰訪問
注意:需要添加的地方有:
    match-clients { key changsha(當前視圖名稱); };
    server 其他服務器IP地址 { keys { changsha; }; };
    zone {
        allow-transfer { key changsha; };    
    };
第四步:設置從服務器的named.conf配置文件,在具體視圖中使用密鑰訪問
注意:需要添加的地方跟第三步差不多,但是不需要在zone中添加,添加server時,注意,添加相互通信的就可以了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章