自作スクリプトでDDNSのIPアドレスを自動更新する
はじめに
DDNS NowでIPアドレスの自動更新をする方法を紹介します。
DiCEを使用せずに、cronにスクリプトを登録して更新します。
DDNS Now - 無料ダイナミックDNSサービス
スクリプト作成
DDNS Nowの更新方法ページ読んでみると、HTTPリクエストでIPアドレス更新が可能みたいです。
下記のHTTP GETでAレコードの更新が可能です。
https://f5.si/update.php?domain=ユーザ名&password=パスワード&ip=IPアドレス
※「&ip=」を指定しない場合はアクセス元のIPアドレスを自動的に設定できます。
※「パスワード」は平文のパスワードのほかにAPIトークンも使用できます。
https://ddns.kuku.lu/setupinfo.php
まずは以下のコマンドで稼動確認を行います。
パスワードは平文ではなくAPIトークンで実行することをおすすめします。
APIトークンは詳細ページの一番下にあるのでコピペしてください。
curl -X GET https://f5.si/update.php?domain=ユーザ名\&password=APIトークン
注意点:&をエスケープ処理すること(bashの&はバックグランド処理を意味するため)
以下のように表示されたら成功です。
OK:SUCCESS (good)
エラーコードが表示される場合は、更新方法ページの一番下にエラーコードの内容が書いてありますので、それを参考にURLを修正してください。(私の場合は&をエスケープしなかったためパスワードを送信できていなかった)
稼動確認ができたら、/usr/local/bin/callApiDDNSを作成します
#!/bin/bash # IPアドレスを更新する # /usr/local/bin/callApiDDNS PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin LOGFILE=/var/log/callApiDdns.log echo -n "/usr/local/bin/callApiDDNS start at `date '+%Y/%m/%d %R'` " >> $LOGFILE echo -n "Result: " >> $LOGFILE curl -X GET https://f5.si/update.php?domain=ユーザ名\&password=APIトークン >> $LOGFILE echo "" >> $LOGFILE exit 0
作成できたら実行権限を付与します。
sudo chmod 755 /usr/local/bin/callApiDDNS
ここでもう一度稼動確認を行います。上手く行けば/var/log/callApiDdns.logにログが吐かれます。
sudo /usr/local/bin/callApiDDNS
ログファイルにOK:SUCCESS (good)と出力されたらOKです。
cronで定期実行
上記のスクリプトを自動で起動するように設定します。
起動時間は任意で変更してください。
sudo vi /etc/cron.d/callApiDDNS
# 毎日01:00に処理を実行する # m h dom mon dow user command 0 1 * * * root /usr/local/bin/callApiDDNS
編集後は権限を変更して、cronの再起動
sudo chmod 644 /etc/cron.d/callApiDDNS sudo chown root:root /etc/cron.d/callApiDDNS sudo service cron restart sudo service cron status # 再起動確認
ログローテーションの設定
このままでは実行ログが肥大化していくので、logrotateで自動的に削除するようにします。
sudo vi /etc/logrotate.d/callApiDDNS
/var/log/callApiDDNS.log { rotate 4 weekly missingok notifempty }
上記では4週間ログを保持する設定にしてます。それ以上古いものは自動的に削除されます。
最後にテスト実行でエラーが発生しないことを確認できたらOKです。
logrotate -dv /etc/logrotate.d/callApiDDNS
おわりに
今回は簡易なスクリプトにしましたが、エラーコードが返ったときはメール通知する処理を入れた方が丁寧ですね。時間があればメール送信処理を入れてみます。
以上