DNS 偶而查詢不到?

Saturday, December 17th, 2005

之前在DNS 自我監控寫了script定時查詢特定FQDN,後來因為想起有人抱怨偶而就會有某個FQDN連不到,就改了一下改成向多個DNS Server查詢一個特定的FQDN,這才發現一些徵兆,除了一兩次是要查詢的FQDN負責的DNS Server查不到,所以自然會有問題的情況以外,有時向Hinet的DNS 168.95.1.1查詢竟然也會查詢不到?!雖然不確定是網路還是168.95.1.1或是其他的問題,但又想起上次參加TWNIC DNS教育課程的時候,講師也說設 forwarders 不見得會比較快,於是乾脆就把 forwarders 拿掉了,目前看起來似乎真的有比較正常,真是奇妙。
至於上次說自行重啟怕會有問題,所以現在只敢用 rndc flush 把 cache 清掉,這樣查詢不到的 negative cache 也就清掉了,不過這招似乎只對這種偶發性查不到某個特定FQDN有效就是了,若是其他問題應該不會有效果,可能還會因為清掉 cache 造成一點頻寬浪費。
以下是script:

#!/bin/sh
#
# 測試特定的 FQDN 是否查詢得到,若有問題則 log 並 mail
#
DATE=`date “+%Y%m%d %H:%M”`
HOST=`hostname -s`
SERVER=`hostname -f`
LOG=/var/log/named/fqdn_check.log
MAIL=”admin@domain.com.tw”
TMPFILE=/tmp/`date “+%Y%m%d%H%M%S”`_fqdn_check.tmp
MAIL_SUBJECT=””
# 要測試的 FQDN
FQDN=”www.domian.com.tw.”
# 全部要測試的 DNS
DNSLIST=”127.0.0.1
dns.hinet.net.
dns.seed.net.tw.”
# 若測試任一 FQDN 有問題則設為 1,最後依此變數決定有沒有問題
CHECK=0
# 依序測試 DNLIST [...]

DNS 自我監控

Monday, November 21st, 2005

前陣子DNS出了點問題,後來和同事研究不如寫個 script 丟進 crontab 作監控,目前想到的方法是這樣,列幾個重要的 FQDN, 定時用 host/nslookup 去查詢看看查不查得到,於是寫了像是這樣的監控 script:

#!/bin/sh
#
# 測試特定的 FQDN 是否查詢得到,若有問題則自動重啟並 mail
#
DATE=`date “+%Y%m%d %H:%M”`
HOST=ns
SERVER=ns.domain.net
LOG=/var/log/ns_check.log
MAIL=”admin@ns.domain.net”
# 全部要測試的 FQDN
FQDNLIST=”ns.domain.net. www.hinet.net.”
# 若測試任一 FQDN 有問題則設為 1,最後依此變數決定有沒有問題
CHECK=0
# 依序測試 DNLIST 裡的各個 FQDN
for DN in $FQDNLIST
do
host $DN | grep address
if [ $? -ne 0 ] ; then
CHECK=1
echo $DATE $HOST dns query fail: $DN >> /tmp/$HOST_ns_check.tmp
echo $DATE $HOST dns query fail: $DN [...]

TWNIC的DNS 技術研討班

Thursday, September 15th, 2005

今天去參加TWNIC的DNS 技術研討班,其實我對後面的DNS 技術實作班比較有興趣,但是礙於得先參加技術研討班才能參加技術實作班的規定,那就乾脆點兩個都報名了,今天就當作觀念複習/驗證,只是限制要有 *.tw 網域的人才能參加感覺有點可惜了,感覺講得還不錯說,雖然我是不知道如果對DNS沒什麼概念的人聽不聽得懂啦,對我來說也是有一些收穫的,例如:
1. SOA 那五個數字最後一個通常文件都寫 min. ttl,原來新版(bind 8)以後就變成 negative cache 的時間。
2. 不滿一個 class C 的反解設法以前有看過,不過太久沒碰也都忘了,雖然實際上會用到的機會還是不大啦。
3. bind 9 如果某個 zone file 有問題會跳過它繼續啟動,盡量能提供服務就提供服務的原則就對了,不像之前版本如果有些錯誤就完全無法啟動,所以 bind 9 啟動後還是要看看 log 正不正常並測試一下,因為不見得有啟動就是正常了。
其他一些常犯的錯誤等等的‧‧‧

DNS zone transfer 的奇妙錯誤

Friday, September 9th, 2005

話說最近把DNS又拿出來研究研究,有次發現slave DNS大部份的 zone 都可以正常跟 master DNS 進行 zone transfer,偏偏就有一兩個有問題,看了看 slave DNS 抱怨的訊息如下(嗯,以下 zone 的資料都是舉例用的,修改過了):
zone 1.168.192.in-addr.arpa/IN: refresh: non-authoritative answer from master 192.168.1.100#53
感覺就很莫名奇妙,因為其他幾個 zone 就沒問題,更奇妙的是如果用 nslookup 之類的工具去查 master DNS 也可以正常查詢這個 zone 的資料,實在是很奇怪,搞半天在 slave DNS 查不出原因就去拜了一下 google 大神,大神是說應該是 master 那邊的問題,但我跟 master DNS 問這個 zone 明明很正常嘛,簡直是莫名奇妙,但既然大神這麼說,所以就去檢查了一下 master DNS 囉,稍微看了看設定檔,嗯‧‧‧好像很正常嘛‧‧‧再看看有沒有什麼 log,終於讓我抓到啦,有以下這類的 log:
192.168.rev: line 5: SOA for “168.192.in-addr.arpa” not at zone [...]

DNS log 不能大於 2GB?

Tuesday, July 5th, 2005

近日還有遇上一件相當奇妙的事情,話說手邊有台 DNS Server 是用 Bind 9.x,因為有些特殊需求所以前陣子打開了 DNS query log(就是哪個ip在幾點幾分向DNS Server問了哪個domain name的log),大略是像這樣在 named.conf 設定檔裡設定的:

logging {
channel query_channel {
file “/var/log/dns_query.log” versions 10 size 20m;
[...]

神秘的 Sendmail

Friday, May 13th, 2005

Process 會 cache 要去查哪台 DNS Server 嗎?
前天想查 DNS 的一個問題,結果意外發現某 Sendmail Mail Server 機器上(Linux)居然有開 Bind9,而且本機會去查詢,問了一下這應該是測試用的可以停掉,但奇妙的是改了 /etc/resolv.conf 的 dns server 設定,把 127.0.0.1 拿掉後,本機仍然持續去問本機的 dns server,令我百思不得其解,不是應該改了以後立即生效的嗎?一度還想猜說會不會這台上面有什麼程式把要問的 dns server 自己寫死指定好了非問本機不可...
今天才突然靈光一閃,把 sendmail 重啟,果然重啟之後一切正常,去問目前設定的 dns server 不再問本機了!真是奇妙,sendmail( 其他程式也會這樣嗎?) 原來會記得他問的 dns server,於是每次就是問那幾台不會去管 /etc/resolv.conf 改變了啊!