ダイナミックDNS(mydns.jp)に登録と自動更新

1.はじめに

dyndnsが有料化されたので無料のmydnsへ乗り換えてみました。

2.まずは登録する

mydns.jpはこちら
https://www.mydns.jp/
@右上の「Join US」からユーザー登録します。


A登録情報を入力します。


Bメールで送られてきたユーザーパスでログインします。


Cdomain infoをクリック


DdomainとMXに希望のドメインを入れます。


Echeckを押して既に使用されていなければ登録できます。

FIPを設定します。
 IP ADDR DIRECTをクリック


GIPを入力します。


これで登録完了です。

3.自動更新する

このままでは、動的IPの場合更新が大変ですので自動で更新できるようにします。
使用するソフトはwgetで可能です。
# cd /usr/ports/ftp/wget
# make install clean

インストールが終了したら自動更新の為、cronで動くコマンドを作成しておきます。
/root/mydns.sh
#!/bin/sh
/usr/local/bin/wget -O /dev/null https://ユーザー名:パスワード@www.mydns.jp/login.html
あとは定期的にcronで走らせれば完了です。
起動時にも動いて欲しいが、なぜか/usr/local/etc/rc.d/でもcronの@rebootでもwgetで名前解決ができない。
resolv.confをunboundではなくプロバイダーにしてもダメ。
そもそもtun0にIPが割り当てられるまで少しタイムラグがある。
かと言ってcronの@rebootでシェルをスタートさせ、sleepで時間稼ぎしても変わらず。
ならばwgetのオプションでdnsサーバーを指定しようにも、libcaresを入れたオプションでコンパイルが必要なのだが
make configでオプションが無いのでソースからコンパイルする必要があるので断念。
そこで似たようなソフトでcurlが指定できそうだったのでこれにしてみる。
# cd /usr/ports/ftp/curl
# make install clean
make configで不要なオプションは外してからインストールしましょう。
そしてシェルスクリプトを作成します。
#!/bin/sh
sleep 60
curl --dns-servers XXX.XXX.XXX.XXX -u ユーザー名:パスワード https://www.mydns.jp/login.html

これをcronで@rebootのタイミングで動かせば完了です。
リブートするたびにIPが変わりますが、login表示後1分で更新してくれます。

mydnsはアクセス過多だと制限されるとのうわさもあるので、セルフチェックのスクリプトも作ってみました。
#!/bin/bash
ifconfig tun0 > null
if [ $? = 0 ]
        then
        newip=`ifconfig tun0 | grep "inet" | cut -d" " -f 2`
        oldip=$(cat /root/oldip.txt)
        if [ "$newip" != "$oldip" ]
        then
                echo "change"
                echo "$newip" > /root/oldip.txt
                /usr/local/bin/wget -O /dev/null https://ユーザー名:パスワード@www.mydns.jp/login.html
        fi
fi
ifconfigでIPアドレスを抜き出し、newipへぶち込んで、前回のIPをoldip.txtへ保存してあるようにしておけば
これと比較して変更が無ければスルー、違っていればwgetで更新します。
これを短い時間で回して、上の/root/mydns.shは1週間弱で回せばアクセス過多にならずIPが変更されても1分以内に更新される仕組みになります。

固定IPでもアカウントが消えないようにcronで回してアクセスはしておくと良いと思います。