「遠くのサーバも柴犬に見張らせれば大丈夫(^^)」
Ver 0.2 Copyright(C) 1997, Hisaaki Shibata
柴田 尚明@福岡
何らかの要因、例えば電源の瞬断などでハングアップしてしまったリモートにあるLinuxboxに対して、自動でハードウエアリセットしたり電源を落としたりして復旧させる仕組みを考えています。
公開してご意見を伺い、出来ればもうちょっと改良したいと思っておりますm(_|_)m。
柴田 尚明@福岡
何らかの要因、例えば電源の瞬断などでハングアップしてしまったリモートにあるLinuxboxに対して、自動でハードウエアリセットしたり電源を落としたりして復旧させる仕組みを考えています。
公開してご意見を伺い、出来ればもうちょっと改良したいと思っておりますm(_|_)m。
柴田 尚明@福岡
Linuxに特有のIP masqueradeとkerneldによるon-demand PPPが
ある程度動きましたので設定の際に行った項目をメモにまとめます。
我が家におけるIP masqueradeの最大のメリットは
ご意見は、fj.os.linuxかメールでお願いします。
メールの方が圧倒的にレスポンスがいいはずです(^^)
1997/5/1 Ver. 0.91
1996/5/31 Ver. 0.4
1996/5/29 Ver. 0.3
1996/5/18 Ver. 0.2
1996/5/15 Ver. 0.1 新規作成
自作AT互換機の常で、自己増殖機能により我が家のPCが3台(FullTower, DeskTop, SubNote)になったことをきっかけに、家庭内LANを始めることにしました。
#Ver 0.6時点では新規導入したMiniTowerを子供用ゲーム機にして、お古となったDeskTopをLinux専用サーバとし、計4台に増殖しました(^^;
#Ver 0.6時点で我が家もISDN+テレホーダイ化しました(^o^)。OCNまでの短い命かもしれませんが....
#Linux-MLでは、その後も技術的な情報がやり取りされてます。
IP masqueradeについてはhttp://www.kt.rim.or.jp/~akira/にやまだあきらさんのわかりやすい解説が有ります(^^)
また、最近拡充されたものとしては、
梶原 健司さんのhttp://gandalf.doshisha.ac.jp/~kaji/ip_masq/とか、
星野 明さんのhttp://www.st.rim.or.jp/~akhoshi/ipmasq.html、そして荒木さんのhttp://www.mizuno.riec.tohoku.ac.jp/~yasu/linux/ipmasq/が有りますのでこちらもぜひご覧になってくださいm(_|_)m
その他にもNET-2/3-HOWTOに解説が有ります。こじまみつひろさんの和訳もGoodです。
on-demand dial-upに関しては、dialdを使う方法もあるとのことで、そのうち気が向いたら挑戦してみます。(かなり気は向いてるけど)
#と、言いながらkerneldに満足してしまい、dialdまでいたってませんm(_|_)m。
拡充計画はBIND+samba(済)->INN->DHCP
へ移って行きました(^^;
さらに、pppd-2.3.xでは、それ自体でon-demand dialupの機能が追加になっているようです。これももう少しβ版が安定してきたら手を出すかもしれません。
また、私が使い出したMN128に関するpppのchatスクリプトについてはhttp://www.st.rim.or.jp/~kanada/ISDN/connection-scripts.htmlに金田泰さんの実例がございます。
ISP-->Internet
|
.------------. .------------. NTT
|192.168.0.1 | |192.168.0.5 | |
| NIC+----------+ +-------+NIC 16550+-->TA-->DSU
| | | | | | (MN128)
| Silk | | | | Silver |
`------------'FullTower | | `------------'DeskTop
(Win95/3.1/Linux) | | (Linux)
| |
.------------. .--+--+--. .------------.
|192.168.0.2 | | | |192.168.0.3 |
| NIC+-------+ +------+NIC |
| | | HUB | | |
| Silvia | `--------' | Echos |
`------------'MiniTower `------------'Note
(Win95) (Linux/Win95)
家庭内LANを使う場合、プライベートaddress空間を使うことがお勧めです。私は、192.168.0.0/24を使いました。
#さすがにclass C x 1で足りない家庭内LANはないかと(^^;
#ちなみに、今日現在ではDHCPサーバが、Silver上で動き出しており、クライアントがLinuxの場合でもWin95の場合でも動的にIPアドレスを割り振ってくれるようになりましたので、上記のIPアドレスのまま動いているのはSilverだけとなりました(^^)。
この内容はそのうちアップデートしてこの文書にも反映させます。
#Slackaware 3.1に3.2を上書きinstall(って言うのかな?)を行った場合は、その後に不都合が生じる場合があります。
#具体的にはkernelの再構築が出来ないようです。
#そういう時は/usr/binの中を削除してから再installしましょう(^^;
IP masqueradeを使えるようにする'make config'内容はやまださんのページや、NET-2/3-HOWTO、ipfwadmのarchive内のdocumentに書かれてます。
#このメモをupdateしたときにも簡単に触れるつもりでしたが、
#和訳されたChangesができたのでそちらをご覧ください。
��ところで、2.0.0リリースおめでとう!
#でもAIC-7850では新しいaic7xxxドライバは不安定(-_-)。
PIONEERのCD-ROMがboot時にエラーをだしまくるのでサブマシンのCD-ROMドライブ(PLEXTER)と入れ替えて対策しました(^^;
私の標準手順は以下です。('# 'はpromptのつもりです。)
# cd /usr/src/linux
# make mrproper
# make menuconfig#ここでIP masqueradeが使えるようにする。どの項目をYにするかは2 .関連情報をご覧ください。
# make dep && make clean && make zImage && make modules && make modules_install
# cd /usr/src/linux/arch/i386/boot
# /sbin/rdev -R zImage 1
# cp zImage /zImage.x.yy.z
# cat /etc/lilo.conf
#fileの中身やコマンドの出力を示す場合は、以下緑で示します
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
boot = /dev/sdb1
#rootパーティションにinstallしてます。
#boot selecterはOS-BSがお気に入りです。
#compact # faster, but won't work on all systems.
delay = 50
vga = normal # force sane state
ramdisk = 0 # paranoia setting
# End LILO global section
# Linux bootable partition config begins
image = /zImage.x.yy.z
root = /dev/sdb1
label = linux
read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends
# Linux bootable partition config begins
image = /zImage.2.0.29
root = /dev/sdb1
label = linux.old>
read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends
そして、
# /sbin/lilo
でliloを入れて、kernelの再構築はおわりです。
尚、家庭内LANで使うときには/etc/rc.d/rc.inet1でdefaultroute(gateway host)でNIC側を選択している場合は、設定行をコメントアウトしておきましょう。
そうしないと、せっかくpppでのlinkが確立しても外に出て行けなくなってしまいます。
#複数のセグメントを持つ大規模家庭内LANユーザの方(^^;は
#話が変わってきますが。
#どうも、モジュールを新しくしたタイミングだと思うのですが
#sendmail-8.7.5が/etc/rc.d/rc.Mのなかでハングするように
#なりました(T_T)ので元に戻しました。
上記が終わったらarchive内のrc.hintsを元に/etc/rc.d/rc.Mにkerneldとdepmod、modprobeの起動scriptを追加します。
#簡単なので省略m(_|_)m
次に以下のppp設定fileを作ります。
# cat /etc/ppp/ip-up
#!/bin/sh#ファイルの先頭行にこれを書いて、なおかつ実行可能フラグを立てないと
��うまく行きません。これのせいでずっとハマッてました(^^;
echo UP `date` >> /tmp/PPP-LOG#ダイヤルアップ開始時間を記録します
sendmail -q#送信用のqueueに溜まっているmailをflushするため
kill `cat /tmp/request-route`#kerneldのrouting programのprocessを削除する
#/sbin/insmod ip_masq_ftp#後述するIPmasquerade下でftpを行うためのおまじないでしたが、以下の4行に置き換えてます。だから今はコメントあうとしてます。
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp.o
/sbin/modprobe ip_masq_raudio.o
/sbin/modprobe ip_masq_irc.o
次にarchive内のrequest-route.shを元に以下のfileを作ります。
#どうせDNSを引きに行くのでちょっと内容をサボってます
# cat /sbin/request-route
#! /bin/sh
LOCK=/tmp/request-route
UP=/tmp/request-up
PATH=/usr/sbin:$PATH #for ppp-2.2*
export PATH
pppd
echo `date` > $UP#家庭内LANからのon-demandダイヤルアップであることの足跡を残してます。外部からのダイヤルインではこのファイルができないはずで、それによって制御を変えるようにしてます
sleep 60 &#この値はいろいろとチューニングの余地があるようです
sleepid=$!
echo $sleepid > $LOCK
wait $sleepid
rm -f $LOCK
#上記にも示しましたが、ppp-2.3.xのβテストが始まってます。
#pppd単体でon-demand dialupが出来るようになっているらしいです(^^)
# cd /usr/local/src/ppp-2.2.0f
# ./configure
# make kernel
# make
#make前にppp用のlock fileのPATHを修正してました
��mgettyを使う場合です。今はmgettyの方を修正しています
��mgettyを使うのは外から自宅にdial-upするからです(^^)
# make install
このあと、以下の設定fileを作ります。
#どうせ一つのISPにしかアクセスしないでしょうから
��/etc/ppp/optionsで設定値を書いちゃいます。
# cat /etc/ppp/options
debug
lock
modem crtscts /dev/ttyS3 38400#私のモデムはSilkのCOM4です
��最近買ったTA(MN128)はSilverのCOM1につながってます
��COM1の時は/dev/ttyS0ですね(^^)
��さらに現時点では、remote電源制御の絡みがあり、TAはCOM2(/dev/ttyS1)につながっています。COM1は電源OFF制御装置(^^;がつながりました。
��また/etc/rc.d/rc.serialでspd_vhi設定をして、DTE速度を115200bpsにしてます。
#setserialの最新バージョンは1.12のようです。
#また、SMC系のマルチI/O制御chipはDTE速度を115.2k以上に設定できるらしく、
#Win95のドライバはfjにポストされてました。
��ドライバが置いてあるftpサイトはhttp://www.yk.rim.or.jp/~gigo/over115K/です。
大きな期待がかかるのがこのドライバの作者の友人がsetserialに
#このコードを統合するつもりだとの事です(^^)。
noipdefault
netmask 255.255.255.0
defaultroute
idle-disconnect 140#pppのトラフィックが140秒間ないとpppdが落ちる設定です。
#このドキュメントのVer0.7まで間違った記述をしており、
#参照された方にはご迷惑をおかけいたしましたm(_|_)m
domain joy.netspace.or.jp#上の行は、不要かもしれません
name silk#上の行は、不要かもしれません。
connnect /etc/ppp/ppp-on-script
実際に電話をかけるのは以下の部分の設定です。
(1)Rockwell系のv.34 modemの場合
# cat /etc/ppp/ppp-on-script
#!/bin/sh# 各行末のバックスラッシュ(\)に気を付けてね
# 最終行だけバックスラッシュによる改行のエスケープ不要
exec /usr/sbin/chat -v TIMEOUT 2 ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' AT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT電話番号 \
CONNECT '' \
ogin:--ogin: \\dユーザID \
assword: パスワード
PAPやCHAPのISPへは/etc/ppp/pap-secretsや/etc/ppp/chap-secretsを記述すれば、上記のCONNECTの行まででOKのばずです。
��その時は、最後の行末の\をはずしてね
��また、PAPの時は/etc/ppp/optionsに+uaなどの記述が必要です。
��尚、+uaの記述は推奨されているものではなくpppd-2.3.x以降では
��サポートされない事が有りそうなので、/etc/ppp/*-secretsを使用した方が
��よさそうです。
(21)MN128(非同期38.4k)の場合
http://www.st.rim.or.jp/~kanada/ISDN/connection-scripts.htmlの金田泰さんの実例をみてね。
尚、金田さんが書いているMN128のppp終了後のハングアップに関しては/etc/ppp/ip-downの後半のchatを起動する部分を下記のようにする事で、回避できています。
また、電源制御関連や、ダイヤルアップしていないときには不要なmoduleを削除する事も追加しました。
# cat /etc/ppp/ip-down
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
if [ -f /tmp/request-up ]; then #家庭内LANからのダイアルアップならば
/bin/rm -f /tmp/request-up
echo DOWN `date` >> /tmp/PPP-LOG #コネクションを切った時間をlogに取る。
else #外部からのダイヤルインによるpppの起動のときは。
sync
sync
sync #転ばぬ先のsync三回(^^;
/sbin/shutdown -r now #おもむろにshutdownを動かす。
sleep 60
exit 1 #正常にshutdownが動いていれば、ここには来ないはず。
fi
#if [ `w|wc -l` -lt 3 ]; then #外部からのダイヤルイン判定の残骸
# sync
# sync
# sync
# /sbin/shutdown -r now
#fi
/sbin/rmmod ip_masq_ftp.o #不要なモジュールの取り外し
/sbin/rmmod ip_masq_raudio.o
/sbin/rmmod ip_masq_irc.o
# #MN128ハングアップ対策
exec /usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nLINE OFF\r' \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' ATZ
また、DNS関連の記述は以下のようにしています。
# cat /etc/resolv.conf
domain joy.netspace.or.jp
nameserver 192.168.0.5#そうです。我が家の中にもDNSサーバが立ちあがったんです(^^;
��これについては婆印度と産婆(^^;を見てください
nameserver aaa.bbb.ccc.ddd#ISPが推奨しているDNS serverのIP addressですね
ここまでで、rebootすれば「そのLinux機上で」
$ telnet sotono.host.or.jp
とか
$ mnews -Dsotono.NNTP.server.or.jp
とかで勝手にダイヤルアップを始めるはずです(^^)
V#ISDN+テレホーダイとかだと快適ですねぇ。
#テレホーダイなら繋ぎっぱなしにする?(^^;
#他の人にも回線あげなきゃ(^^)
ダイヤルを始めているときのプロセスの状況は以下のようです。
# ps -x
PID TTY STAT TIME COMMAND
1 ? S 0:16 init[5]
[中略]
111 ? S 0:00 sh /sbin/request-route aaa.bbb.ccc.ddd
114 S3 S 0:00 pppd
115 ? S 0:00 sleep 40
116 S3 S 0:00 /usr/sbin/chat -v TIMEOUT 3 ABORT \nNO AN...
[以下省略]
上記のaaa.bbb.ccc.dddはDNS ServerのIP addressになることが多いでしょう。
私が探した限りではipfwadmの設定に関する記述はアーカイブ内のmanファイルにしかありませんでした。
#NET-2/3-HOWTOにあるように、ipfwとは記法が異なります。
/sbin/ipfwadm -F -b -o -a masquerade -P all -S 192.168.0.0/24 -D 0.0.0.0/0
# End of rc.inet1
ここまでで、Dial-up routerと化したLinux機が出来上がりです(^^)
��RT100iはNATとやらに対応しているようですが
#複数のプライベートIP addressを一つのグローバルIP adressに
#変換する事はできないようですから、こいつはGoodです。
#しかしYAMAHAもRT100iのNATをエンハンスさせてIPmasqueradeのような機能を
#考えているようです(^^)
家庭内LAN上の全PCはdefaultrouteを192.168.0.5に向けます。
また、家庭内LAN上の全PCの/etc/hostsファイル上には全LAN内hostのエントリを追加しましょう。(DNSがあがっている現在は不要である事を確認していますが)
#さもなくば、LAN内でのtelnet/ftpなどでダイヤルアップを始めてしまいます(^^;
また、Win95の場合はNetBEUIをunloadしておかないとWin95起動時にパケットをはいてダイヤルアップを始める事があるようです
/etc/ppp/ip-upの中に
/sbin/insmod ip_masq_ftp
を追加しました。
#これって、本来のkerneldの使い方じゃないような気がします。
��on-demandでloadできる正しい使い方をご指導ください。
小さなftpやhttpだと問題にならないのですが、大きなファイルをanonymous FTPサイトから持ってきていると、きちんと終了しない事があります。この場合はhttp://www.hwy401.com/achau/ipmasq/ip_masq_ftpalive.patch.gzやftp.linux.or.jpなどからip_masq_ftpalive.patch.gzを持ってきてカーネルソースにパッチを当ててください。
パッチの当てかたは普通のカーネルパッチと同じだとおもいます。
家庭内LAN上のhostからIP masqueradeを利用して動作したものを示します
#IP addressでSMTP server/POP3 serverとしてsilverを指定しても
#どうもWin95が何らかのタイミングでDNSを引くようです(^^;
0.6
->BINDを家庭内LANで運用を始めたところ、silver起動時の1回のみダイヤルアップが発生している。引き続き調査中。
#port53でした。問い合わせたらRIPでした。(--;
(2)問題点をFIXして、どこかのサイトにこの文書を置く。
->期間限定ですが、置きました。
#引き続き、引き取っていただけるところをお待ちしております。
��ご意見や情報を頂きたいのですが、よろしくお願いいたします。
(2)dialdを使った方法を追加する。 -> ftpが解決してから->pppd-2.3.xに移行するためなしm(_|_)m
(3)Linux-MLでの技術的な裏付け情報を付録で追加
-> 私が理解してから(^^; ->いまだに把握できていない(^^;
入れて、UPS付き(電池)低消費電力のdial-up routerを作っちゃう。
��私が持っておりますYAMAHAのPCMCIA ISDN cardのドライバ情報を
��お待ちしていますm(_|_)m
私がLinuxを使えるようにしてくださったすべての方に感謝いたします。
特に、この文書作成にあたっては、Linux-MLの方々と、JFによるドキュメント、および関連のドキュメントがなければできないものでした。ありがとうございます。m(_|_)m
以上
この所、ディスク障害だとか、人為的チョンボとかで再installをする機会が多くて(^^;、
どのファイルをバックアップ取っとけば良いかわからなくなるんで、この際(自分のために)まとめとくものです。
(1)install時
(2)ppp+kerneld+IP_masquerade設定時
(3)BIND設定時
(4)Apatch設定時
(5)INN設定時
(6)samba設定時
[入り口へ]
[Akkoame Home Page]
柴田 尚明@福岡
Linuxでのshutdown時に自動でPCの電源を落とし、また、外部からの電話着信で自動的にPCの電源が入るものを作りはじめました。
ある程度動いてますので、公開してご意見を伺い、もうちょっと改良したいと思っておりますm(_|_)m。
ご意見は、fj.os.linuxなどの関連NewsGroupかメールでお願いします。
メールの方が圧倒的にレスポンスがいいはずです(^^)
1996/11/6 Ver. 0.2
ATX機が自動で電源を落とせる話を聞いたり、某社のPCではモデムに着信があると電源を入れることができるという話を聞くたびに、良いなぁ~と思っておりました。
また、会社から家に仕事のファイルを持ち帰って作業をして(^^;、そのまま忘れて会社に来たりしたことがあり、カミサンにPCの電源を入れてもらってダイヤルインしたりすることもありました(^^;;;;;;が、そうそう毎度は頼めません(^^;。
うちのサーバ機はCRTがついていないので、カミサンにはshutdown時の電源OFFのタイミングがわかりにくいという話もあります。
#ま、目標は、あくまで目標(^^;
ATXの電源制御仕様ってどこかに落ちてないでしょうか?
www.teleport.com/~atx/からたどっても、ろくなものは見つけられませんでした(T_T)
リモート電源制御の回路図に関しては下記をご覧ください。
#なお、このメインボードの回路が二つ分入ったものが4cm x 5cm程度のコンパクトな基板となり市販のキットとして1800円で販売されてます。
大阪日本橋の「ワンダーキット」と言う会社のものです。
問い合わせ先は〒556大阪市浪速区日本橋4-4-1
TEL(06)644-4447 FAX(06)644-4448です。
私は福岡の「カホパーツセンター」で購入しました。注意する点として、このキットにはVcc(電源電圧)が5Vのものと12Vのものがあることです。私は回路図でお分かりのように5V版を使用しました。
#線材とかパイロットLED+LED用抵抗などは省略してますm(_|_)m
Main | Name | Counts | Memo |
1 | HD414013 | 1 | CMOS-SSI |
2 | 2SC945 | 1 | Tr |
3 | 1S1588 | 3 | Diode |
4 | 1μF | 1 | Condenser |
5 | 10μF | 1 | Condenser |
6 | 4.7kΩ | 4 | Resister |
7 | 47kΩ | 3 | Resister |
8 | 100kΩ | 1 | Resister |
9 | G6C-1117 | 1 | Relay |
10 | Universal board | 1 | 5cm x 4cm |
Power | Name | Counts | Memo |
1 | AC/DC Conv. | 1 | DC5V output |
2 | Switch | 1 | on-off-on toggle |
3 | Universal board | 1 | 3cm x 2cm |
Set | Name | Counts | Memo |
1 | 9pin RS-232-C Conn. female | 1 | board mount type |
2 | 9pin RS-232-C Conn. male | 1 | board mount type |
3 | TLP521-1 | 1 | Photo-coupler |
4 | 470Ω | 1 | Resister |
5 | Universal board | 1 | 4cm x 3cm |
Reset | Name | Counts | Memo |
1 | 9pin RS-232-C Conn. female | 1 | board mount type |
2 | TLP521-1 | 1 | Photo-coupler |
3 | 470Ω | 1 | Resister |
4 | Universal board | 1 | 4cm x 3cm |
以下のppp設定fileを作ります。(on-demand pppの設定で既に書いてますので、関連する記述のみ示します。)
4.1 /etc/ppp/ip-up
# cat /etc/ppp/ip-up
#!/bin/sh#ファイルの先頭行にこれを書いて、なおかつ実行可能フラグを立てないと
��うまく行きません。これのせいでずっとハマッてました(^^;
echo UP `date` >> /tmp/PPP-LOG#ダイヤルアップ開始時間を記録します
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
if [ -f /tmp/request-up ]; then #家庭内LANからのダイアルアップならば
/bin/rm -f /tmp/request-up
echo DOWN `date` >> /tmp/PPP-LOG #コネクションを切った時間をlogに取る。
else #外部からのダイヤルインによるpppの起動のときは。
sync
sync
sync #転ばぬ先のsync三回(^^;
/sbin/shutdown -r now #おもむろにshutdownを動かす。
sleep 60
exit 1 #正常にshutdownが動いていれば、ここには来ないはず。
fi
#if [ `w|wc -l` -lt 3 ]; then #外部からのダイヤルイン判定の残骸
# sync
# sync
# sync
# /sbin/shutdown -r now
#fi
# cat /sbin/request-route
#! /bin/sh
LOCK=/tmp/request-route
UP=/tmp/request-up
PATH=/usr/sbin:$PATH #for ppp-2.2*
export PATH
pppd
echo `date` > $UP#家庭内LANからのon-demandダイヤルアップであることの足跡を残してます。外部からのダイヤルインではこのファイルができないはずで、それによって制御を変えるようにしてます
sleep 60 &#この値はいろいろとチューニングの余地があるようです
sleepid=$!
echo $sleepid > $LOCK
wait $sleepid
rm -f $LOCK
# tail -15 /etc/rc.d/rc.6
# See if this is a powerfail situation.
if [ -f /etc/power_is_failing ]; then
echo "Turning off UPS, bye."
/sbin/powerd -q
exit 1
fi
sleep 15 ;echo off >/dev/cua0
echo "$message"
[ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
$command -f
動作したものを示します
何と言ってもISDNでの自宅へのダイヤルアップIP接続です。
TAがオフフックしていないようなのでいかんともし難いです。情報をお待ちしています。
まお、今回の電源制御は基本的にすべてRS-232-Cで行ってます。このあたりの情報はFA-NET-MLの皆さんと、alm-hokkaiの藪中さんから頂いております。
ありがとうございます。m(_|_)m
以上