なんちゃって、DDNSの作成
屋外に設置されてる機器にIODATA LTEルーター(LD-LT2)ですが、標準で使えるDDNSサービスはno-ipさんのサービスで、無料で使うためにはアカウント1個につき1個しか使えないので、たくさんあるとアカウントをたくさん作らないといけないみたいなんです。前モデルは違うサービスも使えたんですけど…IOdataさんおDDNSサービスが終了してしまって困ってしまいました。
今は自前のWinodwsServerで、グローバルIPを手動で設定してDNSを使用しているんですが、夜中にルーターが再起動等すると書き換えるタイミングが翌朝以降になってしまい、度々接続できないってといあわせがあったりします。
そうしないために、定期的に更新処理ができないかなって考えていました。
ただ、グローバルIPは現在はIODATAさんの管理サービスにアクセスして取得しないといけないので、手間なのですがそちらも自動取得のプログラムを作らないといけないなと思っています。
先ずは、WindowsServerの方で更新プログラムを作りました。忘れそうなので、備考録みたいな感じで記録しようと思います。
1.DNSの設定
DDNSで使用するためのサブドメインを手動で登録します。アクセスの為だけなので、Aレコードしか作成していません。
2.CGIの作成
WindowsServerではPerlが動いていたため、CGIはPerlで作成しました。最初は、Perlから直接「dnscmd」コマンドを叩けばいいかなと思い、作りましたが、ローカルで実行したときはちゃんと動いたんですけど、いざWebサーバーで動かすときは全く動きませんでした。
調べるとUAC(ユーザーアカウント制御)が働くため、そのままでは動かないとのこと、やり方を変えて更新用のファイルをローカルに作りそれをタスクスケジューラーのタスクで実行する方法をとりました。プログラムの中身は掲載できませんが、手順だけでも…
・URIパラメーターを受け取る(更新用のID,Pass,サブドメイン,IPアドレス)
・受け取ったパラメータで、サブドメインが存在するか確認
・指定したIPが現在の設定と異なるか
・更新用のファイルを作る
・処理が終わるのを待つ
・結果を画面表示
やってることはこんな感じですね。
僕はIDとPassは固定にしてますが、サブドメイン毎に変えるようにしてもいいかもしれません。あと、更新するサブドメインが複数ある場合は更新用のファイルにひと工夫がいります。僕の場合は、「Modify_サブドメイン.txt」ってファイルを作成して同時に何個きても処理できるようにしました。
3.登録用のBATファイル作成
・更新用のファイルを読込
・ファイルの内容で、dnscmdコマンドを使用して古いレコードを削除してから新しいレコードを追加
・ログのかき出し
・処理結果用のファイルを作成
・更新用ファイルを削除
上記の手順で行ってました。
当初は、グローバルIPを別で取得して更新するって思ってたので、上でよかったのですが、ルーターもしくはその下のクライアントからアクセス出来たらグローバルIPをわざわざ入れなくても良いかなと思っています。
現状は上記の方法で運用しています。
ローカルクライアントからできるようになったら、続きはまた書きます。

