DynamicDNSでサーバー公開
Flets ISDNで常時接続をし、Linuxサーバーを公開する方法を説明します。
ここでは、DynamicDNSサービスdyn.toを使用して、自動的に回線切断を検出
して再接続、DYnamicDNSのアップデートを行う方法を紹介します。
まず、使用しているダイヤルアップルーターのsyslogを他のマシンに送信できる
必要があります。この機能が無い場合は、何らかの手段で回線の接続状況を知る
必要があります。
1.ルーターの設定を変え、syslogをLinuxマシンに送信できるようにする
2.ルーターからのsyslog送信を受信できるようにLinuxマシンを設定する。
rc.inet2にて起動しているsyslogdを-rオプション付きで起動するように修正します。
これで、リモートマシンからのsyslog送信を受け付けるようになります。
次に、/etc/sysog.confを修正します。私の使用している富士通Net Vehicle fx3は
local7で受信できるそうなので、受け取ったsyslogを/var/log/nv_logに記録する
ように設定しました。
syslogdを再起動してください。
これで、ルーターのsyslogがLinuxマシンに記録されます。このファイルを使用して、
ルーターの回線状況をチェックします。
3.監視スクリプトを作る
不意な回線切断、メンテナンスでのルーター再起動によってIPアドレスが変わる事は
ご存知だと思います。この回線切断や再起動をログから抽出して、回線の再接続と
DynamicDNSのUpdateを自動的に行います。まずはスクリプトを紹介します。
#!/bin/sh
# Flets' ISDN Connection check script
# For Fujitsu NetVehicle fx3
grep "bwtgw protocol: disconnected B" /var/log/nv-log | grep "Internet.FLETS" | tail -n1 > /var/log/flets_ck.now
grep "bwtgw enabled: system configuration restarted" /var/log/nv-log | tail -n1 > /var/log/flets_ck2.now
#
# Line disconection check
#
echo
echo "--- ISDN Connection check..."
if (diff /var/log/flets_ck.now /var/log/flets_ck.old) then
echo "ISDN Line is Connecting"
echo "Last disconnected at"
cat /var/log/flets_ck.old
else
echo "ISDN is Disconnected..."
cat /var/log/flets_ck.now
ping -c 1 ntp.so-net.ne.jp
echo "ISDN is Re-Connect"
/usr/local/bin/dyndyn24.sh update
echo "Dynamic DNS is Updated"
cp /var/log/flets_ck.now /var/log/flets_ck.old
mail -s "Line disconnected report from godzilla" root < /var/log/flets_ck.now
fi
#
# Router restert check
#
echo
echo "--- Router status check..."
if (diff /var/log/flets_ck2.now /var/log/flets_ck2.old) then
echo "Router is normal operationing"
echo "Last restarted at"
cat /var/log/flets_ck2.old
else
echo "Router is restarted..."
cat /var/log/flets_ck2.now
ping -c 1 ntp.so-net.ne.jp
echo "ISDN is Re-Connect"
/usr/local/bin/dyndyn24.sh update
echo "Dynamic DNS is Updated"
cp /var/log/flets_ck2.now /var/log/flets_ck2.old
mail -s "Router restart report from godzilla" root < /var/log/flets_ck2.now
fi
細かい動作はスクリプトを読んでください。
簡単に説明すると、以下の流れになります。
1.ルーターログnv_logより、文字列「"bwtgw protocol: disconnected B"」を抽出する。
2.さらに、その中から「Internet.FLETS」を抽出する。
2回フィルタリングしているのは、Bの次に数字が入るのですが、B1-chで繋がっていたか、
B2-chで繋がっていたか解からないからです。そして、Internet.FLETSっていうのは接続先の
設定名名称です。
3.最新の記録(最終行)だけ取り出して、flets_ck.nowに記録しておきます。
4.前回切断時にチェックした記録flets_ck.oldと比較を行います。
全く同じ文字列だったら切断は起こっていない証拠ですから、何もせず抜けます。
もし、文字列が違っていたら(diffのりざるとコードが0以外)回線切断が起きているので、
pingで回線を繋ぎ、dyndyn.shを実行してDynamicDNSをUpdateします。
5.同様に、ルーターのリスタートを検出して再接続を行います。
6.これらの結果はrootにメールされるようにしました。
続く…