アフォでも出来る

アフォでも出来るように記録します(IT系)

OCIでメールサーバー構築ーその5 MyDNSアドレス自動更新

OCIが割り当てるグロバルIPは基本的には変更されないがMyDNSは固定でも動的でも1週間以上IPアドレスを更新しないとエラーになります。なので,自動更新は必須です。

 

なんだか上手くいかないので,以下の方法を試みた。

curl -u ID:PASS https://www.mydns.jp/login.html

crontab -e

# 毎日01:00にIPアドレスを通知する
0 1 * * * curl -u ID:PASS https://www.mydns.jp/login.html

 

<参考サイト>

MyDNSのIP自動更新 - Qiita

 

※ 以下は古い情報です。 

# vi /etc/cron.hourly/mydns

 

#!/bin/sh

wget -O - 'http://id:PASS@www.mydns.jp/login.html' > /dev/null

 

<参考サイト>

MYDNS.JP IPアドレスの通知 - Qiita

 

※ 以下は古い情報です。

 

更新スクリプトの作成

sudo vi /usr/local/bin/ddns-update.sh

以下を貼り付け。

#!/bin/bash

SCRIPT=${0}
MID=${1}
PASS=${2}
DOMAIN=${3}

# MyDNS.JP設定IPアドレス取得
IPGETLOG=`host ${DOMAIN} ns0.mydns.jp 2>&1`
MYDNSIP=`echo "${IPGETLOG}" | grep "has address" | awk '{ print $NF }' | egrep ^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$`
[ $? -ne 0 ] && MYDNSIP=0.0.0.0

# 現在IPアドレス取得
IPGETLOG=`curl ipinfo.io/ip 2>&1`
echo "${IPGETLOG}" | egrep ^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$ > /dev/null 2>&1
if [ $? -eq 0 ]; then
  CURRENTIP=`echo "${IPGETLOG}" | tail -n 1 | awk '{ print $NF }'`
else
  echo "${DOMAIN} 現在IPアドレス検出エラー" | logger -t $(basename $0)
  echo "${IPGETLOG}" | logger -t $(basename $0)
  exit
fi

# MyDNS.JP設定IPアドレス更新
# (MyDNS.JP設定IPアドレス≠現在IPアドレスの場合またはIPアドレス強制更新指定のみ)
if [ "${MYDNSIP}" != "${CURRENTIP}" ] || [ $# -eq 4 ]; then
  IPUPDATE=`wget -q -O - "https://www.mydns.jp/directip.html?MID=${MID}&PWD=${PASS}&IPV4ADDR=${CURRENTIP}"`
  echo ${IPUPDATE} | grep -q OK
  if [ $? -eq 0 ]; then
    echo "${DOMAIN} IPアドレス更新成功 to ${CURRENTIP}" | logger -t $(basename $0)
  else
    echo "${DOMAIN} IPアドレス更新エラー" | logger -t $(basename $0)
    echo ${IPUPDATE} | logger -t $(basename $0)
    (
    echo IP ADDRESS UPDATE ERROR
    echo ${IPUPDATE}
    ) | mail -s "${SCRIPT##*/} ERROR" root
    exit 1
  fi
fi

exit

スクリプトに実行権限付与

sudo chmod +x /usr/local/bin/ddns-update.sh

試しに実行します。最後の1を忘れない。マスターIDと子IDでそれぞれ実行。マスターIDと子IDのパスワードはメールを確認。子の方はもちろん,サブドメインにする。

/usr/local/bin/ddns-update.sh MasterID MasterPassword testtest.pgw.jp 1

/usr/local/bin/ddns-update.sh ChildID ChildPassword mail.testtest.pgw.jp 1

週一で実行するようにcron設定。

sudo vi /etc/cron.weekly/ddns-update

/usr/local/bin/ddns-update.sh MasterID MasterPassword testtest.pgw.jp 1

/usr/local/bin/ddns-update.sh ChildID ChildPassword mail.testtest.pgw.jp 1

スクリプトに実行権限付与。

sudo chmod +x /etc/cron.weekly/ddns-update