DNS服務器的搭建

DNS: Domain Name Service
    C/S
        S: bind   bekerley internet name domain
        C: 共享庫

    53/udp, 53/tcp

   

    名稱解析:主機名解析
        把一種名稱轉換爲另一種名稱的過程
        名稱:字串、數字

        解析庫:某種存儲
            username <--> uid

            某種存儲:
                文本文件
                關係型數據庫
                LDAP:Lightweight Directory Access Protocol, 389/tcp

        解析:根所用戶所提供一種名稱,去查詢解析庫,以得到另一種名稱

    hosts: 文本文件
        IANA:
            文本文件
            ftp:--> DNS(中心服務器)

        Unix:

        向下授權管理機制

        根域:root domain
            一級域:top-level domain(頂級域)
            二級域:公司、組織、個人使用
            主機:www
                     其中根域和頂級域是有inan直接管理分配的

        遞歸:
            A --> B --> C –> D        A問B;B自己不知道,但B知道C有A要的結果,然後B去找C要結果;但C自己也不知道,但C知道D有A要的結果,然後C去找D要結果;得到結果後逐級上報結果,D給C,C給B,B給A

        迭代:
            A --> B
            A --> C
            A –> D

        互聯網上是     遞歸 + 迭代的方式,

    根結點:全球的根節點一共13個

    DNS中的名稱與對應的主機的真實主機名不要求是一樣。這可以實現負載均衡
        一個名稱可以對應多個IP
        一個IP上也可以多個名稱

    DNS名稱解析:
        FQDN --> IP正向解析
        IP --> FQDN反向解析。郵件服務器要求必須是反向解析的,負責認爲是垃圾郵箱服務

       反向解析的域名後綴  .in-addr.arpa

    一級域:
        組織域: .com, .org, .net, .mil軍事組織, .edu, .gov政府組織,                .info, .cc, .me, .tv
        國家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir
        反向域:.in-addr.arpa

    域:domain是一個邏輯概念, 區域:zone是一個物理概念,任何一個解析庫都叫做一個區域,故一個域有2個區域,但並不是域包含區域,層級不同。
        正向解析:FQDN --> IP
            正向解析庫     從物理概念來講是個文件
        反向解析:IP --> FQDN
            反向解析庫     從物理概念來講也是個文件

    區域解析庫:
        資源記錄:rr(resource record)     每一行的條目,用來標記不同的身份
            有類型的概念:用於標記此記錄解析的屬性
                SOA: Start Of Authority, 起始授權記錄,一個區域文件只能有一個,標記這個NS服務器區域由誰來管理;
                NS:Name Server名稱服務器,可以有多個
                MX: Mail eXchange, 郵件交換器,MX記錄有優先級屬性(0-99);
                A:FQDN --> IP,專用於正向解析庫
                PTR: IP --> FQDN,專用於反向解析庫
                AAAA:FQDN --> IPv6,專用於正向解析庫
                CNAME: Canonical Name,正式名稱

    DNS查詢:
        遞歸
        迭代

        hosts --> local dns cache --> dns server (cache) --> 迭代

        非權威應答:通過緩存,未必準確

客戶端要接入互聯網就要給其DNS指向,linux是在/etc/resolv.conf裏面用nameserver配置指向DNS服務器的,可以有多個,一般只有第一個生效,在第一個出問題後第二個才生效

    DNS服務器類型:
        主DNS服務器
        從DNS服務器
        緩存服務器:只負責一半的任務,不用註冊,只管出去迭代,而不給外部解析本地。

        解析庫文件同步的過程:區域傳送 (單方向傳送)
            zone transfer

                完全區域傳送:axfr
                增量區域傳送: ixfr

                週期性檢查 + 通知

子域授權:

    爲什麼要創建子域呢?比如在一個大公司中申請了一個域名,但公司有上百臺主機,而且每個不同的部門要求自我獨立互不影響,此時一個域管理起來就很困難了,所以在這個域下劃分幾個子域來實現更好的管理。

wKioL1PiaCPgKIF2AAF64kXUO3U831.jpg

    正向子域授權:

               只需要在父域的區域解析庫中添加“膠水記錄”, glue record

                  子域名稱      IN     NS  子域的名稱服務器,注意每個子域可能有主從多臺服務器,此時用ns,ns2,ns3,……。
                ops     IN      NS      ns.ops
                 ns.ops     IN         A       172.16.100.77
               

        子域和父域不一定在同一網段下,只要2個能夠通信即可。例如,這裏用父域172.16.249.191;子域是192.168.1.199。

  先編輯/var/named/mageedu.com.zone加入我們所需的條目

wKioL1PiaDjj0I8QAACk5oeBl8c029.jpg

重新載入# rndc reload

wKiom1PiZzSzbm2oAAAwLY45gX4482.jpg

本地測試# dig -t NS ops.mageedu.com @172.16.249.191

wKiom1PiZ0biCwYmAAFunnFboVs649.jpg爲什麼解不到了,本地有記錄的啊。

我們做完全區域傳送看下# dig -t AXFR mageedu.com @172.16.249.191

wKioL1PiaG6S5pAXAAKT7wLwP0U197.jpg其實是因爲此時子域服務器還未建立,所以一切都無法響應

 

