RedHat 6.2Jのインストール
2枚目のNICの装着
パケットフォワーディングを有効にする
ヘルパモジュールのロード
ipchainsの設定
client側の設定
実際に使ってみて
sambaを導入してWindowsのワークグループに参加
ブラウズマスターの設定
今回,以前いた研究室から旧型マシンを拝借してきたので,Linuxをインストールして IPマスカレードを使うことにした. このマシンのCPUはPentium 120MHz, メモリは32MB,HDDは1.2GBであり,Windows98や2000で使うのは難しいが, Linuxならサクサク動く. IPマスカレード専用ならカーネル本体と一部のモジュールだけインストールすればよく, GNOMEなどの洒落たウィンドウマネージャは要らない.
インストールと設定方法を以下にまとめた.
まず,雑誌の付録として付いてきたCD-ROMを使ってRedHat 6.2Jをインストールする. このディストリビューションでインストールされるカーネルは,最初からIPマスカレードが使えるようになっている.
ブートディスクでブートするとATAPIのCD-ROMドライブはもちろん,SCSIのCD-ROMドライブでもほぼ認識される. fukunm12にインストールしたときは, Tekram DC390Uに 繋がれたCD-ROMドライブが自動認識された(Windows NTの起動ディスクでは,TekramのSCSIカードは自動認識しない). よほど新しいハードウエアでない限り自動認識されるので,インストール自体はWindowsよりも簡単かもしれない. 今回のマシンにはPS/2マウスが使えない(マザーボード上にポートはあるが,ケーブルを紛失している)ので, シリアルマウスを使った. テキストベースでのインストールも試みたが,パッケージの選択のところがうまくいかなかった. ただし,けがの功名でテキストベースのfdiskの使い方に慣れた.
最初は自宅で眠っていたWestern Digitalの420MBのHDD(WDAC2420?)を使おうとしたが, カーネル本体とソース,gcc,その他のユーティリティぐらいのインストールでもさすがにこの容量はつらい. ファイルのコピーが始まるときに,「容量が足りません」という旨のメッセージが出た. 仕方がないので,拝借していたときにもともと付いていたHDD(WDAC31200)に載せ換えた. Western DigitalのIDE-HDDは,masterの位置にジャンパをセットすると単独で使うときに認識されない(最近のは知らないが). 単独で使うときは,ジャンパを抜いておかなければならない. このことを忘れていて,約30分間作業が中断した.
パーティションは/(ルート)に800MB,スワップに70MB程度確保した. 拝借してきたマシンは,以前Windowsのインストールを頼まれたことがあり,そのとき, HDDの終わり頃に不良セクタがあったような気がしたので,HDD全域を使わないようにした. XやGNOMEをインストールしないので,800MBあれば十分だろう(これでも多いかもしれない). いまどきPIOのHDDなんて時代遅れであるが,ある程度メモリを積んでおけば, IPマスカレードの運用中にHDDにアクセスすることはほとんどないので,全く問題ない.
ひとまずNIC(Planex ENW-8300C)を1枚だけ差しておき,グローバルのIPアドレスを割り当てた. パッケージでは,カーネル本体とソースコード,gcc関連,あとはwu-ftpdやtelnetdなどの基本的なデーモン類だけを選択した. CD-ROMが4倍速なので少々時間がかかったが,認識されないハードウエアもなく無事終了. pingが通ることを確認した.
viは使いづらいので,Vzライクな操作性の nedit(ここにある)をインストール しようとしたが,makeが途中で止まってしまう. 多分何かのパッケージが足りないのだとは思うが(最初はmakeもインストールしていなかった!),とりあえずは 我慢してviを使うことにした.
Linuxのviは,UNIX標準のviをより使いやすくしたもの(名前は忘れた.vimだったか)に置き換えられているらしい. 確かに,以前使ったときよりは使いやすく感じた. 矢印キーでカーソルも動く. どうしてもうまくいかない場合は,メインマシンにftpで持ってきてから編集すればよい.
一旦電源を落とし,2枚目のNIC(Planex FW-100TX)を差して再度起動した. Linuxでは起動時に新しいハードウエアを検出すると,Kudzuと呼ばれるコンフィギュレータが起動する. Kudzuが起動した場合,Enterキーを押すと検出されたハードウエアが表示される. 何もキーを押さずに30秒経過すると,そのまま起動プロセスを続ける. 実際やってみるときちんと2枚目のNICが検出されたが,残念ながらKudzuからは2枚目のNICの設定が行えないらしいので, Enterを押してハードウエア情報が表示された後,[Do Nothing]を選択して後ほど設定を行うことにした.
ネットワークの設定はnetconfというツールを用いる.
これはコンソールベースのソフトであり,他のマシンからtelnetで使うこともできる.
rootでログインし,
とすればnetconfが起動する.
2枚目のNICのIPアドレス等を設定するために,[Basic host information]を選択する.
追加したNICはAdaptor2となる.
カーソルキーで画面を下にスクロールするとAdaptro2の設定項目が現われるので,次のように設定する.
% netconf
最後に[Accept]を選択する. 情報を更新する旨のメッセージが表示されるので,全てOKを押す. netconfの初期画面に戻り,[Quit]を選択すると,変更を有効にするか否かを選択する画面が現われるので, {Activate the changes]を選択する.
ifconfigでNICが正しく構成されたかを確認する.
% /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:1C:00:27:F7
inet addr:133.***.***.63 Bcast:133.***.***.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:173520 errors:0 dropped:0 overruns:0 frame:4
TX packets:27349 errors:0 dropped:0 overruns:0 carrier:0
collisions:992 txqueuelen:100
Interrupt:10 Base address:0xe000
eth1 Link encap:Ethernet HWaddr 00:90:CC:07:9C:9A
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25093 errors:0 dropped:0 overruns:0 frame:0
TX packets:30889 errors:0 dropped:0 overruns:0 carrier:0
collisions:2020 txqueuelen:100
Interrupt:9 Base address:0xe400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:84 errors:0 dropped:0 overruns:0 frame:0
TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
ルータとしてRed Hat Linuxを使うためには,IPパケットフォワーディング (IP packet forwarding)の機能を有効にしなければならない. これは,IPパケットを異なるネットワークインターフェイスの間で転送する機能である. ネットワークインターフェイスの種類はイーサネットに限らず,ダイヤルアップなどのPPPでもよいらしい. カーネルの初期状態では,安全のためこの機能が無効に設定されている.
IPパケットフォワーディングの機能を有効にするためには,/etc/sysctl.confの
エントリnet.ipv4.ip_forwardを以下のように書き換える.
初期状態では値が0になっている.
1に書き換えて再起動するとIPパケットフォワーディングが有効になっている.
これを確認するには,
# Disables packet forwarding
net.ipv4.ip_forward = 1
となればよい.
% cat /proc/sys/net/ipv4/ip_forward
1
LinuxのIPマスカレードでは,すべてのプロトコルをカーネル内部で処理できるようになっていない. FTPなどの特殊なコネクションを持つプロトコルに関しては,ヘルパモジュールと呼ばれる 外部モジュールによって処理される.
これらのモジュールは,RedHat Linux 6.2Jの場合,/lib/modules/2.2.14-5.0/ipv4に置かれる
これらのモジュールを起動時に読み込むためには,/etc/rc.d/rc.localに次のように書く.
場所は最後でよいだろう.
% pwd
/lib/modules/2.2.14-5.0/ipv4
% ls
ip_gre.o ip_masq_irc.o ip_masq_raudio.o ip_vs_rr.o rarp.o
ip_masq_autofw.o ip_masq_mfw.o ip_masq_user.o ip_vs_wlc.o
ip_masq_cuseeme.o ip_masq_portfw.o ip_masq_vdolive.o ip_vs_wrr.o
ip_masq_ftp.o ip_masq_quake.o ip_vs_lc.o ipip.o
IPマスカレードとネットワークアプリケーションについてはここに
膨大なデータがある.
再起動後,lsmodを実行して次のように表示されればOKである.
# IP masquerading special module support
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_vdolive
2枚のNICのドライバモジュールもロードされているのがわかる.
% /sbin/lsmod
Module Size Used by
ip_masq_vdolive 1400 0 (unused)
ip_masq_raudio 3032 0 (unused)
ip_masq_quake 1388 0 (unused)
ip_masq_irc 1656 0 (unused)
ip_masq_cuseeme 1176 0 (unused)
ip_masq_ftp 4280 0
rtl8139 12388 1 (autoclean)
ne2k-pci 4716 1 (autoclean)
8390 6136 0 (autoclean) [ne2k-pci]
ipchainsによってIPパケットフォワーディングのポリシーを設定する.
今回は,先ほどの/etc/rc.d/rc.localの最後に次のように書いた.
各行の意味を説明する.まず,
if [ -x /sbin/ipchains ]; then
/sbin/ipchains -F
/sbin/ipchains -A forward -s 192.168.10.0/24 -j MASQ
/sbin/ipchains -P forward DENY
fi
によってすべてのチェインルールを削除する.次に,
/sbin/ipchains -F
によって,発信元が192.168.10.0/24のパケットで送信先がインターネット側のどこかのホストである場合,
マスカレードを行うように設定できる.
さらに,
/sbin/ipchains -A forward -s 192.168.10.0/24 -j MASQ
によってforwardチェインのポリシーをDENYに設定する.
これをしないと,デフォルトのポリシーがACCEPTなので,ルーティングテーブルを操作されて,
インターネット側から侵入される可能性がある.
/sbin/ipchains -P forward DENY
これで再起動すれば,IPマスカレードが有効になっている.
以下はrouteコマンドを実行してみたところである.
% /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
133.***.***.63 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
133.***.***.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 133.***.***.254 0.0.0.0 UG 0 0 0 eth0
クライアント側は,デフォルトゲートウェイをIPマスカレードマシン(192.168.10.1)に設定する.
DNSはIPマスカレードマシンが使うDNSと同じでよい.
以下はクライアントのWindows2000マシン(192.168.10.2)からwww.yahoo.comにpingしたところである.
C:\>ipconfig
Windows 2000 IP Configuration
Ethernet adapter ローカル エリア接続:
Connection-specific DNS Suffix . : ***.kyushu-u.ac.jp
IP Address. . . . . . . . . . . . : 192.168.10.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.10.1
C:\>ping www.yahoo.com
Pinging www.yahoo.akadns.net [204.71.200.75] with 32 bytes of data:
Reply from 204.71.200.75: bytes=32 time=221ms TTL=241
Reply from 204.71.200.75: bytes=32 time=160ms TTL=241
Reply from 204.71.200.75: bytes=32 time=160ms TTL=241
Reply from 204.71.200.75: bytes=32 time=160ms TTL=241
Ping statistics for 204.71.200.75:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 160ms, Maximum = 221ms, Average = 175ms
実際にIPマスカレードを使ってみた感想であるが,全く安定しており,インターネットに直接繋がれている ときと何ら変わらない. 今のところ,telnet,ftp,pop3,sendmail,httpすべて問題なく使えている. グローバルのIPアドレスを持ったプリンタにも出力できたし, 某銀行のインターネットバンキングも利用できた. 不自由な点といえば,Windowsネットワークで共有されたプリンタが使えないことくらいである.
ただし,これも解決できた.以下参照
時折,HDDのアクセス音が聞こえる程度で, IPマスカレードを行うにはPentium 120MHzのマシンでも十分すぎるほどである. おそらく486マシンでも大丈夫だろう.
このようなすばらしい機能が無償で提供されていることに敬服する.
IPマスカレードマシンにsambaを導入したところ,面白いことがわかった.
上の図は現在のLANの構成を表している. mech3上でIPマスカレードとsambaが機能している. bushではWindows2000が, goreでは Windows98がそれぞれ動いており,どちらからもmech3のIPマスカレードを利用してインターネットに アクセスできる. また,fukunm10はmech3が属するワークグループfukunmの一メンバーであり, WindowsNT Serverが動いている. mech3ではsambaが動いているから,fukunmに属する他のマシンのネットワークコンピュータから mech3をブラウズすることができる.
ここで,bushとgoreで構成されたプライベートのワークグループ名もfukunmとしてみた. すると,
bushやgoreからmech3の向こう側にあるfukunm10が見える
のである. fukunm10だけでなくfukunmに属する他のマシンも見えており, それらの共有リソースにアクセスすることができる. 下の図はbushで「近くのコンピュータ」を開いたところである.
fukunm10のネットワークコンピュータからもbushとgoreをブラウズすることができる. しかしながら,アクセスすると「\\bushが見つかりません」というメッセージが表示されアクセスできない. ためしに,mech3上で動いているnmbd(ネームサービスデーモン)を停止すると, bushやgoreからmech3の向こうにあるマシンは見えなくなった(向こう側からもbushやgoreが見えない). つまり,
nmbdがクライアントであるgoreやbushを ワークグループに参加しているように見せかけてくれている
のである. 思わず目頭が熱くなってしまった.
したがって,ワークグループへの参加は一方通行であり,goreやbushから他のマシンにアクセスすることが できても,その逆はできない. 考えてみれば,他のマシンから自分のマシンにアクセスする必要はないし, 第一,他人から勝手に自分のマシンを覗かれる心配がないので大変安全である.
このようなことが起きたのは,sambaの設定でOS levelを65以上に設定したからかもしれない. そのため,mech3がブラウズマスターになり,bushとgoreをfukunmのメンバーに加えてくれたのだろう. mech3がブラウズマスターになる以外,fukunmの他のマシンからbushとgoreを見る手段は無いはずである.
IPマスカレードを導入することでfukunmの共有リソースを利用することはあきらめていたが, まさかこのようなことができるとは思っていなかった.
いろいろ実験してみると,やはりmech3がブラウズマスターにならないとbushやgoreはfukunm10の
ワークグループに参加できないようである.
一旦,mech3をリブートするとbushの「近くのコンピュータ」からfukunm10が消えた.
mech3にログインし,nmblookupコマンドでブラウズマスターを検索したところ,
同じfukunmに属するfukunm12が
ブラウズマスターになっていることがわかった.
fukunm12でもやはりsambaがインストールしてあり,os levelを65に設定している.
fukunm12のos levelをデフォルトの20に戻し,もう一度nmblookupを実行したところ,
今度はmech3がブラウズマスターになり,
bushからfukunm10が見えるようになった.
% nmblookup -M -
querying __MSBROWSE__ on 133.***.***.255
133.***.***.207 __MSBROWSE__<01>
133.***.***.119 __MSBROWSE__<01>
133.***.***.156 __MSBROWSE__<01> <-- fukunm12
133.***.***.10 __MSBROWSE__<01>
133.***.***.82 __MSBROWSE__<01>
133.***.***.84 __MSBROWSE__<01>
133.***.***.208 __MSBROWSE__<01>
133.***.***.55 __MSBROWSE__<01>
133.***.***.58 __MSBROWSE__<01>
133.***.***.129 __MSBROWSE__<01>
133.***.***.38 __MSBROWSE__<01>
% nmblookup -M -
querying __MSBROWSE__ on 133.***.***.255
133.***.***.82 __MSBROWSE__<01>
133.***.***.208 __MSBROWSE__<01>
133.***.***.63 __MSBROWSE__<01> <-- mech3
133.***.***.10 __MSBROWSE__<01>
133.***.***.207 __MSBROWSE__<01>
133.***.***.129 __MSBROWSE__<01>
133.***.***.147 __MSBROWSE__<01>
133.***.***.55 __MSBROWSE__<01>
133.***.***.84 __MSBROWSE__<01>
133.***.***.58 __MSBROWSE__<01>
133.***.***.119 __MSBROWSE__<01>
133.***.***.38 __MSBROWSE__<01>
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||