IPマスカレード

RedHat 6.2Jのインストール
2枚目のNICの装着
パケットフォワーディングを有効にする
ヘルパモジュールのロード
ipchainsの設定
client側の設定
実際に使ってみて

sambaを導入してWindowsのワークグループに参加
ブラウズマスターの設定



今までは,普段仕事に使っているWin2000マシンWinGateをインストールして,サブマシンからも インターネットにアクセスできるようにしていた. しかし,サブマシンをいつも使っているわけではないのに,メインマシンでプロキシのサービスを常時動かしているのは CPUパワーの浪費である.

今回,以前いた研究室から旧型マシンを拝借してきたので,Linuxをインストールして IPマスカレードを使うことにした. このマシンのCPUはPentium 120MHz, メモリは32MB,HDDは1.2GBであり,Windows98や2000で使うのは難しいが, Linuxならサクサク動く. IPマスカレード専用ならカーネル本体と一部のモジュールだけインストールすればよく, GNOMEなどの洒落たウィンドウマネージャは要らない.

インストールと設定方法を以下にまとめた.


RedHat 6.2Jのインストール

まず,雑誌の付録として付いてきた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の装着

一旦電源を落とし,2枚目のNIC(Planex FW-100TX)を差して再度起動した. Linuxでは起動時に新しいハードウエアを検出すると,Kudzuと呼ばれるコンフィギュレータが起動する. Kudzuが起動した場合,Enterキーを押すと検出されたハードウエアが表示される. 何もキーを押さずに30秒経過すると,そのまま起動プロセスを続ける. 実際やってみるときちんと2枚目のNICが検出されたが,残念ながらKudzuからは2枚目のNICの設定が行えないらしいので, Enterを押してハードウエア情報が表示された後,[Do Nothing]を選択して後ほど設定を行うことにした.

ネットワークの設定はnetconfというツールを用いる. これはコンソールベースのソフトであり,他のマシンからtelnetで使うこともできる. rootでログインし,

% netconf
とすればnetconfが起動する. 2枚目のNICのIPアドレス等を設定するために,[Basic host information]を選択する. 追加したNICはAdaptor2となる. カーソルキーで画面を下にスクロールするとAdaptro2の設定項目が現われるので,次のように設定する.

最後に[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を以下のように書き換える.

# Disables packet forwarding
net.ipv4.ip_forward = 1
初期状態では値が0になっている. 1に書き換えて再起動するとIPパケットフォワーディングが有効になっている. これを確認するには,
% cat /proc/sys/net/ipv4/ip_forward
1
となればよい.
ヘルパーモジュールのロード

LinuxのIPマスカレードでは,すべてのプロトコルをカーネル内部で処理できるようになっていない. FTPなどの特殊なコネクションを持つプロトコルに関しては,ヘルパモジュールと呼ばれる 外部モジュールによって処理される.

これらのモジュールは,RedHat Linux 6.2Jの場合,/lib/modules/2.2.14-5.0/ipv4に置かれる

% 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
これらのモジュールを起動時に読み込むためには,/etc/rc.d/rc.localに次のように書く. 場所は最後でよいだろう.
# 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
IPマスカレードとネットワークアプリケーションについてはここに 膨大なデータがある. 再起動後,lsmodを実行して次のように表示されればOKである.
% /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]
2枚のNICのドライバモジュールもロードされているのがわかる.


ipchainsの設定

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
によってすべてのチェインルールを削除する.次に,
  /sbin/ipchains -A forward -s 192.168.10.0/24 -j MASQ
によって,発信元が192.168.10.0/24のパケットで送信先がインターネット側のどこかのホストである場合, マスカレードを行うように設定できる. さらに,
  /sbin/ipchains -P forward DENY
によってforwardチェインのポリシーをDENYに設定する. これをしないと,デフォルトのポリシーがACCEPTなので,ルーティングテーブルを操作されて, インターネット側から侵入される可能性がある.

これで再起動すれば,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

client側の設定

クライアント側は,デフォルトゲートウェイを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マシンでも大丈夫だろう.

このようなすばらしい機能が無償で提供されていることに敬服する.


sambaを導入してWindowsのワークグループに参加

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に設定している.

% 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>
fukunm12のos levelをデフォルトの20に戻し,もう一度nmblookupを実行したところ, 今度はmech3がブラウズマスターになり, bushからfukunm10が見えるようになった.
% 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>


お問い合わせはメールにて: akasaka@klc.ac.jp

戻る
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送