背景(は読み飛ばすもの)
僕は6年ほど前から自宅サーバーを運用しています.サーバーなので当然外部からの接続がしたくなるわけですが,自宅のサーバーなので,費用の問題であったり,そもそも利用しているプロバイダの制約でグローバルIPが固定できないことがほとんどではないでしょうか.
僕の自宅はNUROを引いていて,NUROだと固定IPを提供していないので(別料金でも)そもそも固定するという選択肢をとることが出来ません.そこで,DDNSをieserver.netさんで登録して使用させて頂いていたのですが,少し前に存続の危機とのことで,別のDDNSサービスの検討を始めました.結局ieserver.netさんは存続可能とのことだったのですが,個人の有志のサービスとのことなので,これを機に商業的にやっている(恐らく)MyDNS.JPさんに鞍替えさせてもらうことにしました.
DDNSは動的IPを特定のドメインに紐付けるわけですが,IPが変更になる度に手動で更新するわけにはいかないので自動化が必要になります.この更新は規格化されている物では無いので,それぞれのサービスで提供されている更新方法に従う必要があります.そこで今回はMyDNS.JPさんでのIP更新を自動化するスクリプトを作ったので,その紹介をしたいと思います.
まぁスクリプトと言ってもたかだか数行なので作りましたって言うほどのものでもないわけですが・・・
DDNS-updater
リポジトリ
使い方
-
update.sh
と同じディレクトリにlogin.infoというファイルを作ります. -
login.info
の中にMyDNS.JPで発行されたMasterIDとPasswordを書き込みます.login.info{MasterID}_{Password}
-
update.sh
をクーロンに登録*/10 * * * * /opt/scripts/ddns-update/update.sh
(これは10分ごとに更新する場合)
解説
MyDNS.JPさんでは,専用のwebページにログイン情報付きでアクセスすることで,ログインしたアカウントに紐付くドメインにリクエスト元のIPを新しいIPとして紐付けを行うようです.ここで問題となるのが,MyDNS.JPのHow toに書いてあるリクエストURLだとIPv4とIPv6のどちらかしか登録が出来ません.なぜならリクエストするときはIPv4かIPv6のどちらかでセッションを張るからですね.
サーバーをIPv4とIPv6の両対応にさせたいときは下記のURLにアクセスする必要があります.URLを見る限りそれぞれどちらかのみに対応したサーバーのようですね.
- https://{MasterID}:{Password}@ipv4.mydomain.jp/login.html
- https://{MasterID}:{Password}@ipv6.mydomain.jp/login.html
また,MyDNS.JPのHow toでは,wgetコマンドを使用していますが,wgetコマンドは対象のページをローカルに保存してしまうので,スクリプトの実行時にゴミが出来てしまいます.なので,wgetではなくcurlを使うようにしてみました.