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>"