ダイナミックDNSの設定

この記事は1年以上前に投稿されたものです。
内容が古い可能性がありますのでご注意ください。

ドメイン名を使って自宅サーバーにアクセス出来るように、ダイナミックDNSの設定を行います。

(2010.5.21追記)独自ドメインに関する説明を追加しました。

ダイナミックDNSサービスの選定

まず、IPアドレスの動的更新がサポートされていることが絶対条件です。
固定IPが割り当てられていない限りはIPアドレスが常に変動することが想定されますので、変更時に反映できることが必要です。

次にAレコードが登録できるかチェックします。「ドメイン→IPアドレス」マッピングはこのAレコードが受け持ちますので、Aレコード登録は必須になります。

最後にドメイン名として、独自ドメインを使用するかサービス元提供のサブドメインを使うかで選択が分かれます。

その他、「登録ドメインでメールアドレスを作成したい(MXレコード登録)」「取得したドメインのサブドメインを作成したい(CNAMEレコード登録)」「ワイルドカード登録」「登録レコード数の上限」など、必要な機能に応じてサービスを選定していきます。

当サイトでは下記の条件で探してみました。

  • Aレコード登録
  • MXレコード登録
  • CNAMEレコード登録
  • ワイルドカード登録
  • 独自ドメイン搭載可(出来なくても良い)
  • 日本でのサービス提供

調べて検討した結果、当サイトでは「MyDNS.jp」様のサービスを利用することにしました。
MyDNS.jp様のサービスでは上記条件が全て満たせており、更に動的IP登録方法に様々な方法を提供されていますので有り難いです。

※ダイナミックDNSサービスを探すには、「フリーDynamicDNSサー ビス一覧|DiCE DynamicDNS Client」が大変参考になります。

MyDNS.jpにてサービスを申し込む

サービスを利用するには、管理画面に入るための「マスターID」と「パスワード」が必要です。尚、複数の独自ドメインおよびMyDNS様提供のサブドメインを管理したい場合は、その都度新たに「マスターID」と「パスワード」を取得する必要があります。

サービスの申し込みは簡単で、「REGISTER」ページにて「名前」「住所」「電話番号」「メールアドレス」の4つの必要事項を入力して申し込むだけです。折り返し登録時のメールアドレス宛に「マスターID」と「パスワード」が送られてきます。

申し込み後のドメイン登録・DNSレコードの設定の流れは「HOW TO USE」のページにてまとめられていますのでご一読下さい。

ログイン後、実際に操作する画面は「DOMAIN INFO」のページになります。
無料のサブドメインを選ぶ場合は、ページ下部にある小さな文字の箇所を確認して下さい。「???」の箇所は、既に他の方に取得されていない限り、自由な英数字を登録することが出来ます。

また、ドメイン登録後、ドメイン名の英字が全て大文字に変換されますが問題ありませんのでそのままで大丈夫です。

独自ドメインを使用する場合

個別に取得した独自ドメインをダイナミックDNSで使用したい場合は、取得したドメイン管理会社にてNSレコードを変更する必要があります。

ここではムームードメインで取得した独自ドメインを使用する場合を説明します。

  1. コントロールパネルにログイン後、左側のメニューより「ネームサーバー設定変更」をクリックします。
  2. 使用したい独自ドメインの「ネームサーバー設定変更」ボタンをクリックします。
  3. 表示されたページの下のほうに「上記以外のネームサーバーを使用する」という項目がありますので、左側のラジオボタンをクリックし、表示された入力欄に
    • ネームサーバー1に「ns0.MyDNS.JP」
    • ネームサーバー2に「ns1.MyDNS.JP」

    を入力します。
    ※ムームードメインはIPアドレスでの登録は出来ません。

  4. ページ最下部の「ネームサーバー設定変更」をクリックします。

設定の切り替えが浸透するまで早くて数時間から、数日かかりますのでご注意下さい。

グローバルIPアドレスを自動的に取得・更新する

設定が完了したら、MyDNS.jp宛に自宅サーバーのIPアドレスを定期的に通知する必要があります。MyDNS.jpでは、

  • IPの通知後5分程度でDNSに反映
  • DNS情報そのものの生成期間は1週間
  • 1週間以上IPアドレス通知が無いとDNS情報生成中止
  • 1ヶ月間全くIPアドレスの更新がない、またはログインも無いという場合は、登録データそのものを破棄

となっていますので、定期的に通知する必要があります。

ダイナミックDNSに関しては、そのような作業を自動化して行えるフリーのソフト・スクリプトがありますのでそれを使わせていただきます。

ソフト・スクリプトとして有名なのは「DiCE」「ddclient」があります。が、今回は以下の理由により採用を見送りましたorz

  • DiCE:大変便利なスクリプトで、デフォルトでMyDNS.jpに対応しているのですが、残念ながらPPCに対応していません。
  • ddclient:パッケージでインストールでき、PPCも対応していますが、MyDNS.jpにはデフォルトでは対応していません。対応するにはスクリプトを改造する必要があります。

