【CentOS】myDNSへのグローバルIP自動通知

myDNSへのグローバルIPの通知はDiCEで実施していたのですが、
最近はWindowsを立ち上げることが減ってきたので、
CentOS側にシェルを作成して自動通知することに。

【起動条件】
1日1回起動

【通知条件】
(A) 前回通知したグローバルIPと起動時のグローバルIPが異なる場合
または
(B) 前回実行が「ERROR」の場合
または
(C) 前回実行から5日経過している場合

通知条件(A)は「/etc/cron.daily」にシェルを配置することで
システムで自動的に1日1回起動するようにします。
通知条件(B)と(C)はシェルで実装します。

  • シェル作成

    vi /etc/cron.daily/mydns.sh
    
  • シェル内容

    #!/bin/bash
    
    # 更新時の日付・時刻、IPアドレス、更新結果ログファイル
    CURRENT_IP_FILE='/var/tmp/current_ip.log'
    # 更新時にMyDNS.jpから返されるHTMLファイル
    LOG_FILE='/var/tmp/ip_update.html'
    
    # ieserver.netのグローバルIP確認でグローバルIPを取得
    IP_ADDR_CHK='http://ieserver.net/ipcheck.shtml'
    # myDnsのログインページ
    DDNS_UPDATE="http://www.mydns.jp/login.html"
    USR='myDNSのユーザ名'
    PSW='myDNSのパスワード'
    STATUS='login_status = 1\.'
    
    if [ -f ${CURRENT_IP_FILE} ]; then
        CURRENT=`cat ${CURRENT_IP_FILE}`
        CURRENT_IP=`echo ${CURRENT} | cut -d " " -f 3`
        CURRENT_DT=`echo ${CURRENT} | cut -d " " -f 1-2`
        CURRENT_RTN=`echo ${CURRENT} | cut -d " " -f 4`
    else
        CURRENT_IP='0.0.0.0'
        CURRENT_DT='2000/01/01 00:00:00'
        CURRENT_RTN='ERROR'
    fi
    
    NEW_IP=`wget -q -O - ${IP_ADDR_CHK}`
    NEW_DT=`date +"%Y/%m/%d %H:%M:%S"`
    
    DIFF_DAY=`expr \( \`date -d"${NEW_DT}" +%s\` - \`date -d"${CURRENT_DT}" +%s\` \) / 86400`
    
    if ( [ ${NEW_IP} != "0.0.0.0" ] && [ ${NEW_IP} != ${CURRENT_IP} ] ) \
    || [ ${CURRENT_RTN} = "ERROR" ] \
    || [ ${DIFF_DAY} -gt 5 ]; then
        wget -q --user=${USR} --password=${PSW} -O ${LOG_FILE} ${DDNS_UPDATE}
        if [ $? -eq 0 ] && grep -q "${STATUS}" ${LOG_FILE}; then
            echo "${NEW_DT} ${NEW_IP} OK" > ${CURRENT_IP_FILE}
            MSG="OK"
        else
            echo "${NEW_DT} ${CURRENT_IP} ERROR" > ${CURRENT_IP_FILE}
            MSG="ERROR"
        fi
    fi
    
  • シェル実行権限付与

    chmod 755 /etc/cron.daily/mydns.sh