2009年09月30日

サーバー作業の覚書

 ダイナミック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.jp
 
EoEXAMPLE
}
######################################################################
## 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=300
syslog=yes
pid=/var/run/ddclient.pid
use=web, web=checkip.dyndns.org/, fw-skip='IP Address'
 
protocol=mydns
server=www.mydns.jp
login=xxxxxxxx
password=********
wildcard=yes
max-interval=1d
mgfcompany.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サービスにログインして
更新ログかなんかを確認してくださいませね。

posted by 難波鷹史 at 21:59| 京都 ☔| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック