Centos Bind9 DNS 伺服器架設

來源:互聯網
上載者:User

 

使用環境:Centos 5.5、Bind9、Chroot、Webmin

 

DNS 概述

  • 電腦網路中的主機之間只認識 IP,但人們更喜歡為電腦命名(網址),因為名稱更直觀易記
  • 最初的名稱服務是通過 /etc/hosts 來實現的,可以記錄經常訪問的電腦名稱(網域名稱或主機名稱)及其IP地址。現在仍在使用
  • DNS 是這樣一種網路通訊協定(系統),它能把網域名稱轉換為IP地址。在 Internet 上,它有一個龐大的分散式資料庫,記錄著全世界伺服器的名稱和對應的IP地址(雙向映射)
  • DNS 是樹型結構的分布式系統,由根域(root)、頂域(如 .com 、.cn)和各級子域(job.gdut.edu.cn)組成。DNS解析的最終記錄是主機名稱(樹葉、結點),而主機名稱是在某域(樹枝、目錄)之下的。

 

DNS 分類(按功能/角色劃分)

  • 權威 DNS
    • 權威 DNS 是經過上一級授權對網域名稱進行解析的伺服器,同時它可以把解析授權轉授給其他人,如 COM 頂級伺服器可以授權 ABC.COM 的權威伺服器為 NS.ABC.COM,同時NS.ABC.COM還可以把授權轉授給 NS.DDD.COM,這樣 NS.DDD.COM就成了 ABC.COM實際上的權威伺服器了。
    • 權威 DNS 真正儲存了網域名稱和IP映射的記錄。平時我們解析網域名稱的結果都源自權威 DNS。
  • 遞迴 DNS
    • 負責接受使用者對任意網域名稱查詢,並返回結果給使用者。遞迴 DNS的工作過程參見本文第三節。遞迴 DNS 可以緩衝結果以避免重複向上查詢。
    • 我們平時使用最多的就是這類 DNS,他對公眾開放服務,一般由網路電訊廠商提供,大家都自己可以架遞迴 DNS提供服務。遞迴 DNS一定要有可靠的互連網串連方可使用。
    • 遞迴 DNS 一般只設定了根域Zone“. ”,在這個Zone 中儲存著全球根服務的IP地址清單。
    • 最新的根伺服器位址列表在這裡可以得到:ftp://ftp.internic.net/domain/named.root
  • 轉寄 DNS
    • 負責接受使用者查詢,但它不進行從根伺服器開始的標準遞迴查詢過程。它只是把查詢請求簡單的轉寄給其它DNS(如遞迴 DNS),由其它DNS去負責實際的查詢工作,最後把其它DNS的查詢結果返回給使用者。它也具備緩衝功能。
    • 他主要使用在沒有直接的互連網串連,但可以串連到一個遞迴 DNS那裡,這時使用轉寄 DNS就比較合適。
    • 其缺陷是:直接受遞迴 DNS的影響,服務品質較差。
以上三類DNS中,只有權威DNS真正儲存了名稱-IP記錄。事實上一個DNS可能同時具備上面的三種功能,這完全依據於管理員的配置。

 

