dyndnsでドメイン構築

ドメインとは

サーバにアクセスする為にはIPを知らなくてはアクセスできません。IPアドレスは覚えにくい為、人間に覚えやすくする為に名前をつけてやります。それがドメインになります。このサイトだとnai.homelinux.netがドメインになります。ドメインを使用するにはもう一つの目的があって、回線がADSLを使用していて、IPが動的に変化してしまいます。ドメインは固定ですのでドメインからIPを調べることができ、アクセスできるということです。

ドメインの取得

独自ドメインも一年で千円程で購入が可能ですが、無料でサブドメインが使用できるので今回はサブドメインを使うことにします。家サーバプロジェクトなど日本語のサイトもありますが、今回はdyndnsのダイナミックDNSサービスを使用します。アカウントを作成してサブドメインを取得してください。

サブドメインとは

サブドメインとはある第2オクテッドまで決まっていて、それ以上を自由に決定できるサービスです。このサーバはnai.homelinux.netですが、「homelinux.net」までは決まっていて、それ以上「nai」の部分が自由に決められます。

ダイナミックDNSとは

ダイナミックDNSとはIPアドレスが動的に変化する環境で、DNSのIPを動的に変更できるサービスです。個人でのネットワーク回線の場合は動的IPが割り当てられます。その場合にダイナミックDNSを使用すればドメイン名からIPを調べられます。

ドメイン更新クライアント

ドメイン取得後、dyndnsで公開しているスクリプトをダウンロードし、解凍します。

debian etchでddclientがパッケージに含まれましたがバージョンが3.6.7-2であり、SSL対応は3.7以降です。なのでソースを使うことにします。ソースってもPerlスクリプトだけなのでコンパイルとかしません。

$wget http://www.dyndns.com/download/clients/unix/ddclient.tar.gz
$tar -zxf ddclient.tar.gz

perlモジュールをインスト

設定によりますがSSLを使用する際にはperlのSSLモジュールが必要になります。たぶん、この辺りのパッケージをインストしとけばOKでしょう。

#apt-get install openssl libio-socket-ssl-perl libnet-ssleay-perl libssl0.9.7

ddclientの設定

各種ファイルを配置する

下準備

  • デーモンスクリプトコピー
  • 実行権限付与
  • 起動スクリプトコピー
  • 実行権限付与
  • 設定ファイル格納用ディレクトリ作成
  • 設定ファイルコピー
#cp ddclient-3.7.0/ddclient /usr/sbin/
#chmod 755 /usr/sbin/ddclient
#cp ddclient-3.7.0/sample-etc_rc.d_init.d_ddclient /etc/init.d/ddclient
#chmod 755 /etc/init.d/ddclient
#mkdir /etc/ddclient
#cp ddclient-3.7.0/sample-etc_ddclient.conf /etc/ddclient/ddclient.conf

※root権限で実行してください。ddclientスクリプトは実行の際に権限を確認し、実行権限とファイルの権限が違うとエラー終了してしまいます。

自前の起動スクリプト

ddclientに同封されている起動スクリプトでも問題なく(※)起動するが、ちょっとDebian風な起動の仕方じゃなく気に入らないので自前で作ったスクリプトで起動することにした。こんな感じで作りました。ダウンロードはこちら

※ddclient同封でも自前のスクリプトでも、起動中に再度起動させると2重起動ができてしまう問題があります。2重起動していても問題は無いのですが、リソースの無駄になります。対応はpsコマンドで確認し、都度killコマンド停止させればいいでしょう。

#! /bin/sh
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/ddclient
PIDFILE=/var/run/ddclient.pid

#
OPTION=""

test -x $DAEMON || exit 0

case "$1" in
  start)
    echo -n "Starting ddclient:"
    start-stop-daemon --start --quiet --exec $DAEMON -- $OPTION
    echo "."
    ;;
  stop)
    echo -n "Stopping ddclient:"
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
    echo "."
    ;;
  reload)
    echo "Not implemented."
    ;;
  force-reload|restart)
    sh $0 stop
    sh $0 start
    ;;
  *)
    echo "Usage: /etc/init.d/ddclient {start|stop|restart|force-reload|reload}"
    exit 1
    ;;
esac

exit 0

設定ファイルの編集

/etc/ddclient/ddclient.confを編集。以下アクセスサーバというのはDDNS更新先サーバのことで、得に編集せずコメントアウトのみでOKです。

daemon=300                #デーモンとして稼動させる。稼動間隔秒
syslog=yes                #シスログ出力
mail=root                 #メール送信先
mail-failure=root         #エラー時のメール先
pid=/var/run/ddclient.pid #PIDファイル名
ssl=yes                   #SSLを有効にするか(ドメイン更新時)
〜略〜
use=web, web=checkip.dyndns.org/, web-skip='IP Address' # IPアドレス確認方法
〜略〜
login=*****               #dyndnsのログインID名
password=*****            #dyndnsのログインパスワード
mx=nai.homelinux.net      #メールドメイン名(メールを使用するなら)
backupmx=no               #backupMXの使用有無
wildcard=no               #ワイルドカードの使用有無
〜略〜
server=members.dyndns.org,             \ #アクセスサーバ名(dyndns)
protocol=dyndns2                       \ #プロトコル
nai.homelinux.net                        #ドメイン名

