PR
ダイナミックDNS CrontabDDNSMyDNS.jpUbuntu

無料の DDNS である MyDNS.jp を使う|Ubuntu18.04.2

library-ddns ダイナミックDNS

DDNS を使うのは初めてだが、MyDNS.jp での設定は意外とシンプルだった。サイトに接続して JOIN US メニュー からアカウントを登録する。その後ログイン状態で使いたいドメインを決めておいて DOMAIN INFO メニュー でドメインを設定する。そして、Cron で IP アドレスを定期的に更新する ように設定すれば完了でした。

2026 年 7 月 追記:本文は Ubuntu 18.04 での記録ですが、MyDNS.jp の使い方(アカウント登録・ドメイン設定・cron での自動更新)は現在も基本的に同じで、他の Linux でもそのまま使えます。Ubuntu 18.04 自体は 2023 年 5 月にサポートが終了しているため、新規に構築する場合はサポート中のバージョンをお使いください。あわせて、記事末尾に安全性を高めるための補足を追記しました。

スポンサーリンク

JOIN US メニューからアカウントを登録する。

登録する

JONE US メニューで氏名、国名、住所、電話番号、連絡先メール を入力して登録します。

ログインとIPアドレスの通知に必要なマスターIDとそのパスワードを、登録メールアドレス宛てに送信されます。

登録メールアドレスを確認する。

迷惑メールボックスも要確認!

登録ができたら、マスター ID とパスワードを入力して MyDNS.JP にログインする。

DOMAIN INFO メニューでドメインを設定する

host1.example.jp ドメインをマスター ID、mydns123456 で登録する場合、

Domain* : (FQDN)
host1.example.jp

* 	        A 	 	mydns123456
host1 	        A 	 	mydns123456

Cron で IPアドレスを定期的に更新する。

Root ユーザーの Cron Job へ登録する。

書式:https://マスターID:パスワード@www.mydns.jp/login.html
root@ubuntu18:~# vi mydns_update.sh
#!/bin/sh

# MyDNS.JP
# host1.example.jp

/usr/bin/wget -O - 'https://マスターID:パスワード@www.mydns.jp/login.html'

root@ubuntu18:~#

作成したスクリプトでアップデートできるか実行してみる。
実行属性を付けて実行する。

root@ubuntu18:~# chmod +x mydns_update.sh

root@ubuntu18:~# ./mydns_update.sh
--2019-06-24 13:23:47--  https://mydns123456:*password*@www.mydns.jp/login.html
www.mydns.jp (www.mydns.jp) をDNSに問いあわせています... 168.235.75.38, 210.197.74.203, 46.19.34.8, ...
www.mydns.jp (www.mydns.jp)|168.235.75.38|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 401 Unauthorized
選択された認証形式: Basic realm="Enter MasterID and Password."
www.mydns.jp:443 への接続を再利用します。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`STDOUT' に保存中

-                                       [<=>                                                                ]       0  --.-KB/s               <html>
<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc  | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>

</head>
<BODY BGCOLOR="#FFFFFF"
      TEXT="#304040"
      leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydns123456</DD>
<DT>REMOTE ADDRESS:</DT><DD>123.123.123.10</DD>
<DT>ACCESS DAYTIME:</DT><DD>2019/06/24 04:23:48 UTC</DD>
<DT>SERVER ADDRESS:</DT><DD>168.235.75.38</DD>
<BR>

</body>
</html>
-                                       [ <=>                                                               ]     618  --.-KB/s    時間 0s

2019-06-24 13:23:48 (22.5 MB/s) - stdout へ出力しました [618]

root@ubuntu18:~#

MyDNS.jp にも反映されたか LOG INFO メニューを確認する。

2019/06/24 13:23:48 JST     IPv4 UPDATE : mydns123456 123.123.123.10 (i123-123-123-10.s30.a048.ap.plala.or.jp), http, la
2019/06/24 13:23:48 JST     DNSINFO UPDATE : host1.example.jp
2019/06/24 13:12:57 JST     CHANGE IPINFO : 123.123.123.10, 0:0:0:0:0:0:0:0

...

毎日0時にアップデートするように Cron へ登録し、Cron デーモンを再起動しておく。

root@ubuntu18:~# crontab -e
0 	0 	* 	* 	* 	/root/mydns_update.sh

root@ubuntu18:~# sudo systemctl restart cron.service

より安全・確実にする補足(2026 年 7 月 追記)

パスワードを URL に直接書かない

本文では https://ID:パスワード@www.mydns.jp/login.html のように URL にパスワードを直接書いています。これでも動きますが、実行中に ps コマンドなどでパスワードが見えてしまう可能性があります。気になる場合は、次のようにオプションで渡す形にすると、URL にパスワードが残りません。

#!/bin/sh
/usr/bin/wget -q -O /dev/null \
  --http-user=マスターID \
  --http-password=パスワード \
  https://www.mydns.jp/login.html

curl が使える環境なら、次のように書くこともできます。

curl -u マスターID:パスワード https://www.mydns.jp/login.html

いずれの場合も、スクリプトファイルにはパスワードが平文で書かれるため、chmod 700 などで本人しか読めない権限にしておくことをおすすめします。

IP が変わった時だけ通知する(アクセス過多を避ける)

本文の cron は毎日 1 回 IP を通知しますが、頻繁に実行する設定にすると MyDNS への過度なアクセスになります。IP が変わった時だけ通知するようにすると、短い間隔で回しても負荷になりません。

#!/bin/sh
IPFILE=/root/mydns_oldip.txt
NEWIP=$(curl -s inet-ip.info)
OLDIP=$(cat "$IPFILE" 2>/dev/null)

if [ "$NEWIP" != "$OLDIP" ]; then
  /usr/bin/wget -q -O /dev/null \
    --http-user=マスターID \
    --http-password=パスワード \
    https://www.mydns.jp/login.html
  echo "$NEWIP" > "$IPFILE"
fi

これなら、たとえば 10 分おきに cron で回しても、実際に MyDNS へ通知が飛ぶのは IP が変わった時だけです。IP 変更にすばやく追従しつつ、無駄なアクセスを減らせます。

※ 固定 IP の環境でも、アカウントが無効にならないよう、cron で定期的にアクセスしておくとよいでしょう。

IPv4 が更新されない場合(IPv6 回線)

IPv6 が使える回線で、本文のように www.mydns.jp/login.html へ通知すると、IPv6 のアドレスだけが通知され、IPv4 のアドレスが更新されないことがあるという利用者の報告があります(Qiita・Zenn などの記録)。DOMAIN INFO の画面で IPv4 のアドレスが変わっていない場合は、このケースを疑ってください。

報告では、IPv4 と IPv6 を通知先で分けて解決しています。IPv4 は ipv4.mydns.jp/login.html、IPv6 は ipv6.mydns.jp/login.html です。ルーター用の DDNS スクリプト(OpenWrt の ddns-scripts)でも、MyDNS.jp の IPv4 と IPv6 の通知先は別々に定義されています。

#!/bin/sh
# IPv4 を通知
/usr/bin/wget -q -O /dev/null --user=マスターID --password=パスワード https://ipv4.mydns.jp/login.html
# IPv6 も使う場合だけ追加
/usr/bin/wget -q -O /dev/null --user=マスターID --password=パスワード https://ipv6.mydns.jp/login.html

本文の www.mydns.jp のまま使う場合は、wget に --inet4-only を付けると IPv4 で接続して通知できます。いずれも、通知後に MyDNS.jp の画面で IPv4・IPv6 のアドレスがそれぞれ正しく登録されているかを確認してください。

関連記事

コメント

タイトルとURLをコピーしました