2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Linuxによる IP Masquerade

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フォワード機能が設定される。

② 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マスカレードを利用できるようにする。
② LANのプライベートアドレスは192.168.1.0/24として、「/24」とサブネットマスクに24ビットを指定し、IPアドレス192.168.1.0~192.168.1.255の範囲でIPマスカレードを利用できるようにする。
③ 発信先はインターネットすべてのアドレスを対象にする。
④ これ以外のバケットの転送は許可しない。

下の例では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を指定できる。

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

③ インターフェイス
 -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ファイルが書き換えられる。

② 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パケットのアカウント制御
② IP入力フアイアウオール制御
③ IP出カフアイアウオール制御
④ 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サーバの起動時も有効になる。

以上

コメント