起動スクリプトの配置

各ランレベルのディレクトにリンクを貼る。起動順番はいつでもいいので、defaultにした。

#/usr/sbin/update-rc.d ddclient defaults

起動方法

#/etc/init.d/ddclient start

停止方法

#/etc/init.d/ddclient stop

稼動確認方法

起動スクリプトのstatus引数で確認するかpsコマンドで確認できます。

起動スクリプトで確認

#/etc/init.d/ddclient status
ddclient (pid 22500) is running

psコマンドで確認

#ps -e | grep ddclient
22570 pts/0    00:00:00 ddclient

メール内容

ddclientはIPアドレスを一定間隔で確認し、変更していたらDNSレコードの更新する。更新時やエラー時にメールを送信する。以下がそのメールの内容だぁ

更新時

IPアドレスを更新した時

 
 
 SUCCESS:  updating nai.homelinux.net: good: IP address set to ***.***.***.***
 
 
 regards,
    ddclient@nai.homelinux.net (version 3.7.0)

終了時

killした時のメール

 
 
 WARNING:  caught SIGTERM; exiting
 
 
 regards,
    ddclient@nai.homelinux.net (version 3.7.0)

エラー時

ネットワーク停止などで、外へアクセスできない時

 
 
 WARNING:  cannot connect to checkip.dyndns.org:80 socket: IO::Socket::INET: Bad hostname 'checkip.dyndns.org'
 
 
 regards,
    ddclient@nai.homelinux.net (version 3.7.0)

cronで起動させたい

デーモンといえど、ただsleepさせてるだけなのでリソースの無駄かもしれません。cronも動いているなら、使った方が賢明?と思う方にもちゃんと、ddclientのソースにcronのサンプルが同封しています。

cron設定

サンプルをコピーして編集です。

cp ddclient-3.7.0/sample-etc_cron.d_ddclient /etc/cron.d/ddclient

こんな感じに2行コメントアウトしてあげればOKです。

######################################################################
## ddclient is an IP address updater for www.dyndns.org
## $Id: sample-etc_cron.d_ddclient 10 2006-06-14 19:59:31Z wimpunk $
######################################################################
## minute         0-59
## hour           0-23
## day of month   1-31
## month          1-12 (or names, see below)
## day of week    0-7 (0 or 7 is Sun, or use names)
######################################################################
## force an update twice a month (only if you are not using daemon-mode)
##
30 23 1,15 * *       root    /usr/sbin/ddclient -daemon=0 -syslog -quiet -force
######################################################################
## retry failed updates every hour (only if you are not using daemon-mode)
##
0 * * * *    root    /usr/sbin/ddclient -daemon=0 -syslog -quiet retry

もし、上記で起動スクリプトを配置しているなら停止して以下のコマンドでリンクを削除し自動起動をしない様にしてください。2重で動いてしまうので。

update-rc.d -f ddclient remove

cron再起動

一応、再起動させておきました。

/etc/init.d/cron restart

MXレコードについて

dydns導入当初はMXレコードが設定できなかったのですが、2007/8/28現在WEBから設定できるようになりました。ですが、ddclientの最新版3.7.3でもうまく更新されない(WEB登録してもddclientで更新するとMXレコードがデフォルト値(無し))状態になってしまった。

dydnsのサイトをみたら、HTTPのリクエストでMX=NOCHGとやれば設定は変わらないと書いてあったので一度WEBで登録して、ddclientで更新する際にはNOCHGを使う設定にします。定義ファイルでmx=NOCHGと書くと書式をチェックしていてエラーになり無視されてしまいます。なのでddclientスクリプトを以下の様に修正します。

    'mx'                 => setv(T_OFQDN,  0, 1, 1, '',                  undef)

を以下に変更。FQDN形式をANYにすることでチェックから外す。

    'mx'                  => setv(T_ANY,  0, 1, 1, '',                  undef),

AtermモデムからIPを確認する

現状の設定だと、checkip.dydns.orgからIPをチェックしている状態になっている。ルータで確認できるのでルータでチェックする設定に変更した。

use=web, web=checkip.dyndns.org/, web-skip='IP Address'

下に変更する。***は各自で変更。

fw-login=***, fw-password=***,
use=fw, fw=192.168.0.1/info_main.html, fw-skip="WAN側 IPアドレス</LABEL></TD>\n    <TD>"

debian Valid HTML 4.01 Strict [VALID RSS!]