1. 程式人生 > >dns相關內容

dns相關內容

跟蹤 notify 記錄 upd 組成 gin aid slaves etc

dns基本工作原理
dns: domain name service
dns udp/53 tcp/53
udp 用於解析 tcp 用於區域傳送

         由域名服務器與域名解析器組成  用於域名和ip的相互轉換
     dns:分布式 倒置的樹狀結構
                    最上方為根域 根域服務器世界一共有13臺
                        根域服務器下有多個組織服務器 如      .com .org .edu .net 等 也有如表示國家的域服務器 .cn .us等等 這些域名稱為頂級域 或者為 一級域
                            一級域下又有諸多二級域 
                                二級域下又可以有諸多三級域 ...
     dns服務器的類型
                1.主dns服務器
                2.從dns服務器
                3.唯緩存dns服務器
                4.轉發器

原理:互聯網主機通信都是通過ip,域名只不過是提供一個更易記的渠道

    客戶端發起dns請求流程:

        client --> /etc/hosts --> local cache --> DNS server(recursive 遞歸查詢) --> dns server local cache --> lterative(叠代查詢) -->

    客戶端請求域名解析 首先查看/etc/hosts 文件中是否有解析的內容 若無在查詢緩存中時否還有上次解析的記錄 若無則去查找 指定的dns服務器 (一般來說指定的dns服務器為唯緩存dns服務器)
    指定的dns服務器的緩存中若無相關緩存 則去找其他dns服務器(查找方式為自頂向下) 如 剛開始從根開始查找指定的域名 如查找 www.gaoleng.com
        1. 我們指派的dns服務器 去找根 根會告訴我們指派的dns 他不知道我們所說的域名是哪個ip 但是.com他知道 你應該去找.com查找 並告訴我們 .com的地址
        2. 我們指派的dns服務器又回去 找.com .com說 “我也不知道 你說的域名的 ip地址到底是多少 但是baidu.com應該知道 我跟你說他的ip是多少把 ”
        3. 接著dns服務器又會去找 baidu.com的dns服務器 我們所要查找的域名 確實是在baidu.com域中 baidu.com的dns服務器會說 “你要找的域名 我確實知道他的 ip是..  ” 
        4. 指派的dns服務器 會緩存這一信息 並且 將該域名對應的ip 返回給客戶端 客戶端 也會緩存這一信息 這樣在緩存未到期之前 再次訪問www.baidu.com 就不會再去找dns服務器 而是直接在緩存中取得

        客戶端 只收取最終結果 其余工作都有指派的dns服務器完成

        遞歸查詢:客戶端請求一次 就可以得到最終的結果

                客戶端不支持叠代查詢 所以依靠唯緩存服務器來幫助查詢

        叠代查詢:服務器多次發送查找請求 多次返回

dig 命令查看dns搜尋過程

dig  www.yahoo.com +trace

    ~]# dig www.yahoo.com +trace

                ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> www.yahoo.com +trace
                ;; global options: +cmd
                .           5   IN  NS  e.root-servers.net.
                .           5   IN  NS  m.root-servers.net.
                .           5   IN  NS  l.root-servers.net.
                .           5   IN  NS  g.root-servers.net.
                .           5   IN  NS  c.root-servers.net.
                .           5   IN  NS  k.root-servers.net.
                .           5   IN  NS  j.root-servers.net.
                .           5   IN  NS  h.root-servers.net.
                .           5   IN  NS  d.root-servers.net.
                .           5   IN  NS  i.root-servers.net.
                .           5   IN  NS  b.root-servers.net.
                .           5   IN  NS  f.root-servers.net.
                .           5   IN  NS  a.root-servers.net.
                ;; Received 494 bytes from 192.168.117.2#53(192.168.117.2) in 228 ms

                com.            172800  IN  NS  e.gtld-servers.net.
                com.            172800  IN  NS  b.gtld-servers.net.
                com.            172800  IN  NS  j.gtld-servers.net.
                com.            172800  IN  NS  m.gtld-servers.net.
                com.            172800  IN  NS  i.gtld-servers.net.
                com.            172800  IN  NS  f.gtld-servers.net.
                com.            172800  IN  NS  a.gtld-servers.net.
                com.            172800  IN  NS  g.gtld-servers.net.
                com.            172800  IN  NS  h.gtld-servers.net.
                com.            172800  IN  NS  l.gtld-servers.net.
                com.            172800  IN  NS  k.gtld-servers.net.
                com.            172800  IN  NS  c.gtld-servers.net.
                com.            172800  IN  NS  d.gtld-servers.net.
                ;; Received 507 bytes from 198.41.0.4#53(198.41.0.4) in 481 ms

                yahoo.com.      172800  IN  NS  ns1.yahoo.com.
                yahoo.com.      172800  IN  NS  ns5.yahoo.com.
                yahoo.com.      172800  IN  NS  ns2.yahoo.com.
                yahoo.com.      172800  IN  NS  ns3.yahoo.com.
                yahoo.com.      172800  IN  NS  ns4.yahoo.com.
                ;; Received 285 bytes from 192.31.80.30#53(192.31.80.30) in 304 ms

                www.yahoo.com.      1800    IN  CNAME   atsv2-fp.wg1.b.yahoo.com.
                wg1.b.yahoo.com.    172800  IN  NS  yf2.yahoo.com.
                wg1.b.yahoo.com.    172800  IN  NS  yf4.a1.b.yahoo.net.
                wg1.b.yahoo.com.    172800  IN  NS  yf3.a1.b.yahoo.net.
                wg1.b.yahoo.com.    172800  IN  NS  yf1.yahoo.com.
                ;; Received 178 bytes from 68.142.255.16#53(68.142.255.16) in 311 ms

