Kozupon.com    
 
 IPマスカレード!


Linuxサーバに接続したモデム/TAを共有できれば、LAN内にあるすべてのコンピュータからインターネットに接続できることになる。これを実現する仕組みが IPマスカレード である。

ちなみに、筆者の仕事先のネットワークも専用線に、この仕組みを活用している。


1.IPマスカレードの仕組み

LinuxサーバがISPにダイヤルアップ接続している時は、ISPからLinuxサーバに対してグローバルアドレスという公(おおやけ)のアドレスが割り当てられている。グローバルアドレスが割り当てられるのは当然のことながらLinuxサーバだけなので、プライベートアドレスが割り当てられているLAN内のほかのコンピュータはLinuxサーバに接続されたモデム/TAを経由して外に出ることができない。これを解決するためにIPマスカレードという仕組みを利用する。LinuxサーバでIPマスカレードを動作させることで、LAN内のプライベートアドレスを、LinuxサーバがISPから割り当てられたグローバルアドレスに書き換えてインターネットに送り出す。たとえば図1のクライアントマシンpuppyから、Webブラウザを使ってhttp://〜というページを間覧するリクェストを出したとする。

図1

puppyでは、あらかじめデフォルトゲートウェイにLinuxサーバであるcat2のプライベートアドレスを設定しておくだけでよい。HTTPリクエストはcat2に送られ、IPマスカレードが動作しているcat2は外部宛てのTCP/IPパケットと判断すると、送信元のプライベートアドレスを自身に割り当てられているグローバルアドレスに書き換えて外部に送信しょうとする。もしcat2上でPPxPによるオンデマンド設定がしてあれば、cat2はこのタイミングでISPに対して自動接続を行うので、LAN内のどのコンピュータでもPPP接続操作をする必要はない。リクエストに対して外部から戻ってきたパケットは、cat2が発信元puppyのブライベートアドレスに書き換えてLAN内部に送り返す。したがってpuppyはあたかも自身にモデム/TAが接続されているかのようにインターネットにアクセスすることができる。このようにIPマスカレードを設定することで、1つのグローバルアドレスをLAN内で共有することができるのだ。IPマスカレードには次のような特徴がある。

1)LAN内部のコンピユータはデフォルトゲートウェイとしてLinuxサーバを指定するだけで、ほかの設定は不要。

2)LAN内部のユーザーは、Linuxサーバを意識することなく透過的にインターネットに接続することができる。

3)IPマスカレードは「1対多」のIPアドレス変換を行うため、ISPなどから割り当てられた1つのグローバルアドレスを複数のコンピユータで利用することができる。

4)インターネット側からLANを見ると、ゲートウエイとなるLinuxサーバのみが見える。パケットをフィルタリングする機能があるので、ファイアウォールになる

IPマスカレードの設定を行う前に注意することがある。ディストリビューションが採用しているLinuxカーネルの2.0.xと2.2.xとではIPマスカレード機能の一部に違いがある点だ。これは、IPマスカレードがカーネルの機能の一部として取り込まれているためである。どちらのカーネルもIPマスカレード用にカーネルが構築されていることが前提となるが、たいていのディストリビューションに含まれる標準カーネルはそのままで大丈夫だ。IPマスカレードを使うために、まず、IPフォワード機能をオンにする。続けてIPマスカレード上で利用するプロトコル(FTPやRealAudioなど)に合わせてモジュールをロードする。そして、最後にコマンドによってパケットの転送、フィルタリングを設定するわけだが、この設定は、VineLinux1.1やRedHatLinux5.2などのカーネル2.0.xではipfwadmコマンドを使用する。一方、最近のディストリビユーションであるLASER5Linux6.0やRedHatLinux6.0以降、TurboLinux4.2などのカーネル2.2.xではipchainsコマンドを使用する。

画面1 Linuxconfを利用してIPフォワーディングを有効にする


2.カーネル2.2におけるIPマスカレード

ここでは、ipchainsを使ったLASER5Linux6.0での設定方法を紹介する。

■ lPフオワード機能の設定
 まずIPフォワード機能をオンにする。Linuxconfを使う方法と、エディタで/etc/sysconfig/networkファイルを直接修正する方法の2通りがあり、いずれの場合もroot権限で実行する。

