︿
Top

1、前言

本篇筆記為記錄有關於 DNS 進階設定、安全性設定、檢測 DNS 等相關資訊,以下整理的重點說明為引用 TWNIC 網路安全教育訓練課程內容





文章目錄

1、前言
2、DNS 基礎
3、DNS 伺服器說明
4、正 / 反向解析之意義與原理
5、DNS 設定檔說明 (named.conf)
6、Zone File 說明
7、TWNIC DNS 教育訓練文件
8、DNS 系統記錄解讀
9、酷!學園討論區 - DNS 二十問





2、DNS 基礎

DNS 規範 RFC 1034RFC 1035,有關 DNS 也可參考站內文章 DNS 伺服器的原理與運作流程





3、DNS 伺服器說明

FQDN (Fully Qualified Domain Name): 指網際網路上伺服器名稱的完全表示方式,俗稱 Domain Name。
  • 每個名稱間以點 (.) 隔開 (ex. www.abc.com.tw.)
  • 每個 FQDN 就像 IP Address 一樣具有 唯一
  • FQDN 最多只能支援到 127 層 (ex. abc.com.tw >> 3 層)
  • 每個分支最長支援 63 字元(a-z,0-9,-)
  • 總長 255 字元

名稱伺服器類型: 可分為權威主機 (Authoritative) 或快取主機 (Cache-Only)。
  • 權威主機 (Authoritative):能 管理回應 其負責網域名稱之權威回答 (Authoritative Answer) 稱之
  • Master 主機所管理的 DNS 資料是從 檔案 (Zone File) 來的
  • Slave 主機所管理的 DNS 資料是從 轄區傳送 (Zone Transfer) 來的
  • 快取主機 (Cache-Only) 負責 查詢回應 並將結果快取下來以備使用 (ex. 台灣最大快取主機 168.95.1.1)

權威主機 (Authoritative)運作原理
  1. 當 DNS 用戶端 (DNS Client) 端詢問到權威主機 (DNS Server) 所管理的網域名稱時,此時會直接回應給 DNS 用戶端 (此一回應動作稱為 權威回答(Authoritative Answer))
  2. 當 DNS 用戶端 (DNS Client) 端詢問到 非 權威主機 (DNS Server) 所管理的網域名稱時,會檢查自身的 DNS Cache 看是不是有相關的資料,若 DNS Cache 有的話你會看到回應是 非權威回答(Non-Authoritative Answer)
  3. 若在 DNS Cache 內也沒發現資料,則會向 Root 伺服器查詢 (.) 然後 Root 伺服器會回應管理該域名的授權伺服器 (.tw.)
  4. 本地伺服器會向其中一台授權伺服器查詢,並將這些伺服器名單存到記憶體中,以備使用 (減少再向 Root 伺服器查詢)
  5. 遠方伺服器回應查詢
  6. 本地伺服器回應查詢結果給 DNS 用戶端 (DNS Client),同時會將結果儲存一份在自已的快取內以便使用 (減少再向遠方伺服器查詢)

Master / Slave: 主要與次要 DNS 伺服器
  • DNS 在實際運作上並沒有 主 / 次 要 DNS 伺服器之分,也就是說並非都先訪問主要 DNS 伺服器
  • 因此若 Master DNS 掛點,則 Client 端僅有 50% 能正確解析到 Domain Name
  • 若 Master DNS 掛點超過所設定的 SOA Expiry 時間後仍未活起來則 Slave DNS 會因為超過最大 Retry Master Dns 時間而停止 Zone 解析
  • 注意 DNS Slave 主機記得禁止 Zone Transfer (allow-transfer {none;};)
  • Master DNS 記得改資料時一定要更改 Serial 值否則 Slave DNS 將不會同步新的記錄
  • 可於設定檔內加注 notify 能改善 Master / Slave 同步問題 (Bind 8.3、bind 9.x 中預設即啟動)





4、正 / 反向解析之意義與原理