dns 解析答案

    1.肯定答案 : 肯定 有的域名解析答案
    2.否定答案 : 請求不存在等原因導致的 無法返回結果  

        註意 :(肯定答案和否定答案在dns服務器中都會有緩存 本地沒有的答案即為否定答案 這樣每次請求不存在的主機就不用讓主機所在區域的dns服務器每次都響應 占用資源)

    3.權威答案 :由主機所在dns服務器解析出的直接得到的答案 
    4.非權威答案 : 不是由主機所在dns服務器解析返回的答案 而是從其他dns服務器緩存中獲取的答案

區域解析庫
資源記錄:resource record (RR)
記錄類型 SOA NS PTR A AAAA CNAME MX

SOA: 起始授權記錄 一個解析庫只能有一個 soa記錄 並且 soa記錄要在第一條
NS:專門表明當前區域的dns服務器
CNAME: 別名記錄
MX: 郵件交換器
PTR: 反向解析 IP --> FQDN 
A:FQDN --> IP
AAAA: FQDN -->IPv6

    註意 :1. TTL可以全局繼承
           2. @可用於表示當前區域的名字
           3. 同一個名字可以通過多個記錄 定義不同的值 此時dns服務器會以輪詢的方式響應
           4. 同一個值也可以定義不同的名字 通過不同的名字指向同一個值 僅表示通過不同的名字可以找到一個主機而已     

SOA:
    name :當前區域名稱如 gaoleng.com
    value : 多個部分組成
        1.當前區域的dns服務器的FQDN或者當前區域名稱 可用@簡寫
        2.當前管理員的郵箱地址,但地址中不可有@符號 一般用. 號代替 如 admin.gaoleng.com
        3.主服務器協調屬性的定義 以及否定答案的TTL
    例:
        daniu.com.      IN      SOA     dns.daniu.com.  root.daniu.com. (2017120902 1H 15M 1W 1D)

NS:
    name : 當前區域名
    value : 當前區域名的 dns服務器名稱 如 “ns1.gaoleng.com”

    例如:
            @    IN      NS      ns1.gaoleng.com

CNAME :
    name : 別名FQDN
    value : 正式的FQDN

    例如:
        web.gaoleng.com IN CNAME www.gaoleng.com

PTR :
    name:ip 的特定格式 如 1.2.3.4 要寫成 4.3.2.1 並且加上後綴.in-addr.arpa.

    例:4.3.2.1 IN PTR ns1.gaoleng.com.

A :
    name: 某主機的FQDN
    value:主機對應的ip
    例如:
        www.gaoleng.com     IN      A       192.168.117.131   ---------------------
                            IN      A       192.168.117.130   ---------------------    (註意第三條 輪詢 )
        *.gaoleng.com       IN      A       192.168.117.131  ----------------------------------------------------(泛域名解析 避免用戶寫錯主機名而給錯誤答案 )

AAAA : 
    name: 某主機的FQDN
    value:主機對應的ipv6

MX :
    name:當前區域名
    value:當前區域名的服務器(smtp服務器)的主機名
            一個區域內MX記錄可有多個,但每個記錄前都應該有一個數字(0-99表示其優先級) 數越小表示其優先級越高
    例如:
            @       IN      MX 10   mx1.gaoleng.com

bind

主配置文件 /etc/named.conf /etc.named.rfc1912.zones /etc/rndc.key
解析庫文件 /var/named/ZONE_NAME.zone