接下來我們建立子域服務器:我們子域的地址是:192.168.1.199

     進入我們所在主機,安裝bind後  在# vim /etc/named.conf中把不方便我們實驗的東西註釋掉;然後直接啓動named,由於是第一次安裝啓動bind,所有啓動是生成/etc/rndc.key會慢些。完成後,編輯# vim /etc/named.rfc1912.zones文件,定義新的區域:zone   “ops.mageedu.com” IN  {

                                                                                                           type    master;

                                                                                                            file    “ops.mageedu.com.zone”;

                                                                                                             };

    配置好後,本地測試# dig -t A mail.ops.mageedu.com @192.168.1.199

wKioL1PiaH2QoLjRAAISaJ00RLU815.jpg

而後去父節點測試# dig -t NS ops.mageedu.com @172.16.249.191

wKiom1PiZ3bjTK-lAAHT86U3myk232.jpg此時OK。

 

配置轉發器:

# vim /etc/named.conf配置

wKioL1PiaKLBiPmRAABQuX4XB1M173.jpg加入允許遞歸項和轉發對象:172.16.249.191就當前而言就是父域的服務器。

# named-checkconf

wKioL1PiaLKTKPlsAAAc9ui0fno894.jpg檢測語法是否有誤。

# rndc reconfig重讀配置文件

wKiom1PiZ6vDidnvAAAbYRdaOs0696.jpg

# dig -t A www.mageedu.com @192.168.1.199解析mageedu.com域

wKioL1PiaNHCNqrfAAIB27EVpTc464.jpg。這裏轉發的是所有的非本機負責的區域給父級DNS服務器。

                    也可以轉發某個或某些特定的區域給上層DNS服務器;配置轉發器:

   首先改變/etc/named.conf的配置,然後清空緩存#rndc flush

wKioL1PiaODTrBV3AAAVZd9Asec857.jpg

配置#vim /etc/named.rfc1912.zones文件

wKiom1PiZ9SQCkuSAABIZKGNiaM316.jpg

檢查

wKioL1PiaPviH6sFAAA0FrEW9kA204.jpg

此時想解析# dig -t A www.sohu.com就解析不了了

wKioL1PiaQjD8K01AACtMw-yy3Y451.jpg

 

 

 

 

 

    編譯安裝

    首先得到所需的bind源代碼,此處以bind-9.9.5爲例,解壓後cd到bind-9.9.5下

  確保系統用戶named的存在,不存在則添加之。

# ./configure --prefix=/usr/local/bind9.9.5 --sysconfdir=/etc/named/ --enable-threads --disable-chroot --disable-ipv6

wKiom1PiZ_-haiFKAAIZBeB2HjA371.jpg

# make && make install。

# vim /etc/profile.d/bind.sh

wKioL1PiaSnDNRsXAAA2vm2IY0Y290.jpg

提供主配置文件/etc/named/named.conf

爲根及localhost提供區域解析庫

# dig -t NS . @a.root-servers.net > /var/named/named.ca

# named-checkconfig
    # named -g -u named -c /etc/named/named.conf

    # named -u named

、提供rndc
    # rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
    # chown root:named /etc/named/rndc.conf
    # chmod 440 /etc/named/rndc.conf

把rndc.conf中的後半段複製到named.conf中,並啓用之;

提供腳本

                #!/bin/bash
                #
                # description: named daemon
                # chkconfig: - 25 80
                #
                pidFile=/usr/local/bind9/var/run/named.pid
                lockFile=/var/lock/subsys/named
                confFile=/etc/named/named.conf

                [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions

                start() {
                    if [ -e $lockFile ]; then
                        echo "named is already running..."
                        exit 0
                    fi

                    echo -n "Starting named:"
                    daemon --pidfile "$pidFile" /usr/local/bind9/sbin/named -u named -c "$confFile"
                    RETVAL=$?
                    echo

                    if [ $RETVAL -eq 0 ]; then
                        touch $lockFile
                        return $RETVAL
                    else
                        rm -f $lockFile $pidFile
                        return 1
                    fi
                }

                stop() {
                    if [ ! -e $lockFile ]; then
                        echo "named is stopped."
                    #    exit 0
                    fi

                    echo -n "Stopping named:"
                    killproc named
                    RETVAL=$?
                    echo

                    if [ $RETVAL -eq 0 ];then
                        rm -f $lockFile $pidFile
                        return 0
                    else
                        echo "Cannot stop named."
                        failure
                        return 1
                    fi
                }

                restart() {
                    stop
                    sleep 2
                    start
                }

                reload() {
                    echo -n "Reloading named: "
                    killproc named -HUP
                    #killall -HUP named
                    RETVAL=$?
                    echo
                    return $RETVAL
                }

                status() {
                    if pidof named &> /dev/null; then
                        echo -n "named is running..."
                        success
                        echo
                    else
                        echo -n "named is stopped..."
                        success
                        echo
                    fi
                }

                usage() {
                    echo "Usage: named {start|stop|restart|status|reload}"
                }

                case $1 in
                start)
                    start ;;
                stop)
                    stop ;;
                restart)
                    restart ;;
                status)
                    status ;;
                reload)
                    reload ;;
                *)
                    usage
                    exit 4
                    ;;   
                esac    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章