@ Linuxconfで設定
GNOMEメニユーの[ システム ]からLinuxconfを起動して、[ ネットワーキング ](LASER5Linux6.0Rel.2では[ ネットワーク経路 ])の中の[ デフォルト ](Rel.2では[ 標準ゲートウェイ ])を選択する(画面1)。”ルーティングを有効化”をチェックして、左下の”終了”をクリックする。次に[ 実際に変更分を実行する ]をクリックすると、/etc/sysconfig/networkファイルが書き換えられ、IPフォワード機能が設定される。

A networkファイルをエディタで修正
/etc/sysconfig/networkファイルは先頭から、以下のようになっている。

NETWORKING=yes
FORWARD_IPV4=false
HOSTNAME="cat2.home-lan.ne.jp"

この2行目を「 FORWARD_IPV4=yes 」に書き換えて保存する。networkファイルを書き換えたら、

# /etc/rc.d/init.d/network restart

と人力しネットワークを再起動する。設定が終了したら、catコマンドで/proc/sys/net/ipv4/ip_forwardを見て確認する。" 1 "が表示されればIPフォワードが設定されている。" 0 "と表示されたときは、正しく動作していない。

# cat /proc/sys/net/ipv4/ip_forward

1

■ 必要なモジユールの組み込み
IPマスカレードによってIPパケットのアドレスを変換する過程で、FTP、IRC、RealAudio、CU-SeeMeなどのアプリケーションは、そのままではアドレスを変換して通過することができない。よってこれらのアプリケーションをIPマスカレード越しに利用するには、それぞれに対応したモジュールをあらかじめ組み込んでおく必要がある。
モジュールは、/lib/modules/2.2.x/ipv4ディレクトリに置かれている。ディレクトリ名のx部分はディストリビューション、カーネルのバージョンなどによって異なる。FTP、CU-SeeMe、IRC、Quake、RealAudio、VDOLiveについてのモジュールがデフォルトでインストールされているはずなので、必要なものをIPマスカレードの経路設定時にロードしておく。モジユールのロードは、depmod、modprobeコマンドで行う。

# /sbin/depmod -a
# /sbin/depmod ip_masq_ftp.o
# /sbin/depmod ip_masq_irc.o
# /sbin/depmod ip_masq_raudio.o
# /sbin/depmod ip_masq_cuseeme.o
# /sbin/depmod ip_masq_vdolive.o

モジュールがロードされたかどうかはlsmodコマンドで確認できる。

# lsmod

 

Module pages Used by  
ip_masq_ftp 1 0  
ip_masq_irc 1 0  
ip_masq_raudio 1 0  
ip_masq_cuseeme 1 0  
ip_masq_vdolive 1 0  
userlink 1 1  
tulip 6 1 (autoclean)

■ IPマス力レードの設定
ここでは以下のような転送ポリシーを設定する。

@ LAN内部からインターネットに接続できるように、アドレス変換を行ってIPマスカレードを利用できるようにする。
A LANのプライベートアドレスは192.168.1.0/24として、「/24」とサブネットマスクに24ビットを指定し、IPアドレス192.168.1.0〜192.168.1.255の範囲でIPマスカレードを利用できるようにする。
B 発信先はインターネットすべてのアドレスを対象にする。
C これ以外のバケットの転送は許可しない。

下の例ではLAN内の192.168.1.0〜255のIPアドレスを変換して外部と接続する。そしてそれ以外のパケットを転送しないようにする。

# ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ
# ipchains -P forward DENY

■ IPフィルタリング
ipchainsは細かくパケット転送の許可、拒否を設定することができる。たとえぱLAN内部にあるWindowsマシンからNetBIOSプロトコルが発せられた場合に自動的に接続(転送)動作に入ってしまうのを防ぐ場合や、外部から特定のサービス要求を拒否する場合などに利用できる。

@ ターゲット
 -jに続けてMASQ、ACCEPT、DENY、REDIRECT、REJECT、RETURNを指定できる。

A アドレスの指定
 -sでソースアドレス、-dでディスティネーションアドレスを設定する。また-pでプロトコルを指定する。

