IPマスカレードを設定する(Vine2.1.5)
First Edition 2001.7.31

DHCPサーバーにするで、以下の図の構成を想定し、設定しました。
しかし、このままではLinux BOXしかインターネットに接続できません。Client Box をインターネット 接続させるためには、Linux BOX内でIPマスカレードを設定する必要があります。
IPマスカレードとは、Client Boxtからインターネットへの要求をすべてLinux BOXからの要求だと 見せかける仕掛けです。これにより、インターネットに接続するコンピュータは1つですみます。
すなわち、現在枯渇しつつあるグローバルIPアドレスを有効に活用することができるわけです。 ネットワークカードによるインターネット接続に限らず、PPP接続でもOKです。


  1. コマンドを実行する(2001.7.31)
  2. ルーティングテーブルを確認する(2001.7.31)
  3. コンピュータ起動時に自動的にIPマスカレードを実行させる(2001.7.31)
  4. クライアント(Client Box)の設定(2001.7.31)

コマンドを実行する

いままでは、IPマスカレードを使用するには、カーネルの再構築が必要でしたが、Vine Linux2.1ではデフォルトでモジュール化されているので、必要なくなりました。
ネットワークカードの2枚挿しをしたあと、IPマスカレードを設定するためには、ルートになって以下を実行します。
# /sbin/modprobe ip_masq_ftp
# /sbin/modprobe ip_masq_irc
# /sbin/modprobe ip_masq_quake
# /sbin/modprobe ip_masq_raudio
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward
最初の4行の意味は、パケットをゲートウェイ(ここでは、Linux BOX)を通して外部(Internet)に出すか どうかを指定します。どのようなパケットが指定できるかは、/lib/modules/2.2.14-1vl6/ipv4 ディレクトリを見てください。ちなみに上から、FTP、IRC、QUAKE(ゲーム)、realaudioです。

5行目の意味は、パケットフォワードポリシー(-P forward)を拒否する(DENY)する事を示しています。 まず最初にパケットフォワーディングを全て拒否するのです。その後、必要なルールだけを追加していきます。
6行目の意味はこうです。
ipchainsコマンドにより、フォワードルールを追加(-A forward部分)する。ソースアドレス192.168.1.0 (-s 192.168.1.0部分)のネットワークパケットを他の場所に転送するチェインを指定し、デスティネーション アドレスとして自分自身0.0.0.0(-d 0.0.0.0/0部分)を指定し、パケットをマスカレードする (-j MASQ部分)という意味です。ディスティネーションアドレスを自分自身にすることにより、 自分のルーティング設定にしたがってマスカレードされたパケットの配送を行うことを示しています。 詳しくは、man ipchainsをご覧ください。
簡単にいうと、設定したい家庭内LANのネットワーククラスを[192.168.1.0/24]の部分に設定すれば動きます。 クラスCのプライベートアドレスであれば、192.168.1.0/24、192.168.0.0/24などと指定します。

最後の行は、カーネルにパケットのフォワーディングを許可することを知らせます。

ルーティングテーブルを確認する

IPマスカレードにおいて、パケットを正しく配送するためにルーティングの情報を確認する必要があります。 私の家では以下のように出力されました。
$ netstat -r
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インターフェース
192.168.1.0     *               255.255.255.0   U         0 0          0 eth1
aaa.bbb.ccc.0   *               255.255.248.0   U         0 0          0 eth0
127.0.0.0       *               255.0.0.0       U         0 0          0 lo
default         hogehoge        0.0.0.0         UG        0 0          0 eth0
1行目:192.168.1.0/255.255.255.0宛のパケットはeth1へ送る
2行目:aaa.bbb.ccc.0/255.255.248.0宛のパケットはeth0へ送る
3行目:127.0.0.0/255.0.0.0宛のパケットはloへ送る
4行目:1,2,3行目以外の宛先のパケットはeth0へ送る

となっています。これらのルーティングテーブルはネットワークカードを設定して動作させると自動的に 追加されたものです。その他細かい経路を設定したい場合は、routeコマンドを使って行います。

しかし、このテーブルだけ見ると、eth1に届いたパケットはeth0へは届かないように思えますが、 IPマスカレードを使用するとeth1からeth0の間でパケットの宛先を変換してくれます。eth1からeth0へ、eth0から eth1へ変換してくれますので、内部LANから外部へ、外部から内部LANへパケットが行き来 できるわけです。

コンピュータ起動時に自動的にIPマスカレードを実行させる

起動するたびに先ほどのコマンドを打ち込むのは面倒なので、以下のファイルを編集することにより 自動的にIPマスカレードを実行させることができます。

/etc/rc.d/rc.localの最後に以下を追記する
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_raudio
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ

/etc/sysctl.confの赤字部分を編集する
# Disables packet forwarding
net.ipv4.ip_forward = 1
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables automatic defragmentation (needed for masquerading, LVS)
net.ipv4.ip_always_defrag = 0
# Disables the magic-sysrq key
kernel.sysrq = 0
# SYN flood protection (not enabled by default)
net.ipv4.tcp_syncookies = 0

以上で、いちいちコマンドを打ち込む必要がなくなりました。

クライアント(Client Box)の設定

クライアントとしては、Windowsマシン、Linuxマシンなどがあります。
DHCPサーバーにする で、ネットワークカードeth1にサーバーを設定していますので、上の図のClient Boxの設定は簡単です。

Windowsマシンの設定
コントロールパネル-ネットワークで、ネットワークカードのTCP/IPのプロパティを開き、 IPアドレスタブをクリックし、IPアドレスを自動的に取得するをチェックします。これだけです。



Linux BoxをDHCPサーバーにしていない場合は、固定プライベートアドレスとネットマスクとゲートウェイと DNSを設定して下さい。

Linuxマシンの設定
DHCPクライアントにするを見てください
クライアントPCをDHCPクライアントにしていない場合は、IPアドレスとしてプライベートアドレス、 ネットマスク、DNSサーバーのホスト名とアドレス、ゲートウェイアドレスを設定すれば、同様に IPマスカレードによりアクセスできます。でもどうせならLinux BOXに DHCPサーバーを立てましょう。


[HOME]
since 2001.4.22