上記2つのスクリプトに関しては、文末の参考サイト様にリンクを掲載していますので宜しければご参照下さい。

当初ddclientを採用しようかと思いましたが、スクリプトの改造が面倒そうだったため、「定期的に」「動的IPを取得し」「通知する」「フリー」のスクリプトが無いか探してみたところ、ありがたい事にありましたのでそちらを使わせて頂きました。

スクリプトについて

上記サイト様より各スクリプトをダウンロードします。
こちらのスクリプトを用いて、MyDNS.jpに「Basic認証」にて動的IPアドレスの通知を行います。
DDNS更新スクリプトは「ddns.sh」、IPチェックスクリプトは「ip.sh」が必須で、環境に応じてIPチェックスクリプト同梱のスクリプトを幾つか使う形になります。

[html]#上記スクリプトの動作には「root権限」「cron」「wget」が必須です。スクリプトはrootディレクトリに配置します。

sudo -s #←一時的にスーパーユーザー権限で操作するコマンド
cd /root #←rootディレクトリに移動します

#DDNS更新スクリプトをダウンロードします
wget http://kuro.crow2.net/script/data/ddns.tar.gz
tar -xvzf ./ddns.tar.gz
mv ddns/ddns.sh ./
#↑必要なファイルをrootディレクトリに移動
rm -rf ddns.tar.gz ddns/
#↑不要になったファイルとディレクトリを削除

#事前にwgetのパスを調べておきます
whereis wget
wget: /usr/bin/wget

#ダイナミックDNS用スクリプトを編集します
nano ddns.sh

#which wget
wget=/usr/bin/wget #←上記コマンドで調べたwgetのパスを入力

#updata DDNS
#MyDNS.jp以外の箇所を全てコメントアウトします

#mydns.jp
#tempの行に書かれている[username]を「取得したマスターID」に、[passwd]を「設定されたパスワード」に置き換えます([]は不要)
#sleep 1の表記は必ず残しておいて下さい

#ddns.shを保存します。
#ddns.shのパーミッションを変更します。
chmod 700 ddns.sh

#次に高頻度IPチェックスクリプトをダウンロードします。
wget http://kuro.crow2.net/script/data/ip.tar.gz
tar -xvzf ./ip.tar.gz[/html]

ip.tar.gzファイルを解凍すると様々なファイルが出てきます。主に以下の3ケースによって使用するスクリプトが分かれます。

  1. グローバルIPアドレスをチェックするCGIを外部Webサーバーに配置してそれを参照する
  2. グローバルIPアドレスをチェック出来るサービスサイトにアクセスして参照する
  3. ルーターにアクセスしてグローバルIPアドレスをチェックする

一番いいのは3です。但し、同梱されているスクリプトがルーターに対応している必要があります。私の環境ではそのままか、少しスクリプトを改造すればいけそうでしたが、今回は採用を見送りました。
次に楽なのは2ですが、外部サービスを利用するのであまり推奨されてはいません。

というわけで私は1の方法を採用することにしました。
ここでは「1」と「2」の方法を解説します。
※3の方法については文末の参考サイト様のページとスクリプトを参照して下さい。

1.CGIスクリプトを使用する場合

事前にCGIが動作可能なレンタルサーバーやWebスペースを確保して下さい。プロバイダーが提供しているWebスペースでCGIが動作すれば一番楽かと思います。
無料レンタルサーバーなどは広告表示が必須のところがほとんどなのでオススメ出来ないのが現状です(利用規約に抵触するので)
その場合は、あまり推奨されませんが外部チェックサービスを利用することになります。

私はCGIが動作するWebスペースを持っていましたのでそちらを利用することにしました。

[html]※ip.tar.gzの解凍後の作業になります。
pwd
/root #←現在のディレクトリが/rootになっているか確認
mv ip/ip.sh ip/ip.cgi ip/getip.sh ./
#↑必要なファイルをrootディレクトリに移動
rm -rf ip.tar.gz ip/
#↑不要になったファイルとディレクトリを削除

#IP取得スクリプト(getip.sh)などを置く場所を作成します。
mkdir dat

#getip.shをdatディレクトリに移動します
mv getip.sh dat/

#ここでip.cgiを管理人のホームディレクトリに移動します
mv ip.cgi /home/ユーザー名
chown ユーザー名:ユーザー名 /home/ユーザー名/ip.cgi

#FTP等でip.cgiをクライアントPCにダウンロードし、CGIが動作する外部レンタルサーバーまたはWebスペースにアップします
※アップする際にはCGIファイルのPerlのパスと実行権限を確認して下さい。

