<YAMAHA RTA52i用:回線メンテナンス・障害時の自動接続システム>
フレッツ・ISDN回線はOCN等の専用線と異なり、365日24時間接続が保証されていません。この為、サーバー公開を行っている環境で回線が切断された場合、サーバー側からインターネットにアクセスして接続しなければ、外側からサーバーにアクセス出来ません。
【RTA52iのルーターログをLinuxへ転送】
1. RTA52iのSYSLOG転送設定
2.1 /etc/syslog.confに以下4行を追加
daemon syslogd -m 0 -r
2.3 syslogdのリスタート
ROOT# /etc/rc.d/init.d/syslog restart
3. /var/log/router.logにrouterログが記録されているか確認
【RTA52iのリスタート環境のセットアップ】
1. Perlスクリプトで必要な.Net::Telnetの設定
1.1 モジュールのダウンロード
http://www.cpan.org/modules/by-module/Net/から、Net-Telnet-X.XX.tar.gzの最新版をダウンロードします。
1.2 Net::Telnetモジュールのインストール
2.1 /usr/local/bin/rta52i_restartを以下の内容で作成します。
ROOT# chmod 700 /usr/local/bin/rta52i_restart
2.3 一度起動してRTA52iがリスタートするかを確認してみて下さい。
【自動接続環境のセットアップ】
1.自動接続スクリプトの作成
/usr/local/scripts/flets_chk.shを以下の内容で作成します。最終行のpingで確認するインターネット側のIPアドレス:xxx.xxx.xxx.xxxは、契約プロバイダのDNSサーバー等を指定して下さい。
必ず以下のように毎9分に起動するようにcron登録して下さい。
ここでは回線切断されてもLinuxサーバーからインターネットに常時パケットを送信することにより、自動復旧する仕組みを紹介します。また、YAMAHA RTA52iでは回線障害時、CHAP認証に10回以上失敗するとその後ダイヤルアップしない仕様になっているため、こちらの対応についても併せて説明します。
GTO# telnet 192.168.xxx.xxx RTA52iのIPアドレスを指定
Trying 192.168.xxx.xxx...
Connected to 192.168.xxx.xxx.
Escape character is '^]'.
Password: xxxxxxxx RTA52iのログインパスワードを入力
RTA52i Rev.4.01.15 (Wed Feb 21 22:10:40 2001)
Copyright (c) 1994-2001 Yamaha Corporation.
00:a0:de:09:05:60
Memory 8Mbytes, 1LAN, 1BRI
> administrator
Password: xxxxxxxx RTA52iのadministratorパスワードを入力
# syslog host 192.168.xxx.xxx LinuxサーバーのIPアドレスを指定
# syslog notice on
# syslog debug on
# save
セーブ中...
セーブ終了
# exit
> exit
Connection closed by foreign host.
GTO#
2. LinuxサーバーのSYSLOG設定
# Save Yamaha RTA52i router syslog
user.debug /var/log/router.log
user.notice /var/log/router.log
user.info /var/log/router.log
2.2 /etc/rc.d/init.d/syslogのsyslogdの起動箇所で-rオプションを追加
gto-star$ tar zxvf Net-Telnet-3.02.tar.gz
Net-Telnet-3.02/
Net-Telnet-3.02/Makefile.PL
Net-Telnet-3.02/ChangeLog
Net-Telnet-3.02/lib/
Net-Telnet-3.02/lib/Net/
Net-Telnet-3.02/lib/Net/Telnet.pm
Net-Telnet-3.02/t/
Net-Telnet-3.02/t/select.t
Net-Telnet-3.02/README
Net-Telnet-3.02/MANIFEST
gto-star$ cd Net-Telnet-3.02
gto-star$ perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Net::Telnet
gto-star$ make
mkdir blib
mkdir blib/lib
mkdir blib/lib/Net
mkdir blib/arch
mkdir blib/arch/auto
mkdir blib/arch/auto/Net
mkdir blib/arch/auto/Net/Telnet
mkdir blib/lib/auto
mkdir blib/lib/auto/Net
mkdir blib/lib/auto/Net/Telnet
mkdir blib/man3
cp lib/Net/Telnet.pm blib/lib/Net/Telnet.pm
Manifying blib/man3/Net::Telnet.3
gto-star$ su
Password: xxxxxxxx
# make install
Installing /usr/lib/perl5/site_perl/5.005/Net/Telnet.pm
Installing /usr/lib/perl5/man/man3/Net::Telnet.3
Writing /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Net/Telnet/.packlist
Appending installation info to /usr/lib/perl5/5.00503/i386-linux/perllocal.pod
#
2. RTA52iリスタートスクリプトの設定
#!/usr/bin/perl
use Net::Telnet ();
my($lines,$t,$pass,$adminpass,$rthost);
$rthost = '192.168.xxx.xxx'; RTA52iのIPアドレスを指定
$pass = 'xxxxxxxx'; RTA52iのログインパスワードを指定
$adminpass = 'xxxxxxxx'; RTA52iのadministratorパスワードを指定
$t = new Net::Telnet (-host => "$rthost");
## Wait for first prompt
$t->waitfor('/Password:.*$/');
$t->print("$pass");
$t->waitfor('/>.*$/');
$t->print("administrator");
$t->waitfor('/Password:.*$/');
$t->print("$adminpass");
$t->waitfor('/#.*$/');
$t->print("restart");
$t->close;
exit;
2.2 作成後は、スクリプト内にRTA52iのパスワードが含まれているため、以下のとおり所有者のみアクセス権を与えます。
#!/bin/sh
RESTART_CMD=/usr/local/bin/rta52i_restart
ROUTER_LOG=/var/log/router.log
NOW=`date "+%b %e %H:%M"|cut -c-11`
sleep 61
FLAG=`grep "${NOW}" ${ROUTER_LOG}|grep "Too many authentication"`
if [ ! -z "${FLAG}" ] ; then
${RESTART_CMD}
sleep 30
fi
/bin/ping -c 1 -s 1 xxx.xxx.xxx.xxx >/dev/null 2>&1
2.自動接続スクリプトへ実行権を与える
ROOT# chmod 700 /usr/local/scripts/flets_chk.sh
3.自動接続スクリプトをcron登録
9,19,29,39,49,59 * * * * /usr/local/scripts/flets_chk.sh