B インターフェイス
 -iでインターフェイスを指定できる。ppp0、ppxpを利用している場合はul0(userlink)などと指定する。またポート番号はxxx : xxxのようなかたちで範囲を指定する。これらを簡単に組み合わせると、次の例のようなことができる。

userlinkを使用し、LAN内からポート番号137〜139のNetBIOSパケットの外部への転送を拒否する(書式1)。

 外部からeth0を経由して入ってくるバケットで、発信元アドレス192.168.1.0〜255(IPアドレスを偽り、クラッキング目的での侵入の可能性がある)のパケットを拒否する(書式2)。設定を終えたら・Lオプションを付けて転送設定を確認しておく。最後に/sbin/modprobeとipchainsの設定を、/etc/rc.d/rc.localファイルなどに書き加えておく。これでLAN内のほかのコンピユータで、ゲートウェイをLinuxマシンのIPアドレスに設定しておけばIPマスカレード機能を利用できる。

# ipchains -A forward -i u10 -p tcp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY

# ipchains -A forward -i u10 -p udp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY

書式1 NetBIOSパケットの外部への転送を拒否する

# ipchains -A input -i eth0 -s 192.168.1.0/24 -d 0/0 -j DENY

書式2 IPアドレスを偽って外部から入ってくるパケットを拒否する


3. カーネル2.2.xにおけるIPマスカレード

VineLinux1.0/1.1やRedHatLinux5.2のカーネル2.0.36は、あらかじめIPマスカレードを利用できるように作られている。ここではVineLinux1.1およびRedHatLinux5.2をベースに解説する。

■ IPフォワード機能の設定
 まずIPフォワード機能をオンにする。XWindow System上のnetconfigツールを使う方法と、エディタで/etc/sysconfig/networkファイルを直接修正する方法の2通りがあり、いずれの場合もroot権限で実行する。

@ 「 NetworkConfigurator 」で設定
 X上のコントロールパネルから「 NetworkConfigurator 」を起動してツールバー「Routing」を押す。一番上の行にある"NetworkPacketForwarding(IPv4) "の先頭にあるチェックボックスをクリックして(赤色になる)、設定を「 Save 」する(画面2)。この結果/etc/sysconfig/networkファイルが書き換えられる。

A networkフアイルを工ディタで修正
/etc/sysconfig/networkファイルの修正の方法は、カーネル2.2.xの場合と同様であるので、前項を参照のこと。どちらの方法でも、networkファイルを書き換えたら、

# /etc/rc.d/init.d/network restart

を実行してネットワークを再起動する。
その後、catコマンドで/proc/sys/net/ipv4/ipforwardを見て、" 1 "が表示されればIPフォワードが有効になっている。

■ 必要なモジユールの組み込み
カーネル2.2のipchainsの場合と同様に/sbin/modprobeコマンドを使って必要なものを組み込んでおく。詳細は前項を参照のこと。

■ lP転送の設定
転送設定を行うのはipfwadmコマンドだ。ipfwadmは、

@ LinuxカーネルでのlPパケットのアカウント制御
A IP入力フアイアウオール制御
B IP出カフアイアウオール制御
C IP転送ファイアウォール

を設定する機能をもつ。それぞれの制御は順に-A、-I、-O、-Fというオプションを付けて条件を設定できる。このほかにもいくつものオプションがあるので、manを実行してオンラインマニュアルを調べてみるとよい。カーネル2.2.xの場合と同じようにカーネルの再構築の設定ipfwadmコマンドでIPマスカレードの設定を行う。

# ipfwadm -F -a accept -m -S 192.168.1.0/24 -D 0.0.0.0/0
# ipfwadm -F -p deny

画面2 "Network Configurater"を利用してIPフォワードを有効にする

■ lPマスカレード設定の確認
ipfwadm -F -l 」コマンドで正しく設定できたか確認してみよう。LAN内部から、任意のアドレス宛にアクセスできることがわかるだろう。あとはLAN内部のコンビユータでLinuxサーバをゲートウェイに設定すればよい。うまく動作したらモジュールの組み込みとipfwadmコマンドの設定を /etc/rc.d/rc.local に追加すれば、次回Linuxサーバの起動時も有効になる。


 
 
 



Copyright 2005 Kozupon.com.