正 向解析 (Forward Domain): 機器名稱 (Hostname) 對應 IP Address (ex. dns.hinet.net -> 168.95.1.1)
反 向解析 (Reverse Domain): IP Address 對應網域名稱 (ex. 61.219.38.89 > www.hinet.net)
  • 事實上在網際網路的 DNS 運作上反向解析的 DNS Query 遠比正解高出許多 (約 60% 為反向解析其次 40% 才為正向解析)
  • 因為至少要擁有一個 C Class 才能作反向解析,所以一般我們申請的 ADSL 或專線都要請 ISP 幫我們作反向解析的動作
  • 目前有使用正反解對應來減少 SPAM 的機制足可見 DNS 反向解析設定之重要性





5、DNS 設定檔說明 (named.conf)

此設定檔為 BIND 環境主要設定檔,大致分為五個部份作說明

Options: 定義 named 功能選項
  • directory: 指定 zone file 檔案存放路徑
  • pid-file: 指定 DNS 服務啟動時行程代號 (PID) 路徑
  • allow-transfer: 指定哪些 IP Adress 可與此部 DNS 做轄區傳送 (Zone Transfer,簡稱 AXFR) 請注意預設為全開狀態 (即允許任何 IP Address Zone Transfer 所管理的 Zone)
  • options 下的 allow-transfer: 定義此部 DNS 允許哪些 IP Address 可與此部 DNS 做 AXFR (套用到管理的所有 Zone 下)
  • zone 下的 allow-transfer: 定義此 Zone 允許哪些 IP Address 可與此部 DNS 做 AXFR
  • 若 options 與 zone 皆定義 allow-transfer? 則允許 IP Address 為二者定義 IP Address 皆可傳送

Forwarders: 定義 Forwarders Server 位置,當此部 DNS 主機遇到非本機負責 Zone 之查詢請求的時候,不會直接去向 Root Server 查詢 Zone 而把請求轉交給指定的 Forwarders (一台或多台) 主機代為查詢 (另外一種 DNS 機制來減低網路流量) 例如指向國內最大 DNS Cache 主機 168.95.192.1、168.95.1.1

Zone ".": 定義 Root Server 位置
  • 所有 DNS 伺服器必須要知道 Root Server 位置(因為是 DNS 查詢的起源)
  • 一台 DNS 僅能有一個 hint type
  • Root Server 列表檔案就是 named.root 檔案的內容

Zone "xxx.com.tw": 定義正解網域 (Forward Domain)
  • type: 指定為 master / slave DNS 伺服器
  • file: 指定 zone file 存放路徑 (未指定就套用 directory 所指定的路徑)
  • allow-transfer: 指定哪些 IP Address 可與此 Zone 做轄區傳送 (Zone Transfer,簡稱 AXFR)

Zone "59.60.61.in-addr.arps": 定義反解網域 (Reverse Domain)
  • type: 指定為 master / slave DNS 伺服器(你要有一個 C Class 才有意義)
  • in-addr: 為 Internet Address 縮寫用於 IPv4 反解,若是 IPv6 則為 ip6
  • apra: 為反解起源之 TLD

設定檔注意事項及常犯錯誤
  • options 此 s 別忘了加上
  • 定義的功能選項前後要用 { } 括起來
  • 指定的檔案或路徑前後要加 "" 號
  • 每一個描述的結尾要加 ; 號
  • 加入的 IP 後結尾要加 ; 號
  • pid-file 指定的路徑要注意權限問題
  • Zone Transfer 記得要設定否則將允許任何 IP 轄區傳送你管理的 Domain Zone File
  • 若想當 Cache-Only 主機如何設定? 只要將 正、反解 設定拿掉即可 (即保留 options/root/localhost)





6、Zone File 說明

