第 9 堂課 - 領域名稱伺服器 (DNS)
上次更新日期 2022/11/18
雖然要連上 Internet 得要使用 TCP/IP,但不論是 IPv4 還是 IPv6 的 IP 位址都是數字與英文的混合資料,對於人腦來說,真的是很難記憶。 因此早期的工程師就透過 /etc/hosts 來進行對應。但是 email 到 web 的火紅程度,讓 server 的數量整個大增,因此 /etc/hosts 無法負荷了! 所以後來就有分散式設定主機名稱與 IP 對應的 DNS 系統產生!DNS 真是好重要的服務!沒有了它,網際網路基本上就已經是癱瘓的狀態! 現在讓我們來架設屬於你的 DNS 系統吧!
學習目標
- 理解 DNS 的正解/反解/zone 的意思
- 了解 named.conf 的設定與正解 zone、反解 zone 的設定
- 了解 master/slave DNS server 的設定
- 9.1: Domain Name Service (DNS) 系統
- 9.2: DNS 的階層架構與查詢方向
- 9.3: DNS 伺服器正解與反解的記錄項目 (Resource Record, RR)
- 9.4: 設定不含自身資料庫的 cache only DNS 伺服器
- 9.5: DNS 正解設定
- 9.6: DNS 反解設定
- 9.7: Master/Slave 的設定
- 9.8: 課後練習
9.1: Domain Name Service (DNS) 系統
DNS 原始最主要的目的是『透過主機名稱來找到該伺服器的 IP 』,如此一來,人們就可以不用記憶 IP 而只須記憶主機名稱即可。 而主機名稱相對來說就像人名,會比較好記。想想看,你是記憶朋友的名字比較厲害,還是記憶朋友的身份證比較厲害?戶政事務所要找的是身份證號碼, 但是我們要找的是人名,兩者間的對應,對於伺服器來說,就是 DNS 系統了。所以說, DNS 系統就是網際網路的戶政事務所囉。 相關的 DNS 目標為:
- 每部伺服器應該會有一個網路主機名稱
- 且該主機名稱應該要『註冊在這一個 DNS 系統的架構底下』!
- 所以,透過詢問 DNS 系統,就會知道該伺服器的主機名稱對應到的 IP 了!
- 找到 IP 是最重要的目的!
- DNS 的主機命名方式
主機名稱也不是隨便就能命名的!就像您的大名一樣,也不是可以隨便更改的!至少,你的姓氏基本上就是不能變更對吧!一般來說,人名與地址相關的命名方式為:
- 先分區域,包括台北的、高雄的、台南的
- 再分姓氏,姓蔡的、姓邱的、姓林的等等
- 最後才是名字
- 一般 DNS 的寫法與美式姓名比較像,重要的姓氏在後面,名字在前面,所以就會變成:
- 鳥哥.蔡.台南 (住台南的蔡鳥哥)
- 鳥哥.邱.台北 (住台北的邱鳥哥)
- 都叫鳥哥,但是因為姓氏與住址不同,而可以找到正確的人名~我們姑且稱之為『完整的人名系統』
網路主機名稱跟上述的系統架構就很像了!你必須要去註冊一個領域名 (姓氏),你的主機名 (名字) 才能夠讓人家找到正確的地方:
- 所有主機名稱都是從一個『頂層』所延伸出來的,這個頂層也稱為 root,設計上是一個小數點 (.)
- 你可以跟頂層註冊一個姓氏,例如 .tw 這個頂層姓氏
- 然後透過 .tw 自己分配下層領域,例如 .gov.tw, .edu.tw..
- 每個下層姓氏再自己成立所需要的主機名稱,例如 www.gov.tw, www.edu.tw 這兩個政府與教育部的 WWW 伺服器主機名!
- 從主機名稱到最頂層 (www.gov.tw.) 這個完整的主機名稱,就被稱為 FQDN (Fully Qualified Domain Name)
這一個大架構其實可以視為分散式『資料庫』系統!因為所有的名字都在個別的 DNS 伺服器當中設定,再透過加入 DNS 系統,讓大家都能查詢的到! 基本的 DNS 大架構是這樣的:
- 最頂層 (類似根目錄) 基本上有 13 部系統在管理下層的資料連結
- 每一個節點只負責自己所管理註冊的網域,其他網域則會去頂層 (類似根目錄) 尋找關聯點再去往下找。
所以最重要的就是『註冊』囉!就像你生出小孩,得要去戶政事務所報戶口一樣啦!只是有所謂的『授權』功能,讓你也能開小型戶政事務所而已。
- DNS 資料庫的記錄:正解、反解與領域 (zone)
我們經常聽到領域名稱 (domain name) 對吧!那就是 DNS 的基本項目,領域名稱就有點像是你的祖籍姓氏這樣,那主機名稱就有點像是你的名字而已。 不過在查詢的時候,你總是得要查詢到你的『祖籍姓氏』之後,才能查到你吧!就有點像族譜這樣。不過,因為查詢的方式有時會從主機名稱查到 IP, 有時需要從 IP 反查到主機名稱,因此就有一些定義需要了解一下:
- 從主機名稱查詢到 IP 的流程稱為:正解
- 從 IP 反解析到主機名稱的流程稱為:反解
- 在 DNS 伺服器的資料庫設定中,不管是正解還是反解,每個領域的記錄就是一個區域 (zone)
- DNS 伺服器資料庫的類型、權重與同步方式
根據上述的說明,我們知道 DNS 最頂層是由 13 部主機所構成,然後再依據一層一層的註冊來授權下游 DNS 來分別設定屬於自己的族譜 (正反解資料庫)。 另外,由於 DNS 是很重要的服務,因此同一個領域可能會有許多部系統協同服務,以避免單一主機掛掉而導致整個 DNS 記錄資料的損毀。 而為了簡化設定的流程,因此就有所謂的主從 DNS 伺服器。
先來說說 DNS 伺服器的資料庫類型吧:
- hint: 記錄最頂層 (.) 的領域記錄方式,每部 DNS server 都應該要有這個記錄才對
- master: 讓管理員主動或透過管理程式碼主動修改主機名稱與 IP 對應的資料庫內容,該伺服器就是 DNS master。 並且可以提供 DNS 資料庫給 slave 查詢。
- slave: 與 master 同樣可以管理同一個 domain 的資料庫,但其資料庫的來源為直接從 master 的記錄中同步而取得的
也就是說,全部的 DNS server 應該都要知道最頂天的 . 這個 zone 的類型是獨一無二的 hint 類型,其他的設定則主要是 master 設定。 而為了簡化設定,所以假設你有三部內容需要完全一模一樣的 DNS 伺服器,那麼針對某一個特定的 zone,就可以指定一台為 master, 其他兩台為 slave,你只要手動更新了 master 的資料庫,那麼其他兩部 slave 的 DNS server 就會自動的更新了!問題來了, 那麼 Internet 在查詢你的這個特定的主機名稱時,會先向 master 查詢嘛?其實是這樣的:
- 無論 master 還是 slave ,其所記錄的資料應該是一模一樣
- 在 DNS 系統當中,領域名稱的查詢是『先搶先贏』的狀態,因此每一部 DNS 伺服器的角色在 Internet 上面都是一樣的。
好的,那麼 Master/Slave 資料的同步是如何進行的呢?基本上的流程是這樣的:
- DNS 伺服器,slave 透過分析來自 master 的資料庫序號 (serial number) 判斷是否需要更新,若比 slave 自己記錄的序號還要大,則更新自己的資料庫,否則就不更新。
- Master 若主動修改過資料庫,通常 DNS 系統會發出訊息告知 slave 來更新資料
- Slave 也會定期去向 master 要求資料庫,並透過上述的序號比對方式來決定是否要更新。
- DNS 最主要的目的是什麼?
- DNS 最頂層的名稱亦稱為 root,他的代表符號為何?
- 何謂 domain name, hostname 與 FQDN (可以隨便舉例說明較佳)?
- 嘗試說明什麼是正解?反解與 zone
- DNS 的資料庫記錄中,依據其資料的設定與取得方式,主要分為幾種類型 (type)?
9.2: DNS 的階層架構與查詢方向
DNS 的架構是一層一層疊起來的,你可以加入所謂的授權來取得建立 DNS 資料庫的權限。不過,基本上 DNS 的階層架構是有點像底下說明的:
- 如前所述,DNS 是有階層架構的,而最頂層的稱為 root ,以小數點 (.) 為符號表示。
- 相關的階層可以使用如下的圖示來解釋:
- 除了頂層的 root 之外,第一層 (top level domain, tld) 主要可以分為兩大類:
- 一般最上層領域名稱 (Generic TLDs, gTLD):例如 .com, .org, .gov 等等
- 國碼最上層領域名稱 (Country code TLDs, ccTLD):例如 .tw, .uk, .jp, .cn 等
- 常見的 gTLD 有底下幾大類:
名稱 代表意義 com 公司、行號、企業 org 組織、機構 edu 教育單位 gov 政府單位 net 網路、通訊 mil 軍事單位
- DNS Server 的查詢流程 (由主機名稱找到 IP 的完整程序)
為什麼你隨意指定一台 DNS 伺服器,然後將你要找的主機名稱丟給她,她就能夠幫你找到正確的 IP 呢?這是由於每個查詢大致都是從點 (.) 開始查起, 那就有點像目錄樹的根目錄的功能。然後一個一個經由『授權』的 DNS server 去往下找,就能找到每部 DNS server 自己指定的 zone 了!
- 一般來說,上層管理者,只會將『查詢權』交辦給下層管理者,這可以稱為『授權』
- 下層管理者只會記錄自己的主機名稱,只要自己設定完成,全世界立刻生效!有點像分散式系統
- 由於『授權』與類似『分散式資料庫』系統,因此任何一部 DNS 伺服器,只要能找到 root (.) 的所在, 就可以找到所有合法的 DNS 主機名稱與 IP 的對應。
- 透過上述的說明,我們可以簡單的知道 DNS 查詢的流程如下:
- 可以透過 dig +trace domainname 來查詢『授權』與『記錄』的結果
- 最頂層 (tld) 的 DNS 設定,主要分為那兩種項目?
- 最原本的 6 個 tld 主要是哪幾個?
- 請使用 dig 追蹤 www.ksu.edu.tw 的授權與設定分別在哪裡? (追蹤的英文為 trace)
- 請使用 whois (若沒裝,請自行安裝) 找出 ksu.edu.tw 的相關註冊資料
- 查詢一下, whois 的資料庫,使用的是那一個埠口?( google 查完,再到 /etc/services 查看)
9.3: DNS 伺服器正解與反解的記錄項目 (Resource Record, RR)
既然 DNS server 最重要的項目就是在記錄正解與反解,那麼正反解的資料主要又是記錄於 DNS 資料庫環境下,那麼到底這些資料記錄了哪些東西呢? 你可以使用 dig 來查詢所有的記錄資料格式,預設就是透過 A 這種記錄!無論如何,基本的記錄格式如下:
[domain] [ttl] IN [[RR type] [RR data]] [待查資料] [暫存時間(秒)] IN [[資源類型] [資源內容]]
例如查詢 www.ksu.edu.tw 這部主機的 IP 可以這樣做:
[student@localhost ~]$ dig www.ksu.edu.tw
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> www.ksu.edu.tw
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1133
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4
;; QUESTION SECTION:
;www.ksu.edu.tw. IN A
;; ANSWER SECTION:
www.ksu.edu.tw. 3600 IN A 120.114.100.101 <==其中一筆資料
;; AUTHORITY SECTION:
ksu.edu.tw. 3600 IN NS dns2.ksu.edu.tw. <==底下的也是喔!
ksu.edu.tw. 3600 IN NS dns1.ksu.edu.tw.
ksu.edu.tw. 3600 IN NS dns3.twaren.net.
;; ADDITIONAL SECTION:
dns1.ksu.edu.tw. 3600 IN A 120.114.50.1
dns2.ksu.edu.tw. 3600 IN A 120.114.150.1
dns3.twaren.net. 590 IN A 211.79.61.47
dns3.twaren.net. 590 IN AAAA 2001:e10:5c00:1::47
;; Query time: 0 msec
;; SERVER: 120.114.150.1#53(120.114.150.1)
;; WHEN: Mon Dec 4 15:04:16 2017
;; MSG SIZE rcvd: 191
當 RR type 為 A (Address) 的時候,他的 RR data 就是 IP 位址囉!接下來讓我們來看看常見的 RR 有哪些!
- 正解與反解都需要的記錄項目
正解與反解都需要的項目,大部分都是 Server 需要做的任務!包括記錄 DNS 主管理伺服器的 IP 以及相關 master/slave 更新的序號資料等等。 底下就稍微講解一下各個主要的 RR type:
- 『NS IP』: name server 的意思,亦即是管理該 domain 的伺服器 IP 位址
- 『SOA servername. admin_email. ( serial refresh retry expire ttl) 』主要是進行 master/slave
更新程序的相關資料,用在單一 DNS 設定上面沒啥重要,但是如果有 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
- PS. 不過,一般 DNS 設定時都有範例檔,直接引用範例檔的時間參數就不會出錯了!
- 以 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 呢?
由於 NS 與 SOA 都是在設定 domain 的相關事宜,因此你要帶入搜尋的資料,當然就得是要 domain (人類的姓氏,而不是名字) 的意思!
- 正解常見的記錄項目
正解就是從主機名稱找到 IP 的方向,這種正解 zone 常見的設定記錄有:
- 『A IP』:記錄該主機名稱或領域的 IP 位址
- 『AAAA IPv6』:記錄該主機名稱或領域的 IPv6 的位址
- 『MX 權重數字 hostname』:與 email 有關的設定,可以設定多部 mail gateway,權重數字越小最重要, 而 hostname 必須要有 IP 才行 (就是要有 A 的對應喔!)!
- 『CNAME hostname』:有點類似『暱稱』『別名』的意思~
- 以 dig www.ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
- 以 dig -t mx mail.ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
- 以 dig -t txt mail.ksu.edu.tw 查詢崑山科大的 DNS 伺服器設定為何
- 以 dig tw.yahoo.com 查詢該伺服器的 IP 為何?
- 反解常見的記錄項目
反解則是從 IP 去找到主機名稱。因為網路上的殭屍主機非常的多~一大堆喪屍...正規的服務為了避免被有問題的喪屍主機攻擊,因此會去反解他們的主機名稱! 如果無法對應,就表示該 IP 可能來自比較疏於管理的 ISP,就很可能被抵擋掉了!常見的反解大概只有這一個:
- 『PTR hostname』:其實反解大多也只有這個項目!就是某個 IP 對應的主機名稱而已。
- PS. PTR 就是 pointer 的縮寫!
- 以 dig 查詢到 www.ksu.edu.tw 的 IP 之後
- 再以 dig -x IP 查詢其反解資料為何?
- 反解的主機名稱主要的設定為何?其 domain name 為何呢?
- 同時觀察反解的 NS 設定為何?這相當的重要!
上面的最後一個練習相當的重要!那是因為反解的 zone 與正解的 zone 不一樣!由於西式姓名的寫法中,右邊出現的名字會比較重要,因此 DNS 的設定也是相同的, 一串主機名稱中,越右邊的名字越重要!代表的範圍越廣~不過,這與我們知道的 IPv4 的設定不同~ IP 位址的設定是如同數字,越右邊的越小~ 兩者的對應不一樣。因此反解為了要加入正解的查詢流程,所以得要將一些數值『反過來寫』,那就是反解 zone 的成因!要很注意!很注意!
9.4: 設定不含自身資料庫的 cache only DNS 伺服器
從 DNS 的查詢流程中,我們會知道查詢過的主機名稱會暫存一份到自己的快取中!如果自己沒有設定資料庫,單純拿來穿透防火牆的防線, 這時,這部 DNS 伺服器,就稱為 cache only 的伺服器囉:
- cache only 僅進行 DNS 代理查詢與將結果快取一份到自身記憶體當中的功能而已。
- cache only DNS server 也是需要知道 root (.) 的所在,因此依舊需要一個 zone 來紀錄才行!
- 最頂層 DNS 伺服器的紀錄是公開的資訊,一般 DNS 套件都會主動提供!
- forwarding DNs server
另外,有時候為了簡化 cache only DNS 的設定,連 . 都不用給,直接讓 cache only DNS server 向上一層要求即可!這就是 forwarding DNS srver:
- 透過更上層 DNS 來代理查詢,而不是自己跑去 root 查詢!
- 詳細流程有點像這樣:
- 主要是因為透過上層伺服器代理,因此,甚至完全不需要 zone 來設定 root 的所在!
- RockyLinux 的 DNS 安裝、設定、啟用與觀察
最早的 DNS 是由柏克萊大學所提出的概念,為了這個概念他們開發了一套軟體,稱為 Berkeley Internet Name Domain,簡稱為 BIND。 所以最終軟體名稱就被稱為 bind 囉!。不過這個 bind 軟體所產生的服務不是叫做 bind 喔!是被稱為 named 呢!
- DNS 伺服器軟體名稱為 bind (Berkeley Internet Name Domain, BIND)
- bind 軟體提供一個名為 named 的服務,這個服務的設定檔為 /etc/named.conf
- 因為 named 經常被攻擊,因此建議安裝 bind-chroot 將 bind 鎖在 /var/named/chroot 目錄內!
- 請安裝 bind, bind-chroot 等相關軟體,
- 並查詢 bind 所擁有的檔案檔名為何?
接下來請查詢 /etc/named.conf 這個主設定檔,分析一下該檔案內部的預設設定是否如下:
- 僅開放在 127.0.0.1 這個界面
- 僅允許本機 (127.0.0.1) 的資料查詢要求
- 針對整個 Internet 放行 DNS 代理查詢 (recursion) 的功能
- 載入了 . 的 zone
- 載入了文件上要求載入的 zone
由於預設只能讓自己找自己,這樣的 DNS 對於區網來說是沒用的~所以當然要設定一下,主要需要修改的項目,請處理如下:
- 建立一個內部的網域名稱為 mylan,內容包括自己的所有網域;
- 監聽在所有的界面上
- 允許回應所有人對本 DNS 伺服器的資料查詢要求
- 只允許 mylan 網域的 DNS 代理查詢 (recursion-allow {...})
- 保留載入 root 的 zone
- 取消其他 zone 的載入
實際設定情況有點像底下這樣:
[root@localhost ~]# vim /etc/named.conf acl mylan { 192.168.254.0/24; 10.255.0.0/16; 127.0.0.0/8; }; 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 { mylan; }; 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"; };
設定完畢之後就是啟動與觀察~啟動與觀察的詳細流程請參考底下的流程:
- 不要啟動 named 而是要啟動 named-chroot 才行!
- 啟動的埠口應該是在 port 53 才對!
- 將本機網路設定當中的 DNS server 第一部改成本機 (127.0.0.1) 之後,重新啟動網路 (nmcli, /etc/resolv.conf...)
- 啟動 named-chroot 服務 (若成功,記得也需要開機啟動!)
- 觀察 named-chroot 的登錄檔資訊,同步觀察 /var/log/messages 裡面的資料!
- 使用 mount 觀察一下系統掛載的項目為何
- 觀察 port 53 是否啟動了?
- 觀察是否放行全世界 port 53 的查詢功能 (firewall 若沒設定,請設定!)
- 用自己的 DNS 查詢 www.ksu.edu.tw 的 IP 設定為何?( hint: dig... @...)
- 承上,再次查詢 www.ksu.edu.tw ,觀察其 ttl 的變化為何?
- 讓 client 端主機也同步設定第一部 DNS 為 server 的內部 IP !(若 client 端使用的是 DHCP 服務,請在你 Server 的 DHCP 設定中, 將 DNS server IP 指向你自己的 IP 位址)
上面的練習相當重要!每次啟動 named-chroot 都需要重新觀察 messages 這個檔案才行!
9.5: DNS 正解設定
一般來說,我們如果有大量主機名稱的設定需求,就得要架設 DNS 伺服器。而架設 DNS 伺服器的第一步,就是選擇一個合法授權且沒有人用過的領域名稱 (domain)。 你不知道某個領域名稱有沒有被人註冊?那就前往 ISP 提供的網站去查詢,或自己查詢均可。在台灣,你可以選擇 hinet 的網站來查詢, 如下連結所示:
在最上方 whois 查詢項目中,選好台灣的頂層領域名,然後輸入你想要的主機名稱,按下 go 之後,螢幕就會告訴你該領域名稱有沒有被使用了。 找到沒有被使用掉的主機名稱,就能夠開始註冊了!
- 建置一個練習用的虛擬 zone 環境
因為我們是用來架設 DNS 練功用的,因此選擇的名稱可以不用符合 DNS 的現有環境。然後搭配我們原先的主機名稱設定,因此設定的 zone 為 lanXX.dic.ksu,幾個基本設定如下:
- ZONE 名稱為 lanXX.dic.ksu
- NS 為 server.lanXX.dic.ksu,且管理員 student@mail.lanXX.dic.ksu
- server.lanXX.dic.ksu: 10.255.XX.254
- client.lanXX.dic.ksu: 10.255.XX.1
- www.lanXX.dic.ksu: CNAME to server.lanXX.dic.ksu
- ftp.lanXX.dic.ksu: CNAME to server.lanXX.dic.ksu
- mail.lanXX.dic.ksu: 10.255.XX.254
- mail.lanXX.dic.ksu: MX ?? mail.lanXX.dic.ksu
- 主設定檔的 zone 參數設定
在 /etc/named.conf 裡面新增一小段設定值:
zone "lanXX.dic.ksu" IN { type master; file "named.lanXX.dic.ksu"; };
此段設定值最重要的地方就在指定類型為 master 的資料庫格式,且檔名為 named.lanXX.dic.ksu。這個檔名預設會放在 /var/named 裡面喔!
- 與主設定檔呼應的資料庫檔名設定
在 /var/named/ 新增一個檔案,檔名為 named.lanXX.dic.ksu,檔案內容有點像這樣:
$TTL 1D @ IN SOA server.lanXX.dic.ksu. student.mail.lanXX.dic.ksu. ( 2016112601 1D 1H 1W 3H ) @ IN NS server.lanXX.dic.ksu. server.lanXX.dic.ksu. IN A 10.255.XX.254 client.lanXX.dic.ksu. IN A 10.255.XX.1 www.lanXX.dic.ksu. IN CNAME server.lanXX.dic.ksu. ftp.lanXX.dic.ksu. IN CNAME server.lanXX.dic.ksu. mail.lanXX.dic.ksu. IN A 10.255.XX.254 mail.lanXX.dic.ksu. IN MX 5 mail.lanXX.dic.ksu.
仔細看,當你主機名稱設定具有 FQDN 的全名時,一定要在最後面加上小數點,這代表就是全名,否則就會被視為是一般主機名稱,需要再加上 zone name 才會變成 FQDN 的喔!這個小數點經常會被忘記,故請特別小心在意!
重新啟動 named-chroot 之後,務必要查看 named-chroot 的 status 以及 /var/log/messages 的內容! 務必要看到所啟動的 zone 與該 zone 的 serial 是正確的才行! 接下來就是測試了!請使用 dig 測試自己的設定是否正確!每一個紀錄項目都需要查詢!
- 完成所有正解 A 的 dig 結果
- 完成正解 NS 的 dig 結果
- 完成正解 SOA 的 dig 結果
- 完成正解 MX 的 dig 結果
9.6: DNS 反解設定
反解的 zone 名稱與正解不太一樣~請搭配你的 IPv4 區網來建立好你的 zone 資料。一般來說,你可能會有如下的先期設定規劃:
- ZONE 名稱為 XX.255.10.in-addr.arpa
- NS 為 server.lanXX.dic.ksu,且管理員 student@mail.lanXX.dic.ksu
- server.lanXX.dic.ksu: 10.255.XX.254
- client.lanXX.dic.ksu: 10.255.XX.1
- 主設定檔的 zone 參數設定
在 /etc/named.conf 裡面新增一小段設定值:
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.lan100.dic.ksu. student.mail.lan100.dic.ksu. ( 2016112801 1D 1H 1W 3H ) @ IN NS server.lan100.dic.ksu. 254 IN PTR server.lan100.dic.ksu.
重新啟動 named-chroot 之後,務必要查看 named-chroot 的 status 以及 /var/log/messages 的內容! 務必要看到所啟動的 zone 與該 zone 的 serial 是正確的才行! 接下來就是測試了!請使用 dig 測試自己的設定是否正確!每一個紀錄項目都需要查詢!
- 完成反解 NS 的 dig 結果
- 完成反解 SOA 的 dig 結果
- 完成反解 PTR 的 dig 結果
9.7: Master/Slave 的設定
一般來說,一部 DNS 伺服器建立完畢後,除非是內部測試用的環境,否則,具有正解/反解 zone 的 DNS 系統,通常建議至少有兩部 DNS 伺服器提供服務, 可以避免由於伺服器暫時無法提供服務,而導致的困擾。另外,無論 master/slave 模式,這兩部伺服器在網際網路上的角色都一樣! 所謂的 Master / Slave 只是資料庫檔案建立的方式不同而已,這裡要特別再次強調。
由於我們的環境只有同學們自己的 VLAN 而已,因此,以自己的環境建立 master / slave 來架設 DNS 也是可以的。 底下我們將讓自己的 zone 提供給 client 作為另一個 DNS server 來提供服務喔。
- Master DNS Server 的設定:
Master 的 DNS server 設定,我們之前已經設定妥當了,不過,這裡還是需要修訂!原因是,多了一部 DNS 系統來提供協助嘛! 因此當然需要這個設定值。此外,我們也需要開放 slave DNS 來要求資料才行!先來設計讓 slave DNS 可以到本系統要求資料庫的設計:
acl myslave { 10.255.200.0/24; }; zone "lan200.dic.ksu" IN { type master; file "named.lan200.dic.ksu"; allow-transfer { myslave; }; }; zone "200.255.10.in-addr.arpa" { type master; file "named.10.255.200"; allow-transfer { myslave; }; };
接下來到 /var/named 裡面去修改正解檔案,其實只有增加 NS 與相關的設定而已,有點像底下這樣:
$TTL 1D @ IN SOA server.lan200.dic.ksu. student.mail.lan200.dic.kus. ( 2016112602 1D 1H 1W 3H ) @ IN NS server.lan200.dic.ksu. @ IN NS client.lan200.dic.ksu. server.lan200.dic.ksu. IN A 10.255.200.254 client.lan200.dic.ksu. IN A 10.255.200.1 ....
同樣修改反解設定,內容有點像這樣:
$TTL 1D @ IN SOA server.lan200.dic.ksu. student.mail.lan200.dic.ksu. ( 2016112802 1D 1H 1W 3H ) @ IN NS server.lan200.dic.ksu. @ IN NS client.lan200.dic.ksu. 254 IN PTR server.lan200.dic.ksu. 1 IN PTR client.lan200.dic.ksu.
之後重新啟動 named-chroot,若有問題請依據問題一項一項解決,然後再測試每個設定項目的結果。其實最重要的只有 NS 這個項目, 可以這樣檢查:
[root@localhost ~]# dig server.lan200.dic.ksu .... ;; QUESTION SECTION: ;server.lan200.dic.ksu. IN A ;; ANSWER SECTION: server.lan200.dic.ksu. 86400 IN A 10.255.200.254 ;; AUTHORITY SECTION: lan200.dic.ksu. 86400 IN NS server.lan200.dic.ksu. lan200.dic.ksu. 86400 IN NS client.lan200.dic.ksu. ;; ADDITIONAL SECTION: client.lan200.dic.ksu. 86400 IN A 10.255.200.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: 日 12月 13 23:22:06 CST 2020 ;; MSG SIZE rcvd: 145
你會發現多了一個 NS 的設定喔!如果無法順利輸出 NS 的話,那麼也可以強制查詢 NS 紀錄即可:
[root@localhost ~]# dig -t ns lan200.dic.ksu
- Slave DNS Server 的設定:
現在,來到你的 client 端,亦即是第二個 DNS 伺服器,依據同樣的方式安裝、設定好你的 DNS 伺服器, 讓它準備提供正常的服務!
[root@localhost ~]# yum install bind-chroot [root@localhost ~]# vim /etc/named.conf acl mylan { 192.168.254.0/24; 10.255.0.0/16; 127.0.0.0/8; }; ... listen-on port 53 { any; }; allow-query { any; }; allow-recursion { mylan; }; ... [root@localhost ~]# systemctl start named-chroot [root@localhost ~]# systemctl enable named-chroot [root@localhost ~]# ll -d /var/named/slaves/ drwxrwx---. 2 named named 6 8月 25 01:31 /var/named/slaves/
觀察一下, /var/named/slaves 這個預設的目錄確實可以讓 named 用戶寫入的!所以,現在從 master 處, 準備下載正確的檔案吧!先在 /etc/named.conf 裡面增加兩個新的 zone,分別是這樣的:
zone "lan200.dic.ksu" IN { type slave; file "slaves/named.lan200.dic.ksu"; masters { 10.255.200.254; }; }; zone "200.255.10.in-addr.arpa" { type slave; file "slaves/named.10.255.200"; masters { 10.255.200.254; }; };
然後重新啟動 named-chroot 之後,再測試一下有沒有成功的將檔案新增到該目錄下即可。當然啦,Master 的 firewall 請自行處理囉!
9.8: 課後練習
- (60%)實作題:啟動 Server 作業硬碟 - unit09
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- 建立 ens3 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.18.255.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 使用 teamd 的機制建立內部區域網路的備援功能:
- team 的界面使用 team0 卡號,且連線名稱請命名為 team0
- team 使用 activebackup 備援功能,不要使用 loadbalance
- team 的實體網卡 (team slave) 請使用 ens7 及 ens8 ,且其連線名稱名稱亦請命名為 ens7, ens8
- team0 網路參數為: 172.19.*.254/24,不需要 gateway
- 主機名稱指定為: server*.example.dic
- 最終你的主機名稱與 IP 的對應為:
server*.example.dic 172.18.255.* 別名為 server* server254.example.dic 172.18.255.254 別名為 server254 server.lan*.example.dic 172.19.*.254 別名為 server client.lan*.example.dic 172.19.*.1 別名為 client
- 建立 ens3 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- 基本的伺服器作業系統設定行為:
- 依據底下的說明,選擇距離我們最近的成大網站來作為 yum server 的來源:
成大 ccns 網站: https://mirror.ccns.ncku.edu.tw/howto/#rocky-linux
請記得修改過設定檔,應該要將清單清除 (yum clean all) 較佳。 - 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, bind-utils, kernel
- 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
- 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
- 依據底下的說明,選擇距離我們最近的成大網站來作為 yum server 的來源:
- 實際設定好本機防火牆
- 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
- 將預設的規則轉存到 /root/firewall.sh 這個檔案內
- 修改上述 firewall.sh 腳本,讓內容有點像底下這樣:
- 首先將全部的規則刪除 (應該有三條指令)
- 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
- 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
- 放行你自己的內部區域網路那個網域的連線要求 (針對 LAN 的信任設定)
- 讓 ssh 只對外部的區網放行,不會對 Internet 放行 (對 ssh 連線做限制較佳)
- 讓 http 針對整個 Internet 放行 (一般公開的服務設計)
- 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
- 重新啟動 iptables 服務,然後觀察規則是否正確
- 實際設定好 Server 的路由功能
- 讓核心支援 IP 轉遞的功能,並且每次重新開機都可以自動生效
- 修改 /root/firewall.sh ,在該檔案加入清除 nat 表格的規則與自訂鏈的設定
- 增加規則:讓來自內部網路的封包,在路由判斷後,並預計由 ens3 對外網卡出去的封包,全部偽裝成為 ens3 的 IP 位址 (一般在數據機上面的就是 public IP)
- 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
- 上述功能在開機後依舊能夠順利啟動
- 建立一個 DNS 服務
- 請使用 named-chroot 服務,不要使用 named 服務。
- 關於 DNS 的整體設定方面,底下的設定請修改掉:
- DNS 需要針對所有的界面監聽服務
- DNS 服務必須要放行給全世界來查詢 (allow-query)
- DNS 僅有你的兩段區網與 127.0.0.0/8 才可以代詢 (allow-recursion)
- 設定一個正解 zone 為 lan*.example.dic,相關設定須有底下的記錄:
- 這個 zone 允許 172.19.*.0/24 的來源進行更新
- TTL 需要設定為 600 秒
- SOA 的設定中, 伺服器名為 server.lan*.example.dic, email 需為 student@server.lan*.example.dic,序號需為當日的日期相關, 其他請自由設定
- NS 需要設定使用 server.lan*.example.dic 與 client.lan*.example.dic 這兩部主機
- server.lan*.example.dic 的 A 為 172.19.*.254
- client.lan*.example.dic 的 A 為 172.19.*.1
- pc2.lan*.example.dic 的 A 為 172.19.*.2
- pc3.lan*.example.dic 的 A 為 172.19.*.3
- pc4.lan*.example.dic 的 A 為 172.19.*.4
- www.lan*.example.dic, ftp.lan*.example.dic, web.lan*.example.dic 都使用 CNAME 對應到 server.lan*.example.dic
- 針對 172.19.*.0/24 的網域設定一個反解的 zone,相關設定須有底下的記錄:
- 這個 zone 允許 172.19.*.0/24 的來源進行更新
- TTL, SOA, NS 均沿用與上述正解相同的設定
- 172.19.*.254 對應到 server.lan*.example.dic
- 172.19.*.1 對應到 client.lan*.example.dic
- 172.19.*.2 對應到 pc2.lan*.example.dic
- 172.19.*.3 對應到 pc3.lan*.example.dic
- 172.19.*.4 對應到 pc4.lan*.example.dic
- 防火牆需要放行所有的人都能使用你的 DNS
- 讓你這部 Server 可以使用自己的 IP 作為 DNS 服務的來源設定 (nmcli...)。
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- (30%)實作題:啟動 client 作業硬碟
- 網路參數的設定,請依據底下的方式來設定好:
- 建立 ens3 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.19.*.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 主機名稱指定為: client.lan*.example.dic
- 最終你的主機名稱與 IP 的對應為:
server*.example.dic 172.18.255.* 別名為 server* server254.example.dic 172.18.255.254 別名為 server254 server.lan*.example.dic 172.19.*.254 別名為 server client.lan*.example.dic 172.19.*.1 別名為 client
- 建立 ens3 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- 實際設定好本機防火牆
- 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
- 請將預設的領域 (zone) 改為 work 領域,且 ens3 為其管理之界面網卡
- 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
- 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
- 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
- 架設一個 slave DNS 伺服器
- 請使用 named-chroot 服務,不要使用 named 服務。
- 關於 DNS 的整體設定方面,底下的設定請修改掉:
- DNS 需要針對所有的界面監聽服務
- DNS 服務必須要放行給全世界來查詢 (allow-query)
- DNS 僅有你的兩段區網與 127.0.0.0/8 才可以代詢 (allow-recursion)
- 設定一個正解 zone 為 lan*.exmpale.dic,相關設定為:
- 其 master DNS 來源請設定為 172.19.*.254
- 針對 172.19.*.0/24 的網域設定一個反解的 zone,相關設定為:
- 其 master DNS 來源請設定為 172.19.*.254
- 防火牆需要放行所有的人都能使用你的 DNS
- 讓你這部 Server 可以使用自己的 IP 作為 DNS 服務的來源設定 (nmcli...)。
- 網路參數的設定,請依據底下的方式來設定好:
- (10%)簡易問答題:
從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
- 以崑山科大的 www.dic.ksu.edu.tw 為例,說明何為 hostname, domain name 與 FQDN?
- 嘗試說明什麼是正解?反解與 DNS 的 zone
- DNS 的資料庫記錄中,依據其資料的設定與取得方式,主要分為幾種類型 (type)?
- 在 DNS 資料查詢中,主要的查詢會是向 master DNs 還是 slave DNS 做要求?
- 最原本的 6 個 gTLD 主要是哪幾個?每個 gTLD 最早是給什麼單位使用的?
- 上傳成績
- 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
- 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
- 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
- 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
- Please use links http://172.18.255.250/upload/unit09 to check your filename
- 2022/11/18:將整體資料在 RockyLinux 9 上實作,變化不大!對題目的解釋稍微更新。