註意 : 
    (1). 一臺物理服務器 可以同時給多個區域提供解析
    (2). 必須要有根區域文件
    (3). 應該至少有兩個(如果包括ipv6 應該更多) 實現localhost 和本地回環地址 127.0.0.1 的解析庫

rndc : 默認與bind 安裝在同一主機 只能通過127.0.0.1 連接named進程 監聽在 953/tcp端口

主配置文件
    全局配置    option{}
    日誌子系統配置 logging{}
    區域定義:本機能為哪些zone進行解析 就要定義哪些zone
        zone "ZONE_NAME.ZONE" IN {}

    註意 : 任何服務程序 想要能過通過網絡與其他主機訪問 至少要監聽在一個能與外部主機通信的ip上 
                option中默認指定的監聽地址為回環地址

緩存名稱服務器 
        只需要監聽在一個外部地址上即可

主dns服務器
    1.定義zone區域

        zone"ZONE_NAME.zone"  IN {
                type {master|slave|hind|forword} ;
                file "..." ;
        };

    2.定義解析庫
        定義內容 如  $TTL $ORIGIN (可加可不加 用於省略當前區域名字 ) 在SOA中一般不省略當前區域名字 或FQDN 在後面省略時要註意 省略後不可有點
                                                                        如 ns1.gaoleng.com 不可為寫 ns1. 應寫成 ns1 ;加 oridin時 用法 如 $ORIGIN gaoleng.com 
        資源記錄 

    註意 : 定義完之後一般 將寫的文件的 權限定為 640 其他人不可讀 並且設置 named為文件的屬組 因為named程序 是由named用戶引導 在讀取配置文件 時若為其他人 無法讀取文件
            chmod 640 zone_name                                             chown :named zone_name

測試命令:
    dig命令
        dig [-t type ] name [@server] [query option]

            指定資源類型  域名  指定臨時dns服務器 不加則為/etc/resolv.conf定義的dns 後接可加選項
    查詢選項 
        +[no] trace :跟蹤解析過程
        +[no] recurse :進行遞歸解析

    測試反向dns解析
        dig -x ip @server

    模擬區域傳送  
            區域傳送:
                      1. 全量傳送 : 傳送整個解析庫
                      2. 增量傳送 : 傳送解析庫變化的部分
            dig -t axfr zone_name @server
        如
            dig -t axfr gaoleng.com @192.168.117.129

    host 命令

        host [-t type] name server

    nslookup 命令
        nslookup [-option] [name|-] [sercer]
        nslookup 
            >server 指定dns服務器
            >set q=rr_type 設定類型
            >NAME 要查詢的域名

檢查區域文件和解析庫文件格式是否正確

        檢查區域
    1. named-checkconf 
        檢查解析庫文件
    2.named-checkzone "解析庫名ZONE_NAME" 解析庫文件名
        如 named-checkzone "gaoleng.com" gaoleng.com.zone

    測試時建議將dnssec設置成no 不然對一些測試實施會有影響

反向區域:
    區域名為網絡地址的反寫 後接.in-addr.arpa.
        192.168.117 ---> 117.168.192.in-addr.arpa.

    1.定義區域

            zone "ZONE_NAME" IN {   
                type {master|slave|forword};
                file"ip.zone";
            };

        例如

            zone "117.168.192.in-addr.arpa" IN {
                     type master;
                     file "192.168.117.zone";
             };

    2.區域解析庫文件

        註意:反向解析庫不需要 MX A AAAA 

        示例
            $TTL 1D
            $ORIGIN 117.168.192.in-addr.arpa.
            @       IN SOA  ns1.gaoleng.com.        root.gaoleng.com ( 2018020501 1D 1H 1W 1D )
                    IN NS   ns1.gaoleng.com.
                    IN NS   ns2.gaoleng.com.
            131     IN PTR ns1.gaoleng.com.
            129     IN PTR ns2.gaoleng.com.
            129     IN PTR mx1.gaoleng.com.
            131     IN PTR www.gaoleng.com.
                    IN PTR gaoleng.com.

主從復制:
1.從服務器應該為一臺獨立的服務器
2.主服務器的區域解析庫必須有一條NS記錄是指向從服務器 --- IN ns2.gaoleng.com ns2 IN A 192.168.117.131
3.從服務器只需要定義區域 而無需提供 解析庫文件 庫文件應該放置於/var/named/slaves目錄中
4.主服務器允許進行做區域傳送
5.主從服務器 時間應該同步 可通過ntp進行
6.bind 程序的版本應該一致 若不一致 應該主服務器版本低 從服務器版本高

從服務器

