VALUE-DOMAIN のダイナミック DNS 更新を、CentOS 6 上の shell スクリプトで行うための古い実装メモです。PHP 版でうまく動かなかった環境向けに、wget と cron で更新する形にしています。
CentOS 6 は既にサポートが終了しています。このページは新規構築を推奨するものではなく、過去環境の保守、移行前調査、設定の読み解きに使うためのレガシー Linux 手順です。新規構築では現行の Linux ディストリビューションを利用してください。
参考書籍
参考書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
このスクリプトの位置づけ
この例では、VALUE-DOMAIN の更新 API にホスト名を渡し、結果をログに残します。パスワードとドメイン名はファイル内に持たせるため、ファイル権限を root 限定にする前提です。
更新スクリプトを作成する
Domain、Password、Mailto は自分の環境に合わせて変更します。
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.shcron に登録する
ホスト名ごとに引数を分けて、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 で更新する

