ZCR/bLOG


[Net] DiCE on FreeBSD

2009年10月19日 23時 更新

そーいう わけ で、ダイナミックDNSに対応しなければならなくなった ZCR.JP である。

ZCR.JPは今まで固定IPアドレスで運用してきた。しかし、このサービス料金はやはり高い。
それで、通常の個人向け接続サービスに乗り替えることとなったわけだが、当然ながら接続の度にプロバイダから割り当てられるIPアドレスは変動してしまうことになる。しかも接続してみなければどんなアドレスが割り当てられたか判らない。

割り当てられたアドレスの変動を検出し、ダイナミックDNSサーバに現在の www.zcr.jpのアドレスを教えてあげなくてはならないのだが、これを自動でおこなってくれるのがダイナミックDNSクライアント・ソフトの DiCE である。


DNSクライアント・ソフトについては、Windows用のものはDDNSサービス業者が用意してくれているが、UNIX系ホスト用のものはない。当然業者側から提供があると思っていたのだが甘すぎた。

Netを探索してみると DiCE がほとんど定番といわれているらしい。
DiCEにはWindows版とLinux版があるものの(当然)FreeBSD*1版は無い。しかし、FreeBSDのLinuxエミュレーションで動いてるという報告も複数あり、なんとかなるのではないかという気がしてきた。

まず、DiCE for Linux をダウンロードし、/usr/local/bin/DiCE に展開。


cd /usr/ports/emulators/linux_base-f8/ して make install

当初、compat.linux.osrelease: 2.4.2 is not supported. というエラーでコケたので、/etc/make.confOVERRIDE_LINUX_BASE_PORT=f8 という記述を追加(最終的には、OVERRIDE_LINUX_NONBASE_PORTS=f8 も追加)し、sysctl compat.linux.osrelease=2.6.16 を実行後 linux_base-f8を make installした。

kldload linux するか、rc.conflinux_enable="YES" と記述して再起動し、

/usr/local/bin/DiCE/diced

これで、とりあえず DiCEは動き、CLIでの設定も快調に終えることができた。
「IPアドレスの検出をテストしますか? (Y/N)」の局面でYを打つと、「検出IPアドレス>www.xxx.yyy.zzz」と返ってくる。もちろん、割り当てられている正しいアドレスだ。
このアドレス検出は、外部サイトのスクリプトにHTTPでアクセスしてリモートアドレスを取得してるようだ。


さて、ここまでならどこか他のサイトにも同じようなことが書いてあると思う。

しかしイベントの設定は完了しても、実際のDDNSサーバへの接続局面で「Error: サーバーに接続できませんでした」というメッセージを吐き、イベントの実行に失敗してしまうのである。

tcpdump等で調べてみると、接続しに行ってDDNSサーバ側に拒否されているとかではなく、なにも送信していない。
自前IPアドレスの検出には成功しているから、通信自体はできていることになる。いったい何が原因だ??

もしかして、SSLか!?・・と、思い当たったとき、既にMidnightは遙か彼方・・・・
で、再び DiCE for Linux のサイトをチェックしてみると、「一部のサービス("@nifty"や"DION"ほか)を利用する場合は OpenSSLのライブラリがが必要 となります。libssl.solibcrypto.so」と、ちゃんと注意書きがあるではないか。(^^;)


cd /usr/ports/security/linux-f8-openssl して make install

しかる後、シンボリックリンクを作っておく。

ln -s /usr/compat/linux/lib/libssl.so.0.9.8b /usr/compat/linux/lib/libssl.so
ln -s /usr/compat/linux/lib/libcrypt-2.7.so /usr/compat/linux/lib/libcrypt.so

CLIから ex 0 でイベント実行させると、無事「IPアドレスを更新しました」と出た。

あとは、計算機の起動時にDiCEも自動起動させ、デーモンとして実行させればよい。ZCR.JPでは、Apacheの起動スクリプトに次のように継ぎ足した。

/usr/local/apache2/bin/apachectl start && echo -n ' Apache2'
sysctl compat.linux.osrelease=2.6.16
/usr/local/bin/DiCE/diced -d -l && echo -n ' DiCE'

dicedの前に sysctlが実行されていないと、dicedの起動に失敗するので注意。

うーむ、久々に徹夜寸前まで行ったけど、なんとかなったよ。(^o^;)

*1 7.1-RELEASE

Tada/JA7KPI : 2009年10月19日(月)

«ネットワーク変更 最新 そろそろ冬»
編集