◆ Linuxサーバの構築 ◆
TOP Main SSH HTTP SMTP FTP DDNS その他 掲示板

ダイナミックDNS(DDNS)とは、ホスト名に対応するIP アドレスを動的に変更する仕組みです。

従来、サーバを公開するには固定のグローバルIPとドメイン名の取得が必要で、 動的なIPアドレスで個人ユーザがインターネットへサーバを公開することは困難でした。
しかし、ダイナミックDNSの出現により誰でも簡単に個人サーバを公開することができるようになりました。
ただし、IPアドレスの変更時にサーバへ通知する必要があります。

ダイナミックDNSの解説およびサービス一覧は「DiCE DynamicDNS Client (自宅でインターネットサーバー)」をおすすめします。 また、このサイトではDynamicDNS Client Tool「DiCE」を配布しています。Windows版のほかにLinux版(現在はベータ版)もあります。

ここでは、当サイトで使用させていただいているDynamic DO!.jp家サーバプロジェクトおよびno-ipへのDDNS更新方法を例に説明します。

■家サーバプロジェクト編
GnuDIP (Command-line Client Only)よりgdipc.plをdownloadします。
# cd /usr
# mkdir -p ddns
# cd ddns
# wget ftp://ftp.cheapnet.net/pub/gnudip/gdipc.pl

各種設定を行います。
# perl gdipc.pl -c
 Changing prefernces:
  New Username:
hoge
  New Password:
****
  New Password Again:
****
  Domain:
dip.jp
  New GnuDIP Server:
ieserver.net


(ユーザー名)
(パスワード)
(パスワード再入力)
(選択したドメイン名)
(DNSサーバーのドメイン名)

これでDDNSへの登録処理は行えるのですが、このままではgdipc.plの起動時に毎回登録してしまいます。
DDNSサーバの負担を減らすためにIPアドレスの変更時のみ登録するようにスクリプトを作成します。
# vi ipchk.pl
#!/usr/bin/perl
#
$CRT_IPF = '/usr/ddns/CRT_IP.dat';
$NEW_IPF = '/usr/ddns/NEW_IP.dat';
$LOG = '/var/log/ddns.log';

open INPUT,"$CRT_IPF";
$CRT_IP=<INPUT>;
close INPUT;