網域名稱解析過程(DNS 伺服器工作原理)

  • 使用者主機myhost訪問一個網址,如 www.job.gdut.edu.cn
  • myhost 取出/etc/resolv.conf 設定的主DNS伺服器(mydns)的IP地址
  • myhost 通過IP地址訪問mydns,查詢該DNS伺服器中有沒有域job.gdut.edu.cn的記錄
    • 如果有,再查詢該域下有沒有主機名稱為www的記錄,取出其IP給myhost,整個解析過程完成
    • 如果沒有,則根據當前DNS伺服器的配置,可能作如下某一處理過程(轉寄DNS或遞迴查詢DNS):
      • mydns把myhost的DNS請求轉寄給Forwarder DNS伺服器(Forward 緩衝模式)。這是一個簡單的代理過程,網域名稱解析成功與否最終取決於Forwarder DNS
      • mydns進一步訪問根域,由根域開始一級一級向下遞迴查詢各子域,真到完成。它是怎麼訪問根域的呢?一般DNS都有設罷根域Zone ".",這個Zone中記錄了當前Internet上十多台根網域服務器的IP地址,而這十多台根網域服務器通常是比較固定的,其記錄可從網上下載(ftp://ftp.internic.net/domain/named.root)
  • mydns訪問根域“.”伺服器,查詢資料庫中有沒有“.cn”記錄。通常根網域服務器“.root”老大會說:“嘿,我這裡有.cn的記錄,但它是一個子域,我把所有“xxx.cn”形式的網域名稱解析工作都轉交給它了,你去問它吧,我給你它的IP”
  • mydns查詢子域“.cn.”的DNS伺服器,通常該伺服器中儲存有類似“.com.cn”“.edu.cn”“.net.cn”“.org.cn”的網域名稱記錄,通過對比,我們要的是“.edu.cn”這個網段,所以該子網域服務器會把它的下屬“.edu.cn”網域服務器(NS)的IP發給mydns。
  • mydns 查詢子域“.edu.cn.”的DNS伺服器,該伺服器中儲存了形如“xxx.edu.cn”的所有記錄。該伺服器在其資料庫中找到“gdut.edu.cn”網域服務器(NS),並把它的IP發給mydns。
  • mydns 查詢子域“gdut.edu.cn.”的DNS伺服器,該伺服器中儲存了形如“xxx.gdut.edu.cn”的所有記錄。該伺服器在其資料庫中找到“job.gdut.edu.cn”網域服務器(NS),並把它的IP發給mydns。
  • mydns 查詢子域“job.gdut.edu.cn.”的DNS伺服器,該伺服器在其資料庫中Look了一下,驚奇地發現,有一條記錄是“www”啊,而且它是主機名稱的地址(A,終端葉子),而不再是網域名稱(NS)了。於是,它把名為“www”的主機IP地址發給了mydns。
  • mydns把查詢結果(www.job.gdut.edu.cn - IP 映射)暫時緩衝起來,它想,下次再遇到你,我就輕鬆多了(省去了複雜的查詢過程)。至於緩衝多久,由“job.gdut.edu.cn”網域服務器設定的TTL參數指定,因為這個映射可能會變化。
  • mydns把主機“www.job.gdut.edu.cn”的IP地址交給myhost,圓滿完成解析工作,oh yeah!
  • myhost通過這個IP,終於可以訪問www.job.gdut.edu.cn了。這是一個IP路由過程,儘管還是很複雜,但不是DNS能夠管的了。

DNS 的一些概念

  • 域(Zone):表示一組電腦集合的空間,樹型抽象概念。域下可以有無數的主機,還可以包含子域。如根“. (root)”是一個域,“.cn”是一個域,“.edu.cn”也是一個域,但“.edu.cn”是“.cn”的一個子域。
  • FQDN:Fully Qualified Domain Name,即完全合格網域名稱,是指主機名稱加上網域名稱組成的全路徑,用於唯一標識 Internet 上某一主機的名稱。如 www.flyox.com,其中flyox.com是網域名稱,www是該域下的主機名稱,可以想像這台主機是用於提供Web服務的。
  • 正向解析:提供從網域名稱到IP地址的映射
  • 反向解析:提供從IP地址到網域名稱的映射
  • 委派:也稱授權,即把當前域(如.com)下的某子域(abc.com)的所有網域名稱的解析工作委派給另一台DNS伺服器。這是DNS系統分布式結構的基本。通過一條NS記錄附加一條A記錄實現。注意委派只能發生在上下級之間,同級之間不能委派。

 

主從結構的 DNS Server

  • 主從結構不是必須的,通常只要一個主伺服器(Master)就行了。加多一個或多個從伺服器(Slave,次要伺服器)是為了整個網路的網域名稱解析更加可靠
  • 不管是 Master 還是 Slave,都是獨立的DNS伺服器,都要進行單獨配置。只有某一個或幾個域(Zone)是共用的,只在 Master 上配置即可,Slave設定好後會自動同步(SOA記錄指定)。這樣的好處是只需要設定一處。

 

Forward-only (Cache-only) DNS Server (轉寄 DNS)

  • 這種類型的 DNS 主機沒有自己的資料庫,也不向根DNS伺服器查詢,只是單純協助 Client 端向外部的 DNS 主機要求資料而已。它是一個簡單的“代理人”角色,把DNS查詢請求簡單地轉寄給外面的DNS伺服器。
  • 通常設定在防火牆上面。
  • 修改設定檔“/etc/named.conf”,編輯“options”節即可完成該類型的DNS配置,如下:

// This settings is only for forwarding DNS Server options { pid-file "/var/run/named/named.pid"; //我這裡設定 pid-file !這個時候, //請特別留意該路徑的所有人 ( owner ) //一定是要 named 這個人才行! forward only; //只允許 forward! forwarders { 168.95.1.1; //我這裡使用 hinet 的 DNS ! 139.175.10.20; //這個是 seednet 的 DNS ! }; };

 

Chroot 環境下的Bind

    • 為了伺服器安全,bind9預設提供了一個可選的組件:bind-chroot
    • chroot 是 change root to ... 的意思,就是把 Linux的根目錄映射到另一目錄,這樣就不用直接操作Linux的根目錄進行伺服器的配置了
    • bind-chroot 的映射目錄由設定檔 “/etc/sysconfig/named” 指定。bind 的 chroot 預設為“/var/name/chroot”
    • chroot 環境下的設定檔的路徑,都是相對於設定的chroot目錄,並不是絕對路徑。如預設環境下 /etc/named.conf 實際路徑是 /var/name/chroot/etc/named.conf 

    Bind 相關的設定檔

    • 檔案 /etc/sysconfig/named:由該檔案指定是否啟用chroot及其額外參數
    • 檔案 /etc/named.conf:主設定檔,可設定 bind 的全域參數(options)、各域(Zone)的參數和域庫檔案路徑
    • 目錄 /var/named:該目錄存放著各個域庫檔案,即/etc/named.conf設定的Zone的具體記錄檔案,包括正解和反解域
    • 目錄 /var/run/named:named程式執行時預設將pid-file存放在該目錄

    域庫檔案中網域名稱的表示方法

    • 預設Zone名:“@” - named.conf 中定義的 Zone 名(如“bt.com”)
    • 簡短名稱:主機名稱或Zone名後不帶小數點“.”,表示bind在解析時會自動加上預設Zone名(如 “.bt.com.”)最終成為FQDN
    • 長名稱:整個網域名稱的完整名稱,即FQDN,以“.”結束,如 “file.bt.com.” 注意FQDN中的最後一個點表示根的意思。

    記錄項(RR)類型

    • NS:名稱伺服器,表示將到指定的NS查詢記錄,一般用於指向本域(預設)和子域DNS伺服器(再遞迴查一次),相當於樹中的枝
    • A:主機對應的地址,最終要查詢的記錄,相當於樹的葉子
    • MX:指明當前域下使用的郵件伺服器的FQDN,以供郵件發送端查詢到正確的目標郵件系統主機
    • CNAME:設定主機的別名。多個名稱指向同一IP時適用,這樣IP一旦改變,只需要修改一次
    • SRV:服務位置記錄。設定當前網域名稱下預設的各類伺服器(地址、連接埠)。設定後,可以通過當前網域名稱直接存取各類服務,而不用指定具體的伺服器主機。與MX類似。

     

    DNS 伺服器測試

    • 配置好後,重啟 named 服務 (# service named restart)
    • 查看日誌,驗證 named 工作正常
      • #  tail -n 15 /var/log/messages | grep named
      • 沒有異常出現
    • DNS 用戶端面命令
      • host -l [FQDN] [dns-server]:使用指定的[dns-server]查詢網址[FQDN]
      • nslookup [FQDN] [dns-server]
      • dig [@dns-server] [FQDN] [+trace]
      • whois [FQDN]

    子網域名稱授權問題

    • 要想讓本域外的主機能通過網域名稱訪問本域,需要得到上一級DNS的授權(委派)
      • DNS 授權:把目標域(子域)的網域名稱解析工作委託給某一台DNS (一級級向下傳遞直到權威 DNS)
      • 權威 DNS:實際儲存目標域各網域名稱記錄的DNS
    • 要想讓Internet上的主機能夠訪問你架設的DNS域,你得加DNS加入到Internet網域名稱體系,即得先申請一個網域名稱,並且得到上頂層網域伺服器的授權,成為所申請網域名稱的權威DNS。
    • 授權後,上一級的 DNS 中有一條指向你的DNS伺服器的NS記錄和指明自己DNS地址的A記錄,如:

    ; 這是上一級 zone ".org" 的設定檔 ; 在互連網中這是頂級網域名稱,只有org的網域名稱代理商有權修改 ; 下面是網域名稱 flyox.org 的授權記錄 flyox.org. IN NS ns.flyox.org. ; 把子域 flyox.org 的解析工作委派給 ns.flyox.org ns.flyox.org. IN A 202.54.47.155 ; 並且告知 ns.flyox.org 的地址是 202.54.47.155 ; ... 其它網域名稱記錄

    ; 這是你自己的DNS伺服器(ns.flyox.org)中 zone "flyox.org" 的設定檔 ; 下面是網域名稱 flyox.org 的權威記錄 @ IN NS ns.flyox.org. ; 本域 flyox.org 由自己解析,本域解析不能省略 ns IN A 202.54.47.155 ; ns.flyox.org 伺服器位址 go IN NS ns1.go.flyox.org. ; 再向下授權給子域 go.flyox.org ns1.go IN A 236.75.110.5 ; ns1.go.flyox.org. 的地址 www IN A 202.54.47.156 ; www.flyox.org 的地址是 202.54.47.156 ; ... 其它網域名稱記錄

    注意:

    • NS、MX、CNAME 等記錄可以指向域外的主機,也可指向本域內的主機:
      • 指向域外主機時:應確保外部DNS在整個名稱體系中能解析出真正的IP
      • 指向域內主機時:一般為所指的網域名稱配套提供 A 記錄
    • NS 指向域外主機/伺服器,即是把該子網域名稱的解析情況授權給這個DNS。所以說,DNS 體系在邏輯分布上是樹型的,但 DNS 本身的網域名稱可能不在同一域,如DNS伺服器“ l.gtld-servers.net ”可解析 xxx.com 的網域名稱
    • 在 Internet 上,頂級網域服務器儲存了每一網域名稱的NS記錄,其 DNS 可以是在本域外的主機。MX、CNAME記錄也一樣。
    • 一般來說,使用者註冊了一個頂級網域名稱(abc.com),網域名稱代理商會提供一個Web控制台,通過這個面板,使用者可以修改頂級域(如.com)下網域名稱 abc.com 的NS記錄,而預設情況下這個NS記錄是指向網域名稱代理商自己的DNS伺服器的。如果使用者使用代理商的DNS,面板還可以修改 abc.com 域下各個記錄,如MX記錄、一定數量的A記錄等,如果代理商宣稱支援次層網域,那還可以添加NS記錄。
    • 有些網域名稱代理商規模小,限於公司實力,可能沒通過 ICANN 的認證,也沒自己的DNS,也沒有自己的企業郵箱伺服器,也沒有Web虛擬機器主機,那麼,就可以把NS記錄指向夥伴的DNS,再通過這個DNS添加MX記錄指向企業郵箱服務商……最終實現整合。

     

    空網域名稱解析和泛網域名稱解析

    • 空網域名稱:即當前域的預設主控件,如很多網友懶得輸入首碼“www.”
    • 泛網域名稱:即在當前域匹配不了的名稱都將指向到該地址

    ; 假設當前域是 flyox.org @ IN A 202.54.47.156 ; 空網域名稱 flyox.org 將解析到Web伺服器 * IN A 202.54.47.156 ; 泛網域名稱 *.flyox.org 也將解析到Web伺服器 

     

    CNAME 記錄使用注意事項
    • NS、MX 記錄指定的名稱一定要能解析的。如果名稱是本域的,還必須提供A記錄,且不能是CNAME記錄。
    • 空網域名稱@(如 bt.com)也不能使用CNAME記錄,泛網域名稱*(如 xxx.bt.com)可以使用 CNAME 記錄

     

    使用DNS實現簡單的負載平衡

    • DNS 經常被用作一個低成本的負載平衡解決方案(依靠多條同一網域名稱不同IP的A記錄實現)
    • DNS 通過輪詢的方式分配不同的IP。即在客戶機查詢網域名稱的IP時,第一台客戶機得到第一IP,第二台客戶機得到第二個IP……
    • 同一台客戶機多次查詢將得到同一個IP,因為客戶機上也有DNS緩衝。使用 ipconfig /flushdns 清空緩衝後,可以檢驗這種機制

     

    實驗:親手締造DNS體系,建立DNS私人根

    請參考《親手締造DNS體系,建立DNS私人根:DNS系列之六》做一個完整的DNS實驗。文章是以Windows Server 為例子,但配置過程是一樣的,設定檔也差不多。

     

     

     

    架設 DDNS 伺服器

    • DDNS:動態DNS,適用於有公網IP,但IP經常變動的場合,如ADSL寬頻
    • 通過 bind 的 update-policy 實現
      • 伺服器端:產生一對密鑰,把公開金鑰複製到 /etc/named.conf 的 key 節,並把這個key 授權給動態DNS的Zone
      • 用戶端:使用產生的公開金鑰和私密金鑰,按時(或 IP變更後)執行命令 “nsupdate”,更新新的IP到DDNS中

     

    參考:

    《鳥哥的Linux私房菜-伺服器架設篇》

    《淺談DNS體繫結構:DNS系列之一》

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.