グローバルIPアドレスが変動でインターネットプロバイダ(以下、プロバイダ)と契約している場合、光回線終端装置(ONU)を再起動したりするタイミングで、グローバルIPアドレスが変わってしまうことがあります。
プロバイダによっては、オプションで固定IPアドレスを利用できる場合もありますが、月額1,000円程追加で掛かってくるケースが多いです。
自宅サーバを構築していてインターネットからアクセスできるようにしたいケースにおいて、グローバルIPアドレスが変わってしまうと、ドメイン名から新しく割り当てられたグローバルIPアドレスを引けなくなってしまので、インターネットから自宅サーバーアクセスできない。という事態が発生します。
そこで、グローバルIPアドレスが変わってしまったとしても、瞬時に追随してDNS情報を更新するサービスとして、ダイナミックドメインネームシステム(以下、DDNS)があります。
ルーターを製造しているメーカーが、同社のルーター利用者向けに独自のDDNSを提供している場合もあります(※)が、今回は誰でも利用できるDDNSであるMyDNS.JP(以下、MyDNS)を利用する方法を紹介します。
自宅サーバを構築してインターネットからアクセスできるようにしたいが、IPアドレスが変動だが、DDNSの利用方法がわからない。という方向けの記事になります。
※ルーター製品利用者向けのDDNSサービス
- YamahaのネットボランチDNSサービス
- Buffaloのバッファロー・ダイナミックDNSサービス
MyDNS.JPに登録する
早速、MyDNSを利用するために、MyDNSにドメインを登録しましょう。
まずは、MyDNSのWebページ(https://www.mydns.jp) にアクセスします。
ユーザ登録
右上の「JOIN US」ボタンを押して、画面の案内に従って登録を進めます。
ログイン
MasterIDとPasswordがメールで通知されるので、画面に入力して「LOG IN」ボタンを押します。
MasterIDとPasswordは覚えにくい文字列で変更もできないので、どこかに控えておくか、メールが消されないように気を付ける必要があります。
DNSレコードを登録
続いて、DNSレコードを登録します。
「DOMAIN INFO」をクリックして、DNSレコードを登録する画面を開きます。
利用したいドメイン名を入力して「CHECK」ボタンを押します。
(独自ドメインを利用する場合)ネームサーバにCNAMEレコードを追加する
独自ドメインを利用したい場合は、ネームサーバにMyDNSのドメインに向けたCNAMEレコードを追加します。
お名前.comの場合
上記のリンクを参考にCNAMEレコードを設定します。
お名前.comのネームサーバには、ホスト名なしのルートドメインにCNAMEレコードを設定することができません。
ルートドメインを使いたい場合は、別のネームサーバを利用するように設定する必要があります。
CloudFlareの場合
上記のリンクを参考にCNAMEレコードを設定します。
グローバルIPアドレスを通知するスクリプトを準備する
MyDNSにGETリクエストを送信するだけで、IPアドレスを通知できます。
安直な方法
LinuxやMacの場合は、以下のシェルスクリプトを動かすだけです。MYDNS_USERやMYDNS_PASSWORDは適宜自身のものに置き換えてください。
#!/bin/sh
wget -O - http://${MYDNS_USER}:${MYDNS_PASSWORD}@www.mydns.jp/login.html
このシェルスクリプトをcronに登録して定期実行します。
このシェルスクリプトをcronに登録して、定期実行してもよいのですが、いくつか改善すべき点があります
- グローバルIPアドレスが変わったときにだけ、MyDNSに通知するだけで十分
- MyDNSのユーザIDやパスワードを平文のまま管理するのか
- シェルスクリプトの実行結果のログを確認するにはどうするか
- cronジョブに登録してしまうと、ジョブの存在がいつか忘れ去られる恐怖
- シェルスクリプトのソースが失われたら、どうするのか(1行だけなので、今回においては失われても良いかも)
- 実行環境がOSやライブラリ(wget)依存になってしまっているが、どの環境でも動かせるようにできないか
- グローバルIPアドレスが変わった時だけMyDNSに通知するようにプログラムを修正します(1に対応)
- Jenkinsでジョブ管理してみます(2/3/4に対応)
- バージョン管理(Github)でソースコードを管理してみます(5に対応)
- ジョブ自体をコンテナイメージ化して、Dockerの実行環境があればどこでも実行できるようにします(6に対応)
改善Verについては、別の記事でご紹介することとします。随時こちらにリンクを貼るので、興味ある方はご覧になってください。