読者です 読者をやめる 読者になる 読者になる

DiCEのIP更新がうまくいかない

VirtualHostとかChroot設定しているときに、いつの間にか外部からアクセスできなくなった。

この設定が関係あるわけもないので、基本的なところからチェック。

...DNSグローバルIPが違うじゃないかorz

グローバルIPの調べ方 on Linux

wget -q -O - ipcheck.ieserver.net

DiCEで更新かけてみたがうまく変わらないので、以下を拝借しました。(EveryDNS用)
グローバルIP取得の部分がうまく動かなかったので、上記のものと差し替え。
/cron/ip_update.sh とかで適当に保存。
あと、現在DNSに登録されているIPを/tmp/oldip.everydnsに記述しておく。

#!/bin/bash
hostname="example.com"
USER="username"
PASS="password"
VER="0.1"

#IP=$(curl -s http://myip.dk/ | egrep -m1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
IP=$(wget -q -O - ipcheck.ieserver.net)
if [ -r "/tmp/oldip.everydns" ]; then
  OLDIP=`cat /tmp/oldip.everydns`
  if [ "$OLDIP" = "$IP" ]; then
        exit 0
  else
        RETURN=$(curl -s http://${USER}:${PASS}@dyn.everydns.net/index.php?ver=${VER}&ip=${IP}&domain=${hostname})
        echo $RETURN | grep "IP change suceeded" > /dev/null 2>&1
        if [ "$?" -eq "0" ]; then
              echo $IP > /tmp/oldip.everydns
        else
              echo "" > /tmp/oldip.everydns
        fi
  fi
fi

これを定期実行するためcronに設定。
エディタを開いて記述。

# crontab -e

* * 7 * * /cron/ip_update.sh

ちなみにcronの書き方は、左から

minute 0〜59
hour 0〜23
day_of_month 0〜31
month 1〜12 または jan〜dec
day_of_week 曜日 0〜6 または sun〜sat
command コマンド行  

【2010/03/21 追記】
DiCEのsetupでプライベートIPアドレスを検出対象からはずすとうまく更新されるようになりました。