Raspberry Piでひかり電話を持ち歩こう⑤VALUE-DOMAIN DDNS自動更新。

 Raspberry Piで構築したIP-PBXをDDNSでドメイン運用してるわけだけど・・・

ルーターのIPアドレスが変更された時にRaspberry Piが自動で認識してVALUE-DOMAINのDDNS更新を行うスクリプトを用意しました。

 

 まず、Raspberry Piにスクリプトを置く場所を用意します。

mkdir /usr/ddns/

これでusrディレクトリ下にddnsというディレクトリが出来ました。

 ココに自動更新スクリプトを設置します。

ddns.shという名前のファイルを制作しその中にこんな感じで書きました。

workd=/usr/ddns
domain="hogehoge.com" #ドメイン
passwd="password" #DDNS更新用パスワード
host="*" #ホスト(サブドメインもOK)

/usr/bin/curl -s http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip \
-o ${workd}/current_ip \
-w '%{http_code}’ > ${workd}/status

status=`cat ${workd}/status`
if [ “200" -ne “$status" ] ; then
exit 0
fi

prev=`cat ${workd}/prev_ip`
current=`cat ${workd}/current_ip`

echo $prev
echo $current

if [ “$prev" = “$current" ] ; then
echo “no change"
exit 0
fi

cat ${workd}/current_ip > ${workd}/prev_ip

wget -o – “http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=${domain}&p=${passwd}&h=${host}&i=${current}"

exit 0

赤文字の箇所を環境に合わせて変更してください。

nanoエディターで直接打ち込んでもいいですしSSH SCPで送ってもOKです。

作ったファイルに実行権限を与えます。

chmod 744 /usr/ddns/ddns.sh

これで、スクリプトを実行するとDDNSの更新が行われます。

試しに実行

/usr/ddns/ddns.sh

これでグローバルIPアドレスが表示されればOK。

もう一度実行するとグローバルIPが2回表示されてno changeと表示されます。

確認時にIPアドレスをprev_ipというファイルに記録してそれと現在のIPアドレスが違った場合のみDDNSの書き換え作業を行います。

 

スクリプトは完成したのでこのスクリプトを定期的に実行する設定をします。

Linuxのcronという機能でスケジュール動作ができます。

nanoエディターでcrontabを開いて編集します。

nano /etc/crontab

crontabにスケジュールを記入。

*/5 * * * * root /usr/ddns/ddns.sh
59 23 * * * root rm /usr/ddns/prev_ip

1行目は5分に一回のスケジュールでスクリプトを実行します。

2行目は毎日23時59分にprev_ipファイルを削除します。

一日一回prev_ipファイルを消すことによって強制的にDDNSを書き込むようにしています。

VALUE-DOMAINの場合は必要ないですが無料のDDNSサービスだとアクセス間隔が開くとアカウント取消し等もあるらしいのでこの処理をおすすめします。

取り敢えずこれでDDNSの自動更新は完成です。

試しにルーターの接続を再接続してIPアドレスを変動させてDDNSの更新状況を確認。

5分でDDNSの更新が確認できればOKです。

DDNSのレコードを更新してから実際に接続できるようになるまで数分かかります。

 

VALUE-DOMAINで試したところドメインでアクセス可能になるまで10分ほどかかったのでIPチェックの間隔と合わせて15分位は更新にかかると思います。

電話着信用としてはちょっと困った時間です・・・電話回線として常用するにはIPアドレスを固定にしてしまうのがベストかもしれません・・・