只需要 定義區域
        zone "ZONE_NAME" IN {
            type slave;
            masters{master_ip ;};
            file "slaves/ZONE_NAME.ZONE";
        };

rndc:

rndc COMMAND 
    COMMAND:
        reload:重載主配置文件和區域解析庫文件
        reload zone:重載區域解析庫文件
        status:查看bind狀態信息
        retransfer zone:手動啟動傳送過程,而不管序列號是否增加
        notify zone :重新對區域傳送發起通知
        querylog : 開啟或關閉查詢日誌
        trace:傳遞debug級別
        trace LEVEL :設定debug級別

子域授權

1. 在父區域中定義子區域

    shuai.gaoleng.com   IN      NS      ns1.shuai.gaoleng.com
                        IN      NS      ns2.shuai.gaoleng.com
    ns1.shuai.gaoleng.com       IN      A       192.168.117.131
    ns2.shuai.gaoleng.com       IN      A       192.168.117.132

2. 在相應主機上定義子區域解析庫文件

    $TTL 1d
    $ORIGIN shuai.gaoleng.com.

    @   IN  SOA ns1.shuai.gaoleng.com.  admin.shuai.gaoleng.com. ( 2018020601 1H 5M 1W 1D )
        IN  NS  ns1
        IN  NS  ns2
    ns1 IN  A   192.168.117.131
    ns2 IN  A   192.168.117.132
    www IN  A   192.168.117.129

定義轉發服務器

註意:1.被指定的轉發服務器需要為請求做遞歸,否則轉發請求不進行
      2.forward中 first和only first 表示若轉發的服務器 不允許查詢時 那自己還會去做查詢操作 only表示 若轉發的服務器不允許查詢時 那自己也就放棄查詢
      3.在進行子域或轉發測試時關閉dnssec 否則有的操作進行不了

1.全局定義 

    options{
        forward first|only;
        forwarders {FORWARD_DNS_IP;};  
    };

2.區域轉發

    zone "ZONE_NAME" IN {
            type forward;
            forword first|only;
            forwarders {FORWARD_DNS_IP;}; 
    };

bind 的安全相關配置

acl:將一個或多個地址歸並為一個集合;並通過統一的一個名字調用

    acl ACL_NAME {
            ip;
            net/per;
    };

示例:
acl slaves{
192.168.117.129;
192.168.117.131;
127.0.0.1;
};
以後調用salves相當於調用裏面的ip

bind的4個內置acl
none:沒有一個主機
any:任意主機
local:本機
localnet:本機的ip和掩碼運算後的網絡地址

註意:acl只能先定義後調用 其一般定義在options前面部分

訪問控制指令

allow-query{}:允許查詢的主機,白名單
allow-transfer{}:允許區域傳送的主機
allow-resursion{}:允許遞歸的主機           如 allow-resursion{ slaves;}; 在zone中不能定義
allow-update:允許更新區域數據庫中的內容,關閉才安全

示例
zone "gaoleng.com" IN {
type master;
file "gaoleng.com";
allow-transfer{slaves;};
allow-update{none;};
};

view視圖

    用於將不同地方客戶端的請求 解析到其客戶端所在區域的服務器上 如 將上海用戶訪問此域名 將其解析到傷害的服務器上 這樣響應的速度快

    一個bind服務器可定義多個view 每個view可以定義多個zone

    每個view用來匹配一組客戶端

    多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件

    格式:
        view VIEW_NAME {
            match-clients{};
        };

    註意:
            1.一旦啟用了view,所有的zone都只能定義在view中
            2.僅有必要在匹配到允許遞歸請求的客戶端所在的view定義根區域
            3.客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表

    示例:

        view localht{
            match-clients{mynet;};

        zone "localhost.localdomain" IN {
            type master;
            file "named.localhost";
            allow-update { none; };
        };

        zone "localhost" IN {
            type master;
            file "named.localhost";
            allow-update { none; };
        };

        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 {
            type master;
            file "named.loopback";
            allow-update { none; };
        };

        zone "1.0.0.127.in-addr.arpa" IN {
            type master;
            file "named.loopback";
            allow-update { none; };
        };

        zone "0.in-addr.arpa" IN {
            type master;
            file "named.empty";
            allow-update { none; };
        };

        zone "gaoleng.com" IN {
            type master;
            file "gaoleng.com";
        };

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "daniu.com" IN {
                type master;
                file "daniu.com.zone";
        };

        };

        view ext {
            match-clients{any;};
        zone"gaoleng.com" IN    {
            type master;
            file"gaoleng.com.ex.zone";
        };
        };

dns相關內容