設定完 named.conf 後會指定該 Zone 的 Zone File 而此內容為許多的 資源記錄(RR,Resource Record) 組合而成,內容大致為 SOA、NS、A、AAAA、PTR、CNAME、MX,一筆資源記錄包含五個值 (fqdn,ttl,class,type,rdata) 下列為舉例一筆 A RR。
  • FQDN: Domain Name
  • TTL: 快取時間 (TTL,Time To Live),最多可設為 2 的 31 次方秒 (2147483648 秒約 68 年)
  • Class: 網路類別 (IN,Internet),Bind 8 一定要寫 IN,若為 Bind 9 可不寫,若 Master 為 Bind 9 不寫 IN 而 Slave 為 Bind 8?同步時 Bind 8 會自動將 IN 加上
  • Type: 資料類型此例為 A RR
  • Rdata: 答案,也就是對應的 IP
 www.abc.com.tw   3600    IN        A       61.60.59.58
 (FQDN)           (TTL)  (Class)   (Type)    (Rdata)


SOA (Start Of Authority): 用於本機主機代表為權威主機,並描述此 Zone 資料及提供 DNS Slave 資料
  • serial: zone file 版本(不可大於 2 的 31 次方)
  • refresh: DNS Slave 進行 Zone Transfer 時間 (會先檢查 Serial 值才決定是否進行 Zone Transfer)
  • retry: 若 DNS Slave 進行 Zone Transfer 失敗時會在指定時間重試
  • expire: 若重試 Zone Transfer 超過時間仍為成功則停止重試
  • Min TTL/Negative Cache: 依 Bind 8 或 Bind 9 意義不同
  • Minimum TTL: Bind 8 使用代表將此 TTL 套用給下面每一筆 RR TTL 值
  • Negative Cache: Bind 9 使用代表無效快取時間,即在指定時間內若有 DNS 查尋為無效記錄時則 Cache 住,當在指定 Cache 時間內再有相同的 DNS 查尋,則直接回答為無效 DNS 記錄

NS,Name Server: 用於 DNS 的搜尋與 A,Address 搭配使用
  • 每個 Zone File 皆需要有 NS RR 一般放於 SOA 之後
  • 在 Twnic 設定解析該 Domain 為 DNS 模式時,此時 Zone File 內的 NS RR 要與 Twnic 設定一致 (上下層 NS 記錄要一致)
  • NS RR 的 Rdata 記錄需為 FQDN 記錄 (不可使用 IP、CNAME) 此為 RFC 規範
  • NS 記錄的取用順序是 隨機 決定的而不是照順序從第一筆至最後一筆
  • NS 記錄所指定的 IP Address 不可為 Private/Loopbak/Multi-Cast IP Address

A,Address: 將 DNS 網域名稱對應到 IPv4 的 32 位元位址

AAAA,Name Server: 將 DNS 網域名稱對應到 IPv6 的 128 位元位址

PTR,Pointer: 定義某個 IP Address 對應的 Domain Name,即將 IP 位址轉換成主機的 FQDN (反向解析)
  • 欲進行 DNS 反解先決條件必須管理 1 Class C 才能自已進行反解設定,否則是無效的
  • 向所屬 ISP 進行反解申請 (因為大都沒有管理 1 Class C)是 必須的 (有必要嗎?)
  • DNS Query 正向解析約佔 40% ,反向解析佔 60% (可見反向解析之重要)

CNAME,Canonical Name: 為同一部主機設定許多別名與 A Address 搭配使用
  • 建議使用 A 記錄來取代 CNAME
  • 設定不良將造成 NS、MX 出現問題
  • CNAME Chain (即 A CNAME B、B CNAME C、C CNAME D...) 雖然沒有禁止,但會導致效率變差甚至錯誤

MX,Mail eXchanger: 設定區域中擔任郵件伺服器的主機,所有要送往那部機器的 Mail 都要經過 Mail Exchanger 轉送。而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權

*可使用 A RR 來代替 MX 使用 (ex. @ IN A 61.60.59.58) 但如此僅能使用一部機器來當 Mail Server





7、TWNIC DNS 教育訓練文件

TWNIC 93 年度 DNS 安全研討會


