Linuxでmydnsに対してDDNSを行う

2020年3月22日

Kubuntuで外出先から操作出来るようにsshサーバを立てて、mydnsで取得したドメインをDDNSのクライアント『DiCE』のwindows版をWineで動かして使用していたが、Windows版クライアントはGUIでしか使えないため、ssh経由でddns関連の設定をいじることができないのが不便だったのでCUIでできるクライアントがないか調べてみた。

Linux版あるしCUIだから使えばええやんって言われるかもしれないけどあれの開発は2008年から一度も進んでないし、CUIで操作するときの標準出力がUTF-8でされないせいでデフォルトだと文字化けするから使いづらい。あと何故か"DynamicDNSサービス名を入力してください"のところで"?"を入力しても一切対応してるサイトが出力されないし、実際にmydnsのURL入力しても使えない。

そもそも専用のクライアントなんて必要なかった

みんな大好きQiitaの情報参考にするとそもそもMydnsの場合は以下のURLにアクセスしてログインするだけでグローバルIPの通知が完了する模様。なのでLinuxの場合、WgetコマンドでIDとパスワード使ってログインするシェルを書いてcornで定期的に実行するだけ。

やり方

以下のシェルスクリプトを拡張子なしで作る。わかると思うけどIDはMydnsのIDでpasswdはMydnsのパスワードを入れてね。IPv6を更新したい場合は“www"“ipv6"にIPv4を更新したい場合はipv4に変える。

#!/bin/sh
wget -O- 'http://ID:passwd@www.mydns.jp/login.html' --server-response

あとは作ったファイルを“/etc/cron.daily"“/etc/cron.hourly"“/cron.weekly:
に入れるだけ(のはず…。俺のcronへの認識が正しければ…)。確かMydnsは一週間以上通知がなければエラーページに飛ばされるようになるから、毎月実行される“/etc/cron.monthly"に入れるのはアウト。自分は毎日実行したいからcron.dailyに入れた。

コマンドが正しく動くか確認したい場合、上記wgetをそのままターミナルで実行して以下のようなHTMLのレスポンスが返ってきたら成功。

<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>mydnshogehogeID</DD>
<DT>REMOTE ADDRESS:</DT><DD>xxxx:yyyy:zzzz:aaaa:bbbb:cccc:dddd</DD>
<DT>ACCESS DAYTIME:</DT><DD>yyyy/mm/dd hh:mm:ss UTC</DD>
<DT>SERVER ADDRESS:</DT><DD>xxxx:yyyy:zzzz::aaaa</DD>
<BR>

</body>
</html>