ndyndnsを試す

とある思いつきから、Linuxマシンをつくって、DynDNSを試している。
プロバイダはある時間ごとにグローバルIPを変えているので、DynDNSへのIP登録を更新しなきゃいけないのだが、それを一定時間ごとに更新してくれるツールがあり、それはDynDNSサイト内にリストアップされています。

その中で、Linux用で、Certifiedされているのがndyndns。これを試す顛末をメモしておきます。

ダウンロード

上記サイトからダウンロードして展開します。

tar xvzf ndyndns-1.12.tar.gz

手動でインストールしてみる

展開して出来たディレクトリの中にあるREADMEを読みながらインストール開始。
しかし、ndyndnsを入れるには「gcccurl+libcurlが必要」と書かれている。gccは入っていたのだが、curlとか入っているかどうか分からなかったので、とりあえずインストールすることにした。
使用しているOSはVine Linux 4.1なので、aptが入っている。これを使ってインストールする。

# まずアップデート.
apt-get update

# curl関連パッケージを探してリストアップ.
apt-cache search curl

# その中から必要そうなのをインストール.
apt-get install curl
apt-get install curl-devel

これで準備は完了なはず。

# suして、
su
# ディレクトリに移動して、
cd ndyndns
# いつものやりかたでインストール.
./configure
make
make install

がしかし!これではmake install時に失敗してしまいました。
自分の環境の場合では、/usr/local/man というディレクトリが無いのです。(manとかjmanとか入っているのですが、なぜ??)それらを作成してから、再度make installしたら無事インストール完了しました。

パーミッション関係の設定

次は、コマンドを適切なユーザで使うように設定します。

# ユーザとグループを作成
groupadd dyndns
useradd -g dyndns dyndns

# ndyndnsのオーナーを変更します(適切なパスを指定して)
chown dyndns.dyndns ndyndns

設定ファイルの設定

/etc/ndyndns.confという設定ファイルを作成し、以下のように記述します。もちろん、自分の設定に合わせて内容を変更してください。

username=hogehoge
password=hogepass
hostname=hogehoge.dyndns.org

ファイル置き場の設定

自分の場合は、/var/lib/dyndns/にファイルを置くようにしてみましたので、以下のように設定します。

mkdir /var/lib/dyndns
chmod 700 /var/lib/dyndns
chown dyndns.dyndns /var/lib/dyndns

実行

次のようにコマンドを実行してみます。

ndyndns -n -c /var/lib/dyndns -f /etc/ndyndns.conf -i eth0 
 -u dyndns -g dyndns
# ↑もちろん1行で書きます。

これで現在のグローバルIPを取得してDynDNSにアップします。

が!!しかし!!うまく実行できず!

が、自分の環境では、プライベートIP(192.168.0.10みたいなIP)をアップしてしまいます・・。
この原因を数時間追いかけてみました。
オープンソースというか自前でmakeしているので、ソースも手元にある、ということで、ソースを見ながら追ってみたのですが、どうにも分からない。
linux.c内の、get_interface_ip関数が返す値がどうもプライベートIPになってしまっているようで、、うーん、どうしたものか。

メモ

ソースを見たことで、大体の仕組みが分かってきた。
・<最後に登録したIPアドレスを記述したファイル>を見る。
・ファイルが無い場合、現在のIPを取得→<そのIPで設定>
・ファイルがある場合、ファイルのIPと、現在のIPと比較して、IPが変更されていたら→<そのIPで設定>
・<そのIPで設定>した場合、そのIPをファイルに上書き記述
こんな感じ。
しかも<そのIPで設定>の部分は、cgiにurl埋め込みで直接引数を渡す感じなので、何か適当なスクリプトを使えば楽勝かもしれません。
と、思ったら、こんなページも発見。
もしくは、このページあたりを参考にしつつスクリプトでも書いてみようかな。