サーバー作業の覚書
ダイナミックDNSにIPを通知するddclientというプログラムを 自宅サーバーと知り合いん家のサーバーに入れました。 これまでWindows機を立ち上げて、定期的にDICEを実行させて、通知していましたが、外出中にIPが変わったりすると、どうにもならなかったのでその機能自体をサーバーに持たせようというわけです。 まずは sourceforge.net でDdclientをダウンロード。 ftpで転送してもいいし、サーバー機にログインしてプログラムをゲットしてもいい。 Linuxならダウンロードしたいディレクトリに移動してから「wget」コマンドで$ wget http://jaist.dl.sourceforge.net/project/ddclient/ddclient/ddclient-3.8.0/ddclient-3.8.0.tar.gzを入力してEnter。 FreeBSDなら 「fetch」コマンドでOK。$ fetch http://jaist.dl.sourceforge.net/project/ddclient/ddclient/ddclient-3.8.0/ddclient-3.8.0.tar.gz 3.8.0はバージョン番号です。現在は変わってるかもしれないのでご注意を。・まずは、コンフィグファイルの置き場所を作りましょ。 $ mkdir /etc/ddclient・ダウンロードしたファイルを解凍しましょ。 $ tar xvfz ddclient-3.8.0.tar.gz・解凍したディレクトリーに移動します。 $ cd ddclient-3.8.0・起動と停止のスクリプトをコピーしましょ。$ cp sample_etc_rc.d_init.d_ddclient /etc/init.d/ddclient.sh FreeBSDの場合はこう。$ cp sample_etc_rc.d_init.d_ddclient /etc/rc.d/ddclient.shこれでコピー元のファイルが「ddclient.sh」という名前でコピーされます。 えっと、このコピーするスクリプトの中には同じLinuxでも「redhut」とか「ubuntu」用とかが同じディレクトリーにあるんですけど、今回はdebianとFreeBSDなのでとりあえず無印を試しました。といっても「ubuntu」は「debian」をもとに開発されたみたいなので、こっちでもいいのかもしれません。 あと、わたしの・・・もとい知人のFreeBSD7.0環境では、起動スクリプトが動きませんでした。 起動スクリプトの最初にある #!/bin/bath を #!/bin/sh に変更しておきます。 といっても、シェルをインストールしておけば動くとは思いますが・・・。ほかのredhut用とかは #!/bin/sh になってたけど・・・。まあいいか、スクリプトはまだ良く分かりませんわ。 詳しい人、情報くださいませ。・MyDNSに対応させるため実行スクリプトを改変 PC総合研究所さんの記事を参考にしました。 まずテキストエディターでddclientを開きます。 $ vi ddclient で、××××-common-default の記述ブロックが連続しているところを見つけ出しで他のブロックと同じように下記の記述を追加します。 'mydns-common-defaults' => { 'min-interval' => setv(T_DELAY, 0, 0, 1, interval('30s'), 0), 'max-interval' => setv(T_DELAY, 0, 0, 1, interval('3d'), 0), 'server' => setv(T_FQDNP, 1, 0, 1, 'www.mydns.jp', undef), },次に 'sitelutions' => { 'updateable' => undef, 'update' => \&nic_sitelutions_update, 'examples' => \&nic_sitelutions_examples, 'variables' => merge( { 'server' => setv(T_FQDNP, 1, 0, 1, 'www.sitelutions.com', undef) }, { 'min-interval' => setv(T_DELAY, 0, 0, 1, 0, interval('5m')),}, $variables{'service-common-defaults'}, ), },のような記述の最後にもmydns用の追加を行います。 'mydns' => { 'updateable' => undef, 'update' => \&nic_mydns_update, 'examples' => \&nic_mydns_examples, 'variables' => merge( $variables{'mydns-common-defaults'}, $variables{'service-common-defaults'}, ), }, 次にこのファイルの一番最後の部分に下記の記述を追加 ######################################################################## nic_mydns_examples######################################################################sub nic_mydns_examples { return <<eoexample;o 'mydns'The 'mydns' protocol is used by DNS service offered by www.mydns.jp.Configuration variables applicable to the 'mydns' protocol are: protocol=mydns ## server=fqdn.of.service ## defaults to dynamicdns.park-your-domain.com login=service-login ## login name and password registered with the service password=service-password ## fully.qualified.host ## the host registered with the service.Example ${program}.conf file entries: ## single host update protocol=mydns, \ login=my-mydns.jp-login, \ password=my-mydns.jp-password \ myhost.mydns.jpEoEXAMPLE}######################################################################## nic_mydns_update#### Original code by Dan Boardman## Modified for MyDNS.jp by ta-ta########################################################################sub nic_mydns_update { debug("\nnic_mydns_update -------------------"); ## update each configured host foreach my $h (@_) { info("setting IP address to %s for %s", $ip, $h); verbose("UPDATE:","updating %s", $h); my $url; $url = "http://$config{$h}{'server'}/login.html"; my $reply = geturl(opt('proxy'), $url, $config{$h}{'login'}, $config{$h}{'password'});# my $reply = geturl(opt('proxy'), $url); if (!defined($reply) || !$reply) { failed("updating %s: Could not connect to %s.", $h, $config{$h}{'server'}); last; } last if !header_ok($h, $reply); my @reply = split /\n/, $reply; if (grep /login_status = 1/i, @reply) { $config{$h}{'ip'} = $ip; $config{$h}{'mtime'} = $now; $config{$h}{'status'} = 'good'; success("updating %s: good: IP address set to %s", $h, $ip); } else { $config{$h}{'status'} = 'failed'; warning("SENT: %s", $url) unless opt('verbose'); warning("REPLIED: %s", $reply); failed("updating %s: Invalid reply.", $h); } }}######################################################################以上、ファイルを保存して完了です。・コンフィグファイルを作る テキストエディターでファイルを新規作成 $ vi /etc/ddclient/ddclient.conf 以下のように記述する。daemon=300syslog=yespid=/var/run/ddclient.piduse=web, web=checkip.dyndns.org/, fw-skip='IP Address'protocol=mydnsserver=www.mydns.jplogin=xxxxxxxxpassword=********wildcard=yesmax-interval=1dmgfcompany.net ログインとパスワードはmydnsのウェブページにログインするときと同じIDとパスになります。 use=から続く記述はIPのチェック方を指定するようで、今回はウェブサイトを使ったIP確認法を取っているようです。 max-interval は IPの更新がないときでも1日置きに通知する設定です。 mgfcompany.net のところは環境にお使いのドメイン名に合わせて変更してください。 wildcard=wes のところはドメイン名の前にどんなホスト名が来ても対応させる設定です。・起動チェック $ ddclient -daemon=0 -debug -verbose -noquiet これでずらずらーってウェブ対応のHTMLソースが表示されて、最後にsuccess: update ******.***: good: IP address set toとでてたら、まぁだいたい動いていると思います(無責任)。・実行スクリプトをしかるべき場所に置く。 $ cp ddclient /usr/sbin/・いよいよ起動 debianの場合 $ /etc/init.d/ddclient.sh start FreeBSDの場合 $ /etc/rc.d/ddclient.sh start・止める場合 上のstartをstopにして実行。・リブート時に自動起動させる場合 debianの場合 update-rc.d ddclient.sh defaults 99 1 これでRUNレベルの/etc/rc[0~6].d/にシンボリックリンクが自動で作られて、自動実行されるようになります。 FreeBSDの場合 起動停止ファイルを/etc/rc.dディレクトリーに置くだけみたいなので、なにもしなくて大丈夫。 ・動かない場合 起動停止ファイルのパーミッションが755になっているか確認してな。 実際に起動して効力がでているかは、Mydns等のDDNSサービスにログインして更新ログかなんかを確認してくださいませね。</eoexample;