手当たり次第に書くんだ

飽きっぽいのは本能

VALUE-DOMAIN ダイナミック DNS 更新スクリプト – shell で更新する

VALUE-DOMAIN のダイナミック DNS 更新を、CentOS 6 上の shell スクリプトで行うための古い実装メモです。PHP 版でうまく動かなかった環境向けに、wget と cron で更新する形にしています。

CentOS 6 は既にサポートが終了しています。このページは新規構築を推奨するものではなく、過去環境の保守、移行前調査、設定の読み解きに使うためのレガシー Linux 手順です。新規構築では現行の Linux ディストリビューションを利用してください。

参考書籍
参考書籍

ストーリーで覚える Linux CLI 入門

Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

このスクリプトの位置づけ

この例では、VALUE-DOMAIN の更新 API にホスト名を渡し、結果をログに残します。パスワードとドメイン名はファイル内に持たせるため、ファイル権限を root 限定にする前提です。

更新スクリプトを作成する

DomainPasswordMailto は自分の環境に合わせて変更します。

mkdir -p /root/bin
tee /root/bin/vdupdate.sh <<'EOF'
#!/bin/sh
Fqdn='dyn.value-domain.com'
Domain='si1230.com'
Password='xxxxxxxx'
Host=$1
Url="http://$Fqdn/cgi-bin/dyn.fcg?d=$Domain&p=$Password&h=$Host"
WLog=$(mktemp)
WFile=$(mktemp)
LDir="/var/log/vdupdate/$Host"
LFile="$LDir/update.log"
Error="$LDir/error.log"
LDate=$(date +"%Y/%m/%d %H:%M:%S")
Mailto='admin@si1230.com'
Subject='VDUPDATE Error'
if [ ! -d "$LDir" ]; then
  mkdir -p "$LDir"
fi
if [ ! -n "$Host" ]; then
  EMsg='Host argument is not set!'
  echo "$LDate $EMsg" >> "$Error"
  echo "$0 $EMsg" | mail -s "$Subject" "$Mailto"
  exit 1
fi
wget "$Url" -o "$WLog" -O "$WFile"
Result=$(awk -F '=' '/status=/{print $2}' "$WFile")
LFormat="$Host.$Domain: Status=$Result:"
Status0="Update successful"
Status1="Bad request"
Status2="Password and an incorrect domain name"
Status3="Invalid IP address"
Status4="Passwords do not match"
Status5="Database server is congested"
Status9="Other errors"
case "$Result" in
  '0') echo "$LDate $LFormat $Status0" >> "$LFile" ;;
  '1') echo "$LDate $LFormat $Status1" >> "$LFile"; echo "$0 $LFormat $Status1" | mail -s "$Subject" "$Mailto" ;;
  '2') echo "$LDate $LFormat $Status2" >> "$LFile"; echo "$0 $LFormat $Status2" | mail -s "$Subject" "$Mailto" ;;
  '3') echo "$LDate $LFormat $Status3" >> "$LFile"; echo "$0 $LFormat $Status3" | mail -s "$Subject" "$Mailto" ;;
  '4') echo "$LDate $LFormat $Status4" >> "$LFile"; echo "$0 $LFormat $Status4" | mail -s "$Subject" "$Mailto" ;;
  '5') echo "$LDate $LFormat $Status5" >> "$LFile"; echo "$0 $LFormat $Status5" | mail -s "$Subject" "$Mailto" ;;
  '9') echo "$LDate $LFormat $Status9" >> "$LFile"; echo "$0 $LFormat $Status9" | mail -s "$Subject" "$Mailto" ;;
esac
rm -f "$WLog" "$WFile"
EOF

実行権限を root のみにする

認証情報を含むため、実行権限は root のみにします。

chmod 700 /root/bin/vdupdate.sh

cron に登録する

ホスト名ごとに引数を分けて、30 分ごとに更新します。

tee /etc/cron.d/vdupdate <<'EOF'
*/30 * * * * root /root/bin/vdupdate.sh www
*/30 * * * * root /root/bin/vdupdate.sh www1
*/30 * * * * root /root/bin/vdupdate.sh www2
EOF

ログローテーションを設定する

更新ログが増え続けないように、/var/log/vdupdate/ 配下を logrotate の対象にします。

tee /etc/logrotate.d/vdupdate <<'EOF'
/var/log/vdupdate/*log {
  missingok
  notifempty
  size 30k
  monthly
  create 0600 root root
}
EOF

古い実装として読む時の注意点

このスクリプトは、VALUE-DOMAIN 側の古い応答仕様を前提にしています。ステータスコードが期待通りに返らない場合もあるため、現在使う場合は手元でレスポンス内容を確認し、HTTPS、認証情報管理、ログ出力先を見直してください。

関連する記事
VALUE-DOMAIN ダイナミック DNS 更新スクリプト – shell で更新する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る