やること

  • MyDNSで無料のドメインを取る
  • IPアドレスを登録する
  • 自動でIPアドレスを通知できるようにする

MyDNSって?

動的IP環境でもドメインで自宅のサーバーにアクセスさせたい人のためにあるサービスがDynamicDNS。
その中の一つ。
そもそもDNSっていうのがドメイン→IPなわけでそのIPがコロコロ変わる環境でドメインを使ってアクセスっていうのは普通に考えたら難しい。
その辺の結びつけを支援してくれるものと捉えている。

事始め

https://www.mydns.jp/
右上メニューのJOIN USから登録しましょう。

ログインするとこんな画面になります。

右にあるDOMAIN INFOからドメインを登録していきます。

その後、IP ADDRESS DIRECTから今のIPアドレスを登録すれば紐付け完了。

これだけで外部からドメインによるアクセスが出来るようになった。

IPアドレスの自動通知

ただ、IPが変わった場合手動でサイトに行って登録するのは面倒だ。
間違いなく登録しにいかなくなるのは目に見えている。
そこでCronを使って一日1回IPアドレスをMyDNSに通知してもらうことにする。

スクリプトはこんな感じ。

~/mydns.sh

#!/bin/bash
user=<MasterID>
pass=<Password>
wget --http-user=${user} --http-passwd=${pass} --spider https://www.mydns.jp/login.html

userとpassはログインするときのものである。
他にも通知方法があるけどこれが一番シンプルに見えたので採用。
https://www.mydns.jp/?MENU=030

※IPv4とIPv6のデュアルスタックの場合など

…。
考慮していないことに記事を書きながら気がつく。

#!/bin/bash
user=<MasterID>
pass=<Password>
wget --http-user=${user} --http-passwd=${pass} --spider https://ipv4.mydns.jp/login.html
wget --http-user=${user} --http-passwd=${pass} --spider https://ipv6.mydns.jp/login.html

これでいけそうですね。
もしかしたらwgetの間にwait挟んだ方がいいかもしれない。

実行結果はこんな感じ。

$ . ~/mydns.sh
スパイダーモードが有効です。リモートファイルが存在してるか確認します。
--2020-09-09 00:21:11--  https://ipv4.mydns.jp/login.html
ipv4.mydns.jp (ipv4.mydns.jp) をDNSに問いあわせています... 210.197.74.203, 168.235.75.38, 163.44.151.204, ...
ipv4.mydns.jp (ipv4.mydns.jp)|210.197.74.203|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 401 Unauthorized
選択された認証形式: Basic realm="Enter MasterID and Password."
ipv4.mydns.jp (ipv4.mydns.jp)|210.197.74.203|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
リモートファイルが存在し、さらなるリンクもあり得ますが、再帰が禁止されています -- 取得しません。

スパイダーモードが有効です。リモートファイルが存在してるか確認します。
--2020-09-09 00:21:11--  https://ipv6.mydns.jp/login.html
ipv6.mydns.jp (ipv6.mydns.jp) をDNSに問いあわせています... 2604:180:2:d8::8924, 2604:180:3:ab6::245c, 2001:df6:b800:1129:163:44:151:204, ...
ipv6.mydns.jp (ipv6.mydns.jp)|2604:180:2:d8::8924|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 401 Unauthorized
選択された認証形式: Basic realm="Enter MasterID and Password."
ipv6.mydns.jp (ipv6.mydns.jp)|2604:180:2:d8::8924|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
リモートファイルが存在し、さらなるリンクもあり得ますが、再帰が禁止されています -- 取得しません。

あとはこれをcronにでも実行させればOK。

crontab -e

0 5 * * * mydns.sh

毎朝5時更新。ソシャゲかな?

ということで自宅にAPIサーバーとか置きたい場合は重宝するMyDNSの解説でした。
独自ドメインにも対応してるらしいんでそっちもやってみるといいかもしれないですね。
その場合、私は外のサーバー借ります。