TWNIC 94 年度 DNS 教育訓練課程


DNS 設定檢測


DNS 安全






8、DNS 系統記錄解讀

以下說明為引用 TWNIC 網路安全教育訓練課程內容

Q1. ns_forw: query(mail.vinwell.com.tw.vinwell.com.tw) All possible A RR's lame

 說明這個網域名稱可能有 Lame Server 狀況,也有可能是查詢人之 Resolver 之default-domain 之功能所引起的

Q2. /etc/named.conf:53: syntax error near '}'

 語法錯誤,通常是少了 ; 號或忘了 {} 號,可使用 named-checkconf 檢查看看

Q3. unrelated additional info 'Manager.aluba.com.tw' type A from 203.149.224.202.53

 說明從 203.149.224.202 送來了和他無關的資料,通常發生的原因可能是該部 DNS 的一些域名設定有誤,但也有可能是 DNS 欺騙的一種狀況

Q4. bad referral (in-addr.arpa !<88.216.1.in-addr.arpa) from 168.95.192.14.53

 Bad Referral 狀況,可以從訊息中看到 168.95.192.14 (HINET)的反解設為”in-addr.arpa.”,可能原因是其 IP 太多,故如此偷懶,這樣的設定會造成此人往後的一段時間內($TTL) 查詢任何反解資料時都會到此 IP 查

Q5. ns_forw:query(BBS\.NNUT\.EDU\.TW\000.nhu.edu.tw) forwarding loop (dns.nhu.edu.tw:203.72.0.3) learnt (A=140.111.1.2:NS=140.111.1.2)

 查詢 bbs.nnut.edu.tw. 時發現有迴圈狀況,通常是 CNAME 所造成的,同時並記住管理nhu.edu.tw. 的上層主機為 140.111.1.2 (也就是這一次是使用這一部)

Q6. Response from unexpected source (168.95.1.24.53) for query "_ldap._tcp.tmt.gtmt.com.tw IN SOA"

 查詢 _ldap 主機時,意外的從 168 的主機回應答案,其主要原因是 HINET 使用 Layer4 Switch,故回應的 IP 可能不固定所致,但亦有可能是 DNS Spoofing

Q7. Cleaned cache of 1083 Rrsets

 這是 named 清楚 Cache 的 log,表示有 1083 筆 TTL 時間到了

Q8. rcvd NOTIFY(tw, IN, SOA) from 140.111.1.2.45599

 從 140.111.1.2 將到一個轄區變更的通知 (notify)

Q9. Sent NOTIFY for "tw IN SOA 2001021959" (tw);4 NS, 4 A

 同上,但是送出,可見送出時所帶參數,2001  為序號

Q10. sysquery: findns error (SERVFAIL) on pc071.twnic.net.tw?

 這一部 DNS 發生錯誤造成 伺服器失敗,通常的原因是 SOA,NS 或是 Zone file 載入時有錯所造成

Q11. sysquery: query(mail.digi-age.com.tw) NS points to CNAME (lnx5.net-chinese.com.tw:) learnt (CNAME=168.95.192.3:NS=140.111.1.2)

 查詢 mail.digi 時,發現它的 NS RR 接的是一個 CNAME RR,這樣的 NS 是不被承認的

Q12. db_load could not open: /var/named/hosts:No such file or directory

 zone 的設定中指定的 file 位置找不到檔案

Q13. send AXFR query 0 to 168.95.192.9

 這部機器向 168.95.192.9 作一 AXFR 請求,這個請求送的序號為 0 (這是因為手動使用 named-xfer 所產生的訊息)

Q14. slave zone "tw" (IN) loaded (serial 2001021959)

 這部機器完成了”tw” 的 AXFR 請求,並將其載入

Q15. check_hints: no A records for E.ROOT-SERVERS.TW class 1 in hints

 找不到 Root Server 中 E.ROOT 之 Class,也就是 named.ca 中沒有設定 IN

