SaaSいっぱいの時代に個人でサーバを生やしている人がどれほどいるのか謎ですが、お遊び用途で固定IPのISP契約とかElasticIPとか使ってられないよみたいな人に向けたDDNSの設定記事です。
MyDNS、便利に使わせていただいているのですが、複数ドメインを管理しようとすると最初は設定がわからないところが結構あったので、書き残しておきます。
前提
Route 53でドメインを取得し、管理ができる状態になっていること。
とりあえずMyDNSのIDは発行されていてログインできること。
Route53の設定
NSレコード追加
↓のようにサブドメインのゾーン情報にmydnsのネームサーバを指定します。
mydnsに管理させたいサブドメインを同様に全て放りこんでいきます。
ns0.mydns.jp
ns1.mydns.jp
ns2.mydns.jp
CAAレコード追加
Let's encrypt(letsencrypt.org)でのみ証明書を利用する場合は下記のような形でOK。
各サブドメイン側に設定をするのが面倒なので、ドメイン全体に対して証明書発行を許可しています。
指定したサブドメインにのみ設定する場合、mydns側で設定しましょう。
0 issuewild "letsencrypt.org"
0 iodef "あなたのメールアドレス"
0 issuewild ";"
MyDNSの設定
子ID発行
今回は複数のサブドメインを管理する想定なので、管理メニューの「USER INFO」で子IDを追加します。
管理したい数を考えて適当な個数を指定して子IDを発行します。完了したらメールでIDが一杯飛んできます。
親IDのドメイン設定
親IDには取得したドメインを設定します。
レコード入力欄にサブドメインをDELEGATEで登録し、最右のの項目でそのサブドメインを管理する子IDを指定します。
子IDのドメイン設定
サーバの設定
最後に到達したいサーバのIPをmydnsに報知してやります。
以下のシェルスクリプトを作成し、IDとパスワードを入力して保存します。(パスワード直書きなんてありえない!って方は別の方法を教えてください)
私はcronで定期的に報知したいので、cron.hourlyに置きましたが、そこは要件やディストリに合わせましょう。
#!/bin/bash
mydnsid=mydnsxxxxxx #yourid
mydnspass=xxxxxxxxx #yourpassword
while true
do
status=`curl -o /dev/null -w %{http_code} -s --user $mydnsid:$mydnspass https://ipv4.mydns.jp/login.html`
if [ $status -eq 200 ]; then
logger "$mydnsid ip-regist success"
echo "success"
break
fi
sleep 2
done
実行確認
sh /etc/cron.hourly/regist-ip.sh
successが表示されたら成功です。
同サーバから別IDも報知したい場合、利用する子IDの分だけスクリプトを作るとか処理を追加するとかで対応しましょう。
確認
報知されていることはmydns子IDポータルの「LOG INFO」で確認できます。
2020/03/26 06:01:11 JST IPv4 UPDATE : mydnsXXXXXX XX.XX.XX.XXX (yourhost), http, jpn
2020/03/26 06:01:11 JST DNSINFO UPDATE : test1.example.co.jp
名前解決できているか、CAAレコードが登録されているか、digで確認してやりましょう。
dig test1.example.co.jp
dig example.co.jp CAA
これで固定IPじゃなくてもサーバに到達できますね。