MyDNS.JPを使おう!
本記事は、LinuxサーバーでダイナミックDNSを使う方法(Duck DNS編)の後続編となります。ダイナミックDNSとはなんぞや?という方はまずDuck DNS編からお読みください。(サラッと前記事の宣伝
)
Duck DNSは簡単に利用できるのが売りのダイナミックDNSサービスですが、その反面高度な設定はできず、また筆者の実感としてはパフォーマンスもイマイチ良くない気がします。
そこで、筆者はMyDNS.JPをメインのダイナミックDNSとして利用しています。
MyDNS.JPとは
MyDNS.JPは無料で利用できるダイナミックDNSサービスです。名前通り日本発の老舗ダイナミックDNSサービスで、速度・安定性ともに定評がありさらにIPv6にも完全対応しています。また、IP通知はメールの受信またはログインページへアクセスによって行うため、他のダイナミックDNSサービスのように独自のプロトコルを必要としないのも特徴の一つです。
MyDNS.JPの利用方法
アカウント作成
まずはhttps://www.mydns.jpへアクセスして、アカウントを作成します。
これでMyDNS.jpのアカウントが作成できました。登録が完了するとMaster IDとそのパスワードが発行されメールで送られてきます。
ドメインの登録
アカウントが作成できたらMaster IDとパスワードでMyDNS.jpにログインします。
そして、「DOMAIN INFO」の画面でドメインの情報を登録します。サブドメインは最大14個まで登録できます。
メールサーバーを動かしているならここでMXレコードも指定します。

IP通知設定
ここからは自宅サーバー側の作業となります。
今回は、IP通知にはログインページへのアクセスによる方法を用います。
IP通知スクリプトの作成
まずはIP通知用のスクリプトを作成します。
#!/bin/bash
# 変数定義部分
URL="https://ipv4.mydns.jp/login.html"
URLv6="https://ipv6.mydns.jp/login.html"
ACCOUNTS=(
# <Master ID>:<Password>
# 例)
mydns123456:Password1
mydns123457:Password2
)
# IP通知処理部分
for ACCOUNT in "${ACCOUNTS[@]}"; do
RESULT=`curl -s -S -I -f -u ${ACCOUNT} ${URL} --connect-timeout 10 | head -1`
logger -t MyDNS "${URL}_${RESULT}"
sleep 2
RESULTv6=`curl -s -S -I -f -u ${ACCOUNT} ${URLv6} --connect-timeout 10 | head -1`
logger -t MyDNS "${URLv6}_${RESULTv6}"
sleep 2
done
スクリプトの解説:
- まず、IPv4、IPv6それぞれの通知用ログインページのURLを変数に格納しています
- 次にアカウント情報をACCOUNTS配列に格納しています。MyDNS.JPでは複数のアカウントを持つことが可能なので、これは全アカウントのIP通知を一括して行うための下準備となります
- 続くforループ内が実際のIP通知処理となります。ここではcurlコマンドを使ってログインページにアクセスして、その返ってきたステータスの1行目(アクセス成功なら"HTTP/2 200"など)をRESULT変数に格納しています。また、応答が帰ってこない場合に備えてタイムアウトを10秒に設定しています
- 格納したRESULTをURLと対にしてloggerに渡しています。これによって、IP通知がうまくいったかどうかの結果がログに記録されます
- IPv4とIPv6とのそれぞれの処理の間にはMyDNS.JPサーバーへの配慮のため、2秒間のインターバルを入れてあります
スクリプトのパーミッションを設定する
このファイルにはパスワード情報が書き込まれているので、root以外は読めないようにパーミッションを設定し、さらに実行許可も与えます。
$ sudo chown root:root /usr/local/bin/mydns-update.sh
$ sudo chmod 700 /usr/local/bin/mydns-update.sh
サービスの登録
これをそのままcronで回してもいいのですが、今回はより現代的なsystemdを利用する方法をとりました。
まずは以下のようなサービスファイルを作成します。
[Unit]
Description=MyDNS.JP IP Update Service
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mydns-update.sh
これは単純にIP通知スクリプトをサービス化しただけです。
次にタイマーファイルを作成し、登録したIP通知サービスをタイマーに登録します。
[Unit]
Description=Run MyDNS.JP IP Update Hourly
[Timer]
OnCalendar=hourly
Persistent=true
OnBootSec=60sec
[Install]
WantedBy=timers.target
ここでは1時間ごとにIP通知サービスを走らせるようにしています。
ブート時にはシステムが完全に起動するまで60秒間の「待ち」を入れています。これがないとシステム(特にネットワーク周り)が起動し切っていないうちにIP通知スクリプトが実行されてしまい、ブート時のIP通知が失敗します。
(60秒間というのはあくまで筆者の環境での値なので、上手くいかないようであれば各自で調整してください。)
タイマーの有効化
最後に、登録したタイマーを有効化します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now mydns-update.timer
これで、1時間に1回、MyDNS.JPへIP通知がされるようになります。
タイマーがきちんと動いているかどうか確認するには、
$ systemctl list-timers --all
とすると有効化されているタイマーの一覧が表示されます。
まとめ
これでめでたくMyDNS.JPを使って固定したドメイン名で自宅サーバーへアクセスできるようになりました。
MyDNS.JPは複数のサブドメインに対して様々なレコードを指定することができて非常に高機能です。さらに、MyDNS.JPへのIP通知はログインページへアクセスするだけというとてもシンプルなものです。おまけに完全に無料で利用できるのですから、自宅サーバーを立てているならぜひとも使って頂きたいダイナミックDNSサービスだと思います。この記事がその一助になれば幸いです。(決して筆者はMyDNS.JPの回し者ではありません。
)
それではよい自宅サーバーライフを♪