#実際にアップしたip.cgiにアクセスして、IPアドレスが表示されるかどうかチェックします。
http://***.***.***/ip.cgi
#無事CGIが動作したら、そのCGIのURLを控えておきます。

#再び端末に戻り、getip.shファイルを編集します
nano dat/getip.sh

#which wget
wget=/usr/bin/wget #←wgetのパスを入力

#getip.shを保存します。
#getip.shのパーミッションを変更します。
chmod 700 dat/getip.sh

#getip.shを端末上で実際に実行して、グローバルIPを取得できることを確認します。
sh /root/dat/getip.sh http://***.***.***/ip.cgi[/html]

上記スクリプト実行にて取得したグローバルIPが、外部のIPチェックサービスでのそれと一致しているか確認して下さい。当サイトでは株式会社シーマン様の「アクセス情報【使用中のIPアドレス確認】」を利用させて頂きました。

[html]#ip.shを設定します
nano ip.sh

#!/bin/bash
#↑1行目の「#!/bin/sh」の表記を変更して下さい。当サーバーではこちらに変更しないと上手く動作しませんでした。

#   ex) getip[0-9]=/hoo/bar/hoge.sh
#↑上記の1行を削除して下さい(実行時にエラーになります)

getip0=’/root/dat/getip.sh http://***.***.***/ip.cgi’
#↑getip.shを使用するので、引数に外部に設置したIP確認用CGIのURLを指定し、全体をシングルクォーテーションで囲みます。

#which DDNS update script
ddns=/root/ddns.sh
#↑ddns.shスクリプトの場所を指定します。

#IP cache file
oldip=/root/dat/ip.db

#Log file
logtxt=/var/log/ip.log

#Lock file
lock=/tmp/ip.lock

#↑上記3ファイルの場所を確認しておきます。この内ロックファイル以外は後で新規作成します。

#ip.shを保存します。
#ip.shのパーミッションを変更します。
chmod 700 ip.sh

#IPアドレスのキャッシュファイル、ログファイルを作成します。
echo -n test >/root/dat/ip.db
touch /var/log/ip.log

#端末上でip.shを実行し、エラー無く実行されアドレスが変更されているか確認します。
sh /root/ip.sh
cat /root/dat/ip.db
cat /var/log/ip.log
#もしエラーが表示された場合、ip.shの後半部分と照らし合わせながらチェックしてみて下さい。

#最後にcronに登録し、定期的に実行させます。
crontab -e
*/30 * * * * /root/ip.sh
02 6 * * * /root/ddns.sh
#ip.shは30分毎に実行し、ddns.shは毎日1回、6時2分に実行します。
#ip.shは外部サーバーなので、高頻度にアクセスしないようにしました。

exit
#sudo -sを終了し、一般ユーザーに戻ります。[/html]

2.外部サービスサイトを利用する場合(あまり推奨しません※当サイトでは未確認です)

ddns.shに関しては1とまったく同じです。ip.tar.gzに関しては解凍後の処理を以下のようにします。

[html]#既にsudo -sでスーパーユーザー権限にて作業している前提で説明します。

tar -xvzf ip/omake.tar.gz
mv ip/ip.sh ip/ip.cgi omake/get_dyndns.sh ./
#↑必要なファイルをrootディレクトリに移動
#「get_dyndns.sh」は世界的に有名なダイナミックDNSサービス「dyndns.org」内のIPチェックページを利用してグローバルIPを取得するスクリプトです。

rm -rf ip.tar.gz ip/ omake/
#↑不要になったファイルとディレクトリを削除
mv get_dyndns.sh getip.sh
#↑ファイル名をリネーム

#IP取得スクリプト(getip.sh)などを置く場所を作成(1と同じ)。
mkdir dat
#getip.shを datディレクトリに移動します(1と同じ)
mv getip.sh dat/

#getip.shを端末上で実際に実行して、グローバルIPを取得できることを確認します。
sh /root/dat/getip.sh
#端末上にxxx.xxx.xxx.xxxと表示されればOKです。

#このケースの場合、ip.cgiを設置する必要はありません。
1.におけるip.shの編集過程において、
getip0=’/root/dat/getip.sh http://***.***.***/ip.cgi’
を、
getip0=’/root/dat/getip.sh’
に変更して下さい。
他は1と同じ作業でOKのはずです。[/html]

実際に反映されているか確認する

スクリプトを稼働させたら、MyDNS.jpにログインして「LOG INFO」ページを開いて確認します。きちんと動作していたら下記のようなログが書き込まれます。

[html][20xx/xx/xx xx:xx:xx]MyDNS.JP IpInfo Update! from HTTP-BASIC (xxx.xxx.xxx.xxx)[/html]

参考サイト様

「ダイナミックDNSの設定」への1件のフィードバック

  1. ピンバック: 定期ログ管理について « SkyGarden出張所

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA