ちょっと必要に迫られたので、QNAP上でDDNS更新スクリプトを動作させることにした。
以下覚え書き用。
cron登録は
/etc/config/crontab
/tmp/cron/crontabs/admin
を直接編集。
*/10 * * * * /share/XXXX/ddns/ddns.sh
更新スクリプトの配置場所が問題で、多くの場所がOS再起動で消える。
/share以下にする。これなら消えないし、Winファイル共有でも触れる。
またグローバルIPの取得はルータからwgetで拾ってきて加工して取得してみる。
加工の方法は環境により変える。割と強引。
最後にログファイルなどに適切な権限つけないとWinファイル共有で編集できないので注意。
#!/bin/bash
DDNSDIR=/share/XXXX/ddns
IP_FILE=$DDNSDIR/www_ipnow.txt
IP_LOG=$DDNSDIR/www_iplog.log
IP_OLD=`cat $IP_FILE`
IP_NEW=`wget -q –user=XXXX –password=XXXX -O – “http://192.168.XX.XX/XXXX” | grep -A 1 WAN | egrep ‘[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}’ | sed -n ‘1p’ | sed -e ‘s//.*//g’ | sed -e ‘s/[^0-9.]//g’ | egrep -v “^192.168.”`
if [ “$IP_NEW” == “” ]; then
echo `date` IP_GET_ERROR $IP_NEW >> $IP_LOG
elif [ “$IP_NEW” == “$IP_OLD” ]; then
echo `date` IP_NO_CHANGE $IP_NEW >> $IP_LOG
elif [ “$IP_NEW” != “$IP_OLD” ]; then
echo `date` IP_CHANGE $IP_NEW >> $IP_LOG
echo $IP_NEW > $IP_FILE
# wget -O – “DDNS更新用URL” >> $IP_LOG
else
echo `date` OTHER ERROR $IP_NEW >> $IP_LOG
fi