ようこそNICのホームページへ(なが〜い試運転中)    あなたは2001/5/12以来 人目の来訪者です。
HP パソコン 健康 落語 海外 思うまま 電子工作


Freebsd上でniftyのダイナミックDNSを自動更新する
Last update:2008/08/20  build:2008/06/21


ダイナミックDNSを利用している。IPアドレスの更新に
Freebsd上でDiCEとPerlを使っている。
ddo!jpはDiCEで
niftyはPerlで更新している。
Perlのスクリプト(2008/8/19修正)crontabの例です。
なお、このページからのリンクはリンク先の了解を得ていません。
ご都合が悪ければ、消去します。


環境は以下のとおり
PC:VersaPro VA70J/WXA (M Pentium3 700MHz,Memory=256MB,HDD=20GB)
OS:Freebsd 6.1
     :Linux linux_base-8-8.0_14
DiCE:diced01913.tar.gz(Linux 版)
Perl:perl-5.8.8
wget:wget-1.10.2
Openssl:OpenSSL 0.9.7e-p1 25 Oct 2004



以下は試行錯誤の経緯です。興味があれば見てください。


もともとパソコン通信時代からniftyを利用していたので、
niftyのDDNSが利用できれば良いと言うことで申し込んだ。
IPアドレスが変わった場合も自動的にnifty側で更新してくれるものと思っていた。
そのためのDDNSだろうと。


ところが、全く違っていて自分で更新しなければならない。
そのために便利な自動更新ソフトDiCEがあることがわかった。
それはWINDOWS版である。WINDOWSは常時立ち上げていない。

私のサーバーは、Freebsdで動いているのでこの上で動くものが欲しい。
DiCEのlinux版があることがわかったのでこれを使わせてもらおう。

Freebsdにlinuxカーネルを導入。これはすんなりいった。
DiCEのlinux版を導入。導入といっても展開するだけ

まくいかない!!!


googleでいろいろ調べたが、どうもうまく行かない。
linux版DiCEがうまく行ったという事例の報告はあるが、私のように、
Freebsd+DiCE+niftyの例はない。


一時、niftyを使うことをあきらめ、ddo!jpを申し込む。
Freebsd上にlinulカーネルを入れることで
DiCEが動いた。ddo!jpのIPアドレスも更新されることを確認した。
これが約2年前(2006年8月頃)

その後もgoogleで調べていたが
Freebsd(linuxカーネル)+DiCE+nifty以外、はあった。
たとえば
Freebsd(Linux)+DiCEだがうまく動かなかったとのこと
 sasapurinさんのページ

Linux+DiCEは
 Linuxで自宅サーバーさんのページ

Freebsd+DiCEでうまく行った例。但しniftyはだめとのこと。
物理おもしログさんのページ

niftyにはopensslが必要とのこと。しかもシンボリックリンクをきちんと張ること。でもだめとのこと。
横浜で働くシャカイジンさんのページ


これらを参考にいろいろやってみたがやはりFreebsd上のDiCEでniftyのddnsを更新することはできなかった。
ddo!jpはFreebsd上のDiCEでIPアドレスの自動更新ができたのに??。

私もOpensslのシンボリックリンクを確認した。問題はなかった。



あきらめてPerlを使って変更することにした。googleで調べて使えるとおもったのが
sous le grand arbreさんのページ
しかし、何故かそのままではうまく行かない。
niftyはsslを使ってないのだろうか?結局wgetのオプションに`--no-check-certificate'をつけてうまく更新できるようになった。
Perlのスクリプト

−− 以下 2008/8/19に追加 −−
その後、--no-check-certificateを付けなかった時のエラーメッセージをふと思い出した。
--no-check-certificateを付けろとのメッセージであり、サーバー認証をやめるよう提案しただけで、
--secure-protocol=autoを取るようにとのメッセージではなかった。そこでIPアドレス変更の際のwget文に--secure-protocol=autoを
追加した。Perlのスクリプト(2008/8/19修正)
うまく行った。
−−−−− ここまで(2008/8/19追加) −−−−−

コマンドラインからは更新できるようになったが、cronからの自動更新がうまくいかない。

わかったこと
その1:crontab内ではpathが通っていないので、必要なものすべてにpathを通す。例:wgetにも必要。
その2:'root: not found'というエラーがでる。これはcrontabのなかのオーナーにrootとかいてあることによる。
    オーナー名(whoの欄)であるrootをプログラム名と勘違いしてエラーがでる。
    システムが実行するcrontab以外ではたとえrootが実行するcrontab内のプログラムでもオーナー名は不要。
    rootを消すことでうまく動いた。crontabそのものがオーナーごとになるようだ。
その3:cronで動かしていると、時々wgetによる新しいIPアドレスの取得がうまく行かないようだ。
    新しいIPアドレスにヌルコードが入る。この場合古いIPアドレスと比べて更新されたと
    判断されて、ヌルコードを新しいIPアドレスとして更新するように動くようだ。
    プログラムを一部修正し、新しIPアドレスがヌルの場合、古いIPアドレスを新しいIPアドレスに
    代入するように変更した。



パソコンのことへ     HomePage     このページのトップ