柴田 尚明@福岡
shibata@opost1.netspace.or.jp
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台に増殖しました(^^;しかし、ISPのLAN型dial-upの契約料は高いし、routerを買うお金もない。 さらにはISDNでもない、の三重苦(^^;によりあきらめておりました。
#Ver 0.6時点で我が家もISDN+テレホーダイ化しました(^o^)。OCNまでの短い命かもしれませんが....ちょうどその頃Linux-MLでIP masqueradeが話題になり、情報を集めてみると 「まさに求めていたもの」で、早速取り掛かることにしました。
#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。linux-2.0.0にするときに気を付ける物としてはこじまみつひろさんが訳され、吉山さんがHTML化したものがhttp://jf.gee.kyoto-u.ac.jp/JF/v2.0/Changes-2.0.htmlに有りますのでじっくり読むのが良いと思います。
拡充計画は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だけとなりました(^^)。今後は、このon-demand機能を利用して、真夜中のテレホーダイタイムにNetNewsを自動取り込みすることを考えていますが、まだINNの設定ができてません(^^;
この内容はそのうちアップデートしてこの文書にも反映させます。

#Slackaware 3.1に3.2を上書きinstall(って言うのかな?)を行った場合は、その後に不都合が生じる場合があります。
#具体的にはkernelの再構築が出来ないようです。
#そういう時は/usr/binの中を削除してから再installしましょう(^^;

Linux-2.0.30からは、kernelのコンフィグレーションにもよりますが、今までIPmasqueradeされたネットワーク上から外部のネットワークに対して不可能であったpingなどのICMPを使ったやり取りなども実行可能になっているようです。
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このあと、/etc/lilo.confを修正して、boot時に今まで動いていたkernelと新しいkernelを選択できるようにします。#ここで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制御装置(^^;がつながりました。noipdefault netmask 255.255.255.0 defaultroute idle-disconnect 140
#また/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に
#このコードを統合するつもりだとの事です(^^)。#pppのトラフィックが140秒間ないとpppdが落ちる設定です。domain joy.netspace.or.jp
#このドキュメントのVer0.7まで間違った記述をしており、
#参照された方にはご迷惑をおかけいたしましたm(_|_)m#上の行は、不要かもしれません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などでダイヤルアップを始めてしまいます(^^;そのLAN上のhostでWinVNなどを動かすと、dial-up routerであるsilverがダイヤルを始めるはずです(^^)
また、Win95の場合はNetBEUIをunloadしておかないとWin95起動時にパケットをはいてダイヤルアップを始める事があるようです
/etc/ppp/ip-upの中に
/sbin/insmod ip_masq_ftp
を追加しました。
#これって、本来のkerneldの使い方じゃないような気がします。この設定で、悩んでいたftpがちゃんと動作するようになりました(^^)Ver0.6
#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を持ってきてカーネルソースにパッチを当ててください。
パッチの当てかたは普通のカーネルパッチと同じだとおもいます。
Linux-2.0.30では、不要です。
家庭内LAN上のhostからIP masqueradeを利用して動作したものを示します
linux-2.0.30環境でWin95からIPmasquerade外部へのping
#IP addressでSMTP server/POP3 serverとしてsilverを指定してもその後の調査で、mailerやpopperには関係なくDNSを引きに行っているような状態が出ています(T_T)
#どうもWin95が何らかのタイミングでDNSを引くようです(^^;->IP masqueradeを起動しているマシン(silk)の/etc/hostsにNote PCの
0.6
->BINDを家庭内LANで運用を始めたところ、silver起動時の1回のみダイヤルアップが発生している。引き続き調査中。
#port53でした。問い合わせたらRIPでした。(--;idle-timeoutを5秒ぐらいにすると切れてくれるけど、これでは使い物にならない(T_T)
(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]







柴田(ひ)アンテナ