Q16. stream_getlen(140.126.102.30.42873): Connection timed out

 和 140.126.102.30 的連線逾時

Q17. denied update from 140.112.15.188.3633 for "."

 拒絶來自 140.112.15.188 要求動態更新 . 的位置

Q18. xn--abc.tw has multiple CNAMES

 這個名稱 CNAME 多次到不同的名稱(系統預設是 no,若真的要用需 multiple-cname yes )

Q19. Zone "" (file named.ca): No default TTL ($TTL<value>) set, using SOA minimum instead

 named.ca 沒有定TTL 值,使用 SOA 中的 TTL 代替

Q20. a.dns.tw IN A differing ttls: correct

 a.dns.tw 的 TTL 值與上層設定不同,調整之,BIND9 才會有,以下層資料為準

Q21.  /var/named/abel.hosts.utf8: WARNING SOA refresh value is less than 2 * retry (2 < 1209600 * 2)

 SOA 中的 refresh 的值小於 retry 值的二倍,建議您可達十倍左右

Q22. sysquery: findns error (NXDOMAIN) on ipopc-16.ipoware.ocm.tw?

 找不到 這個網域名稱 (NXDOMAIN)

Q23. Malformed response from 203.70.159.194.53 (out of data in final pass)

 DNS 回應的封包格式不對

Q24. deleting interface 211.72.211.71.53

 這個網路介面 shutdown 了(bind 預設每小時會檢查 interface 狀況)

Q25. There may be a name server already running on 211.72.211.1.53

 named 巳經在執行中了

Q26. invalid RR type 'NS' in additional section (name = 'auth.com') from 194.74.63.90.53

 194 的回答中,additional section 資訊中的 NS 資料不對,可能有設錯的狀況或 Spoofing

Q27. log_open_stream: open(/var/log/named/dns-statistics.log) failed: Permission denied

 開啟系統記錄檔時,權限不足,需注意 named run-time 時的 uid 和檔案(目錄)權限是否相符

Q28. cannot set resource limit on this system

 無法設定這台機器的系統設定,如最大檔案開啟數,最大行程數...主因通常是權限不足

Q29. db.movie:16: data "hp.com" outside zone "com.tw" (ignored)

 hp.com 這個名稱不屬於 com.tw 這個 zone 之下

Q30.  zone “tw” (class 1) SOA serial# (1) rcvd from 211.72.210.250 is < ours (2001062901)

 轄區傳送 ”tw”時發現 211.72.210.250 的序號小於現在的序號, 這會造成不傳的狀況. 每次更改 zone file 時要記得同時至少為 serial 加上 1, 這是一個基本的原則

Q31. Err/TO getting serial# for "edu.tw" secondary zone "edu.tw" expired

slave 無法取得轄區資料,當到達 SOA 的 expire 值時則會產生第二行的訊息內容, 表示 edu.tw 轄區資料巳經過期, 當再遇到有人來查 twnic.edu.tw 時則會產生 SERVFAIL 的系統訊息.會造成這樣的訊息可能的原因可能為:
 1.master 與 slave 間的網路連線有問題
 2.slave 主機所指定的 master ip 有誤
 3.master 沒有開 allow-transfer 或其 zone file 中的語法有誤

Q32. can't change directory to /var/named: No such file or directory

 找不到 /var/named 這個目錄.這通常是因 options 中 directory 所指定的路徑不存在或打錯字

Q33. master zone "movie.edu" (IN) rejected due to errors (serial 1997010600)

 Zone file 中語法或格式錯誤造成整個 Zone 不用 (BIND8 訊息, BIND9 仍可用,但可能出現 SERVFAIL 狀況)

Q34. socket(SOCK_RAW): Too many open files

 系統開啟的檔案數過多,造成 named 無法再開啟檔案或 socket