system("w3m -dump_source
http://checkip.dyndns.org/ | grep Address >$NEW_IPF");
open(INPUT,$NEW_IPF);
$c = <INPUT>;
$stp = index($c,"
Address")+9;
$edp = length($c)-
1;
$NEW_IP = substr($c,$stp,($edp-$stp));
close(INPUT);

if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) {
        open (OUTPUT ,">$CRT_IPF");
        print OUTPUT $NEW_IP;
        close OUTPUT;

        print "IP Address update: $CRT_IP to $NEW_IP\n";
        system("/usr/ddns/gdipc.pl -f /usr/ddns/.GnuDIP2");

        $now_string = localtime;
        open (OUTPUT ,">>$LOG");
        print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n";
        close OUTPUT;
}
上の例ではdyndns.orgのIPチェックを使用していますが、ルータの監視画面等からグローバルIPアドレスを取得したほうがよいかもしれません。
ほとんど、赤字部分の修正だけで行えると思います。

あとはcrontabを編集して定期的にipchk.plを起動するように設定します。
# vi /etc/crontab
# DDNS
*/
30 * * * * root perl /usr/ddns/ipchk.pl
00 5 * * 0 root rm -f /usr/ddns/CRT_IP.dat
上記設定では、30分毎にIPアドレスの変更をチェックし、変更された時にDDNSサーバに対しIPアドレスの更新を行います。
また、日曜日の午前5時にCRT_IP.datを強制削除することにより、次のチェックタイミングで自動更新を行います。

■Dynamic DO!.jp編
Dynamic DO!.jpへの更新は特殊なプログラムが必要ないのでとても簡単に行うことが出来ます。
Dynamic DO!.jpは自動オフライン機能を提供しているので、オフライン時に他のサイトに転送したい時は、 crontabを編集し一定間隔に更新を行います。
# vi /etc/crontab
# DDNS Dynamic DO!.jp Update
3 */2 * * * root wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード'
上記設定では、「自動オフライン時間」を2時間に設定した時に、2時間毎にDynamic DO!.jpのDDNSサーバに対しIPアドレスの更新を行います。
サーバがダウンしている時は上記更新が行われない為、「オフライン転送URL」に設定したURLに転送されます。

自動オフライン機能を使わない場合は、DDNSサーバの負担を減らすためにIPアドレスの変更時のみ登録するようにした方がよいでしょう。
上記「家サーバプロジェクト編」と同様にスクリプトを作成します。
# cd /usr
# mkdir -p ddns
# cd ddns
# vi ipchk.pl
#!/usr/bin/perl
#
$CRT_IPF = '/usr/ddns/CRT_IP.dat';
$NEW_IPF = '/usr/ddns/NEW_IP.dat';
$LOG = '/var/log/ddns.log';

open INPUT,"$CRT_IPF";
$CRT_IP=<INPUT>;
close INPUT;

system("wget -q -O $NEW_IPF http://info.ddo.jp/remote_addr.php");
open(INPUT,$NEW_IPF);
$c = <INPUT>;
$c = <INPUT>;
$stp = index($c,"REMOTE_ADDR:")+12;
$edp = length($c);
$NEW_IP = substr($c,$stp,($edp-$stp));
close(INPUT);

if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) {
        open (OUTPUT ,">$CRT_IPF");
        print OUTPUT $NEW_IP;
        close OUTPUT;

        print "IP Address update: $CRT_IP to $NEW_IP\n";
        system("wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=
ドメイン&pw=パスワード'");

        $now_string = localtime;
        open (OUTPUT ,">>$LOG");
        print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n";
        close OUTPUT;
}
あとは「家サーバプロジェクト編」と同様にcrontabを編集して定期的にipchk.plを起動するように設定してください。

■no-ip編
no-ipよりLinux用の設定プログラムをDownloadし、展開します。
# cd /usr/local/src
# wget http://www.no-ip.com/client/linux/noip_updater_v1.6.tar.gz
# tar -xvzf noip_updater_v1.6.tar.gz

makeを行います。
# cd noip_updater_v1.6
# make

各種設定を行います。
make confで設定してもよいのですが、ここではno-ip.confを直接編集します。
# cp no-ip.conf.sample no-ip.conf
# vi no-ip.conf
LOGIN = root@hohe.hoge.com
PASSWORD =
*******
GROUP = ;

HOSTNAME =
hoge
DOMAIN =
no-ip.com
DAEMON = Y

PROXY = N
INTERVAL =
10
NAT =
Y
DEVICE = unused
(登録したメールアドレス)
(パスワード)
(グループを使用しているときはグループ名)
(ホスト名)
(選択したドメイン名)
(DAEMONで動かすかどうか)
(PROXYを使用するか)
(IPアドレスのチェック間隔)
(NATを使用するか。ルータ未使用時はN)
(使用するデバイス名:ppp0等)

インストールを行います。
# make install

最後に自動起動の設定を行います。
# vi /etc/rc.d/rc.local (最後の行に以下を追加します)
/usr/local/bin/noip
chkconfigに対応させたい時は、上記編集は行わず、以下のファイルを作成してください。
# vi /etc/rc.d/init.d/noip
#! /bin/sh
#
# no-ip
#
# chkconfig: 2345 99 80
#
# description: no-ip.com dynamic IP update client for Linux. 
case "$1" in
        start)
                echo "Starting noip."
                /usr/local/bin/noip
                ;;
        stop)
                echo -n "Shutting down "
                killproc noip
                echo "."
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
                exit 1
esac
exit 0
# chmod 755 /etc/rc.d/init.d/noip
# chkconfig --add noip

Top Page