2005年12月17日 星期六

DNS 偶而查詢不到?

之前在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 裡的各個 FQDN

    for DNS in $DNSLIST

    do



    echo >> $TMPFILE

    echo "# host $FQDN $DNS" >> $TMPFILE

    host $FQDN $DNS| grep address >> $TMPFILE

    if [ $? -ne 0 ] ; then

    CHECK=1

    echo $DATE $HOST $FQDN dns query fail: $DNS >> $LOG

    MAIL_SUBJECT="$MAIL_SUBJECT$DNS "

    fi



    done





    # 若有任何一個 FQDN 測試有問題,則 E-mail 通知

    if [ $CHECK -eq 1 ] ; then

    MAIL_SUBJECT="[$HOST] $DATE $FQDN dns query error: $MAIL_SUBJECT"

    mail -s "$MAIL_SUBJECT" $MAIL < $TMPFILE

    host $FQDN 127.0.0.1| grep address

    if [ $? -ne 0 ] ; then

    /usr/sbin/rndc flush

    fi

    fi



    rm $TMPFILE