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