Q35. gethostby*.getanswer: asked for "37.103.74.204.in-addr.arpa IN PTR" , got type "CNAME" gethostby*.getanswer: asked for "37.103.74.204.in-addr.arpa", got "37.32/27.103.74.204.in-addr.arpa"

 找 204.74.103.37 的反解時,發現其指到一 CNAME,通常這種狀況較少見,是小於一個 Class C 中常用反解的指定方法,所以其要再問 37.32/27.103.74.204.in-addr.arpa 的結果

Q36. ns_udp checksums NOT turned on: exiting

 OS 中的 udp checksum 功能未打開,DNS 無法運作

Q37. can't fdopen tmpfile (sec_qip/db.135.156.HfeOrP)

 DNS 在做轄區傳送時會在 directory 所指令的目錄下產生一個 temp file,若此時權限不對,即會出現此類訊息

Q38. couldn't create pid file

 無法建立 PID file (process id),權限問題

Q39. setsockopt(REUSEADDR): Operation not supported on socket

 作業系統不支援 setsockopt 中某些參數(REUSEADDR)

Q40. CNAME and other data (invalid)

 一個巳是 CNAME rr 的記錄不能再用於其他記錄

Q41. $GENERATE unknown type: $i.3.2.1.dyn.tw

 GENERATE 的語法錯誤,type 不對或是忘了加了

Q42. host name "t_terrall.dev.oclc.org" (owner "51.240.174.132.in-addr.arpa") IN (primary) is invalid - proceeding anyway

 FQDN 名稱不合法,不能有底線(A-Za-z0-9,-)

Q43. no SOA found for fs.dedip.oclc.org, SOA query got rcode 3, aa 1, ancount 0, aucount 1

 雖是權威主機(aa=1)查無 SOA 記錄 (rcode 3 = NXDOMAIN, an=ANSWER , au=AUTHORITY

Q44. NOTIMP

 未實作 (Not Implemented )

Q45. NSTATS 942153823 941779425 A=86974 NS=2 CNAME=59 SOA=6 MG=5 PTR=17610 HINFO=141 MX=5631 TXT=6 AAAA=138 LOC=2 MAILB=5 ANY=2066

 BIND 8 特有,說明從何時至何時(UTC time) A 記錄查詢了 86974 次…

Q46. ns_resp: query(242.240.112.207.in-addr.arpa) A RR negative cache entry (NS0.NAP.NET:)

 因為負面答案快取,巳知其不存在

Q47. ns_resp: query(200.229.99.195.in-addr.arpa) Bogus LOOPBACK A RR (localhost.geosrv.com:127.0.0.1)

 查詢 NS 記錄時,指向了 127.0.0.1,這個 IP 是有問題的 (Bogus)

Q48. ns_resp: query(www.abc.com) Glue A RR missing (ns1.def.com:)

 www.abc.com 沒有對應的 A 記錄(外部的域名)

Q49. ns_resp: query(155.128/26.218.32.216.in-addr.arpa) No possible A RRs

 沒有對應的 A 記錄(自己的域名)

Q50. ns_resp: TCP truncated: "167.133.200.192.in-addr.arpa" IN PTR from 192.200.128.254.53

 DNS 回應封包太大,改用 tcp 方式查詢 (超過 512 要 truncate 或使用 edns)

Q51. "rr.com IN MX" points to a CNAME (mail.rr.com)

 MX/CNAME 不能混用

Q52. sysquery: query(ring.kotel.co.kr) NS points to CNAME (daiduk.kaist.ac.kr:)

 NS/CNAME 不能混用

Q53. 206.153.116.21.13172 transfer refused from 206.153.116.8, zone psk.net

 拒絕  206.153.116.8 對 .21 要求 zone transfer (psk.net) 的請求 (allow-transfer 沒有它)

Q54. unapproved AXFR from 132.174.19.16.36285 for "riptor.com"

 同上意,不同的版本字面稍有不同,’unapproved’ 有的版本會改稱 ‘deny’, 而 AXFR 因情況不同,可能是查詢(query),遞迴(recursive),或更新(update)等





9、酷!學園討論區 - DNS 二十問

文章標籤: