網站伺服器建置與管理上課補充教材


Chapter 09:領域名稱伺服器 (DNS)
  1. Domain Name Service (DNS) 系統
    1. 原始最主要的目的是『透過主機名稱來找到該伺服器的 IP 』
      • 也就是說,每部伺服器應該會有一個網路主機名稱
      • 且該主機名稱應該要『註冊在這一個 DNS 系統的架構底下』!
      • 所以,透過詢問 DNS 系統,就會知道該伺服器的主機名稱對應到的 IP 了
      • 找到 IP 是最重要的目的!
    2. 那如何命名呢?基本上,跟人名地址很類似~
      • 先分區域,包括台北的、高雄的、台南的
      • 再分姓氏,姓蔡的、姓邱的、姓林的等等
      • 最後才是名字
      • 一般 DNS 的寫法與美式姓名比較像,重要的姓氏在後面,名字在前面,所以就會變成:
        • 鳥哥.蔡.台南 (住台南的蔡鳥哥)
        • 鳥哥.邱.台北 (住台北的邱鳥哥)
        • 都叫鳥哥,但是因為姓氏與住址不同,而可以找到正確的人名~我們姑且稱之為『完整的人名系統』
    3. 網路主機名稱跟上述的系統架構就很像了!你必須要去註冊一個領域名 (姓氏),你的主機名 (名字) 才能夠讓人家找到正確的地方:
      • 所有主機名稱都是從一個『頂層』所延伸出來的,這個頂層也稱為 root,設計上是一個小數點 (.)
      • 你可以跟頂層註冊一個姓氏,例如 .tw 這個頂層姓氏
      • 然後透過 .tw 自己分配下層領域,例如 .gov.tw, .edu.tw..
      • 每個下層姓氏再自己成立所需要的主機名稱,例如 www.gov.tw, www.edu.tw 這兩個政府與教育部的 WWW 伺服器主機名!
      • 從主機名稱到最頂層 (www.gov.tw.) 這個完整的主機名稱,就被稱為 FQDN (Fully Qualified Domain Name)
    4. 這一個大架構其實可以視為分散式『資料庫』系統!
      • 最頂層 (類似根目錄) 基本上有 13 部系統在管理下層的資料連結
      • 每一個節點只負責自己所管理註冊的網域,其他網域則會去頂層 (類似根目錄) 尋找關聯點再去往下找。
    5. DNS 資料庫的紀錄:正解、反解與領域 (zone)
      • 從主機名稱查詢到 IP 的流程稱為:正解
      • 從 IP 反解析到主機名稱的流程稱為:反解
      • 不管是正解還是反解,每個領域的記錄就是一個區域 (zone)
    6. DNS 伺服器資料庫的類型、權重與同步方式
      1. DNS 伺服器的資料庫類型:
        • hint: 紀錄最頂層 (.) 的領域紀錄方式,每部 DNS server 都應該要有這個紀錄才對
        • master: 讓管理員主動或透過管理程式碼主動修改主機名稱與 IP 對應的資料庫內容,該伺服器就是 DNS master。 並且可以提供 DNS 資料庫給 slave 查詢。
        • slave: 與 master 同樣可以管理同一個 domain 的資料庫,但其資料庫的來源為直接從 master 的紀錄中同步而取得的
      2. master/slave 的查詢權重?
        • 無論 master 還是 slave ,其所紀錄的資料應該是一模一樣
        • 在 DNS 系統當中,領域名稱的查詢是『先搶先贏』的狀態,因此每一部 DNS 伺服器的角色在 Internet 上面都是一樣的。
      3. master/slave 的同步方式:
        • DNS 伺服器,slave 透過分析來自 master 的資料庫序號 (serial number) 判斷是否需要更新,若比 slave 自己紀錄的序號還要大,則更新自己的資料庫,否則就不更新。
        • Master 若主動修改過資料庫,通常 DNS 系統會發出訊息告知 slave 來更新資料
        • Slave 也會定期去向 master 要求資料庫,並透過上述的序號比對方式來決定是否要更新。
    7. 練習:
      1. DNS 最主要的目的是什麼?
      2. DNS 最頂層的名稱亦稱為 root,他的代表符號為何?
      3. 何謂 domain name, hostname 與 FQDN ?
      4. 嘗試說明什麼是正解?反解與 zone
      5. DNS 的資料庫紀錄中,依據其資料的設定與取得方式,主要分為幾種類型 (type)?
  2. DNS 的階層架構與查詢方向
    1. DNS 的階層架構
      1. 如前所述,DNS 是有階層架構的,而最頂層的稱為 root ,以小數點 (.) 為符號表示。
      2. 相關的階層可以使用如下的圖示來解釋:
      3. 除了頂層的 root 之外,第一層 (top level domain, tld) 主要可以分為兩大類:
        • 一般最上層領域名稱 (Generic TLDs, gTLD):例如 .com, .org, .gov 等等
        • 國碼最上層領域名稱 (Country code TLDs, ccTLD):例如 .tw, .uk, .jp, .cn 等
      4. 常見的 gTLD 有底下幾大類:
        名稱代表意義
        com公司、行號、企業
        org組織、機構
        edu教育單位
        gov 政府單位
        net 網路、通訊
        mil 軍事單位
    2. 透過 DNS 找到主機名稱所屬 IP 設定的流程
      1. 一般來說,上層管理者,只會將『查詢權』交辦給下層管理者,這可以稱為『授權』
      2. 下層管理者只會紀錄自己的主機名稱,只要自己設定完成,全世界立刻生效!有點像分散式系統
      3. 由於『授權』與類似『分散式資料庫』系統,因此任何一部 DNS 伺服器,只要能找到 root (.) 的所在, 就可以找到所有合法的 DNS 主機名稱與 IP 的對應。
      4. 透過上述的說明,我們可以簡單的知道 DNS 查詢的流程如下:
      5. 可以透過 dig +trace domainname 來查詢『授權』與『紀錄』的結果
    3. 練習:
      • 最頂層 (tld) 的 DNS 設定,主要分為那兩種項目?
      • 最原本的 6 個 tld 主要是哪幾個?
      • 請使用 dig 追蹤 www.ksu.edu.tw 的授權與設定分別在哪裡?
      • 請使用 whois (若沒裝,請自行安裝) 找出 ksu.edu.tw 的相關註冊資料
  3. DNS 伺服器正解與反解的紀錄項目 (Resource Record, RR)
    1. 主要紀錄的格式為:
      [domain]   [ttl]          IN [[RR type]  [RR data]]
      [待查資料] [暫存時間(秒)] IN [[資源類型] [資源內容]]
      如果忘記,可以直接 dig linux.vbird.org 瞧一瞧喔!看看 A 的 RR 以及 RR data 各為何。
    2. 正解與反解都需要的紀錄項目:
      1. NS IP』: name server 的意思,亦即是管理該 domain 的伺服器 IP 位址
      2. SOA servername. admin_email. ( serial refresh retry expire ttl) 』主要是進行 master/slave 更新的程序。
        • servername:主要管理這個 domain 的 master 伺服器主機名稱
        • admin_email:管理員的 email
        • 序號 (serial):slave 判斷 master 的資料是新的與否,就是透過這個 serial 號碼。為了避免設定值出錯, 通常使用的格式為『 YYYYMMDDnn 』
        • 重新更新 (refresh):多久讓 slave 主動來更新資料庫一次
        • 錯誤嘗試 (retry): 當前一次更新沒有成功,則在比較短的時間內 (retry) 會嘗試去更新
        • 嘗試錯誤時間 (expire):如果一直嘗試都沒有成功,則不再嘗試
        • 暫存時間 (ttl, time to live):若不再嘗試,則多久後此筆紀錄應予以刪除
        • 上述的時間範圍應該是這樣的:
          • Refresh >= Retry *2
          • Refresh + Retry < Expire
          • Expire >= Rrtry * 10
          • Expire >= 7Days
      3. 練習:
        • 以 dig -t ns ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
        • 以 dig -t soa ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
        • 若將上述兩題改為 www.ksu.edu.tw 這樣的主機名稱,會發生什麼情況?
        • 想一想,為何上述資料使用 ksu.edu.tw 而不是 www.ksu.edu.tw 呢?
    3. 正解常見的紀錄項目:
      1. A IP』:紀錄該主機名稱或領域的 IP 位址
      2. AAAA IPv6』:紀錄該主機名稱或領域的 IPv6 的位址
      3. MX 權重數字 hostname』:與 email 有關的設定,可以設定多部 mail gateway,權重數字越小最重要, 而 hostname 必須要有 IP 才行 (就是要有 A 的對應喔!)!
      4. CNAME hostname』:有點類似『暱稱』『別名』的意思~
      5. 練習:
        • 以 dig www.ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
        • 以 dig -t mx mail.ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
        • 以 dig tw.yahoo.com 查詢該伺服器的 IP 為何?
    4. 反解常見的紀錄項目:
      1. PTR hostname』:其實反解大多也只有這個項目!就是某個 IP 對應的主機名稱而已。
      2. 練習:
        • 以 dig 查詢到 www.ksu.edu.tw 的 IP 之後
        • 再以 dig -x IP 查詢其反解資料為何?
        • 反解的主機名稱主要的設定為何?其 domain name 為何呢?
        • 同時觀察反解的 NS 設定為何?這相當的重要!
  4. 設定不含自身資料庫的 cache only DNS 伺服器
    1. 何謂 cache only DNS server
      1. cache only 僅進行 DNS 代理查詢與將結果快取一份到自身記憶體當中的功能而已。
      2. cache only DNS server 也是需要知道 root (.) 的所在,因此依舊需要一個 zone 來紀錄才行!
      3. 最頂層 DNS 伺服器的紀錄是公開的資訊,一般 DNS 套件都會主動提供!
    2. 何謂 forwarding DNS server?
      1. 透過更上層 DNS 來代理查詢,而不是自己跑去 root 查詢!
      2. 詳細流程有點像這樣:
      3. 主要是因為透過上層伺服器代理,因此,甚至完全不需要 zone 來設定 root 的所在!
    3. CentOS 7 的 DNS 軟體安裝
      1. DNS 伺服器軟體名稱為 bind (Berkeley Internet Name Domain, BIND)
      2. bind 軟體提供一個名為 named 的服務,這個服務的設定檔為 /etc/named.conf
      3. 因為 named 經常被攻擊,因此建議安裝 bind-chroot 將 bind 鎖在 /var/named/chroot 目錄內!
      4. 練習:請安裝 bind, bind-chroot 等相關軟體,並查詢 bind 所擁有的檔案檔名為何?
    4. CentOS 7 預設的 DNS server 設定
      1. 僅開放在 127.0.0.1 這個界面
      2. 僅允許本機 (127.0.0.1) 的資料查詢要求
      3. 針對整個 Internet 放行 DNS 代理查詢 (recursion) 的功能
      4. 載入了 . 的 zone
      5. 載入了文件上要求載入的 zone
    5. cache only DNS server 的基本要求:
      1. 監聽在所有的界面上
      2. 允許回應所有人對本 DNS 伺服器的資料查詢要求
      3. 只允許內部兩段網域的 DNS 代理查詢 (recursion-allow {...})
      4. 保留載入 root 的 zone
      5. 取消其他 zone 的載入
      6. 實際設定情況:
        # vim /etc/named.conf
        options {
                listen-on port 53 { any; };
                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     { any; };
                allow-recursion { 127.0.0.0/8; 192.168.0.0/16; 10.0.0.0/8; };
                dnssec-enable yes;
                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";
        };
        
        logging {
                channel default_debug {
                        file "data/named.run";
                        severity dynamic;
                };
        };
        
        zone "." IN {
                type hint;
                file "named.ca";
        };
        
    6. DNS 服務的啟動與觀察
      1. 不要啟動 named 而是要啟動 named-chroot 才行!
      2. 啟動的埠口應該是在 port 53 才對!
      3. 將本機的 DNS server 第一部改成本機 (127.0.0.1) 之後,重新啟動網路
      4. 練習:
        • 啟動 named-chroot 服務
        • 觀察 named-chroot 的登錄檔資訊,同步觀察 /var/log/messages 裡面的資料!
        • 觀察 port 53 是否啟動了?
        • 觀察是否放行全世界 port 53 的查詢功能 (firewall)
        • 查詢 www.ksu.edu.tw 的 IP 設定為何?
        • 再次查詢 www.ksu.edu.tw ,觀察其 ttl 的變化為何?
        • 讓 client 端也同步設定第一部 DNS 為 server 的內部 IP !
  5. DNS 正解設定
    1. 初期規劃項目:
      • ZONE 名稱為 stationXX.dic.ksu
      • NS 為 server.stationXX.dic.ksu,且管理員 student@mail.stationXX.dic.ksu
      • server.stationXX.dic.ksu: 10.255.XX.254
      • client.stationXX.dic.ksu: 10.255.XX.1
      • www.stationXX.dic.ksu: CNAME to server.stationXX.dic.ksu
      • ftp.stationXX.dic.ksu: CNAME to server.stationXX.dic.ksu
      • mail.stationXX.dic.ksu: 10.255.XX.254
      • mail.stationXX.dic.ksu: MX ?? mail.stationXX.dic.ksu
    2. Zone 的設定
      • 在 /etc/named.conf 裡面新增一個 zone 的項目:
        zone "stationXX.dic.ksu" IN {
                type master;
                file "named.stationXX.dic.ksu";
        }; 
      • 在 /var/named/ 新增一個檔案,檔名為 named.stationXX.dic.ksu,檔案內容有點像這樣:
        $TTL    1D
        @       IN SOA  server.stationXX.dic.ksu. student.mail.stationXX.dic.kus. (
                        2016112601 1D 1H 1W 3H )
        @       IN NS   server.stationXX.dic.ksu.
        server.stationXX.dic.ksu.      IN A            10.255.XX.254
        
        client.stationXX.dic.ksu.      IN A            10.255.XX.1
        www.stationXX.dic.ksu.         IN CNAME        server.stationXX.dic.ksu.
        ftp.stationXX.dic.ksu.         IN CNAME        server.stationXX.dic.ksu.
        mail.stationXX.dic.ksu.        IN A            10.255.XX.254
        mail.stationXX.dic.ksu.        IN MX 5         mail.stationXX.dic.ksu.
      • 重新啟動 named-chroot 之後,務必要查看 named-chroot 的 status 以及 /var/log/messages 的內容! 務必要看到所啟動的 zone 與該 zone 的 serial 是正確的才行!
      • 接下來就是測試了!請使用 dig 測試自己的設定是否正確!每一個紀錄項目都需要查詢!
  6. 反解設定項目
    1. 初期規劃項目:
      • ZONE 名稱為 XX.255.10.in-addr.arpa
      • NS 為 server.stationXX.dic.ksu,且管理員 student@mail.stationXX.dic.ksu
      • server.stationXX.dic.ksu: 10.255.XX.254
      • client.stationXX.dic.ksu: 10.255.XX.1
    2. Zone 的設定
      • 在 /etc/named.conf 裡面新增一個 zone 的項目:
        zone "XX.255.10.in-addr.arpa" {
                type master;
                file "named.10.255.XX";
        }; 
      • 在 /var/named/ 新增一個檔案,檔名為 named.10.255.XX,檔案內容有點像這樣:
        $TTL    1D
        @       IN SOA  server.station100.dic.ksu. student.mail.station100.dic.kus. (
                        2016112801 1D 1H 1W 3H )
        @       IN NS   server.station100.dic.ksu.
        254     IN PTR  server.station100.dic.ksu.
        1       IN PTR  client.station100.dic.ksu.
      • 重新啟動 named-chroot 之後,務必要查看 named-chroot 的 status 以及 /var/log/messages 的內容! 務必要看到所啟動的 zone 與該 zone 的 serial 是正確的才行!
      • 接下來就是測試了!請使用 dig 測試自己的設定是否正確!每一個紀錄項目都需要查詢!
Top
HOME