ndyndnsを試す
とある思いつきから、Linuxマシンをつくって、DynDNSを試している。
プロバイダはある時間ごとにグローバルIPを変えているので、DynDNSへのIP登録を更新しなきゃいけないのだが、それを一定時間ごとに更新してくれるツールがあり、それはDynDNSサイト内にリストアップされています。
その中で、Linux用で、Certifiedされているのがndyndns。これを試す顛末をメモしておきます。
ダウンロード
上記サイトからダウンロードして展開します。
tar xvzf ndyndns-1.12.tar.gz
手動でインストールしてみる
展開して出来たディレクトリの中にあるREADMEを読みながらインストール開始。
しかし、ndyndnsを入れるには「gccとcurl+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埋め込みで直接引数を渡す感じなので、何か適当なスクリプトを使えば楽勝かもしれません。
と、思ったら、こんなページも発見。
もしくは、このページあたりを参考にしつつスクリプトでも書いてみようかな。