IPマスカレードルータの構築   ▲戻る
最終更新日 : 2002/08/31(森川靖大)  <<  作成日 : 2001/09/09(森川靖大)
  1. 準備
  2. カーネルの再構築
  3. ルータ側の設定ファイルの編集
  4. クライアント側の設定ファイルの編集
  5. 接続

1.準備

[1.1] インストールされているOSの確認

IPマスカレードのルータとして使用するマシンには 既に、Debian GNU/Linux ( ver 2.2 --potato--)がインストールされている 必要があります。まだインストールされていない場合は 専攻サーバの基本部分構築ガイド を参考にして, OSのインストールを行っておくこと.


[1.2] 2枚のネットワークカードの認識

解説 IPマスカレードとは?にも 書いた通り、パソコンをルータ代わりに使うには2枚のネットワークカードが 必要になります。

[1.2.1] ネットワークカードが 1枚の場合

ルータとして機能するためには, Network Device が2つ必要になります. もし, コンピュータにネットワークカードが 1枚しか装備されていない場合は もう 1枚ネットワークカードを増設して下さい.

もう 1枚のネットワークカードが現在使用するネットワークカードと 異なる機種の場合, 新たなデバイスドライバをインストールする 必要があります. カーネルの再構築を行う際に、ネットワークカードのデバイスを 選択する必要があるので、 今のうちに使用するもう1枚のネットワークカードの 製造元・型番を確認しておいてください。

ネットワークカードの用意・チェックが終わったら, 本体に取り付けてください. (もちろん, 電源を停止してから行うように!!)

[1.2.2] ネットワークカードが 2枚の場合

既にネットワークカードが 2枚ある場合, その 2枚のネットワークカードを使用してルータを構築します. 両方のネットワークカードが OS に認識されているか確認してください.

確認には dmesg コマンドを使用すると良いでしょう.

$ dmesg [Enter]
        :
eepro100.c:v1.09j-t 9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html
                :
eth0: OEM i82557/i82558 10/100 Ethernet, 00:03:2D:00:03:BF, IRQ 10.
Receiver lock-up bug exists -- enabling work-around.
                :
Receiver lock-up workaround activated.
eth1: OEM i82557/i82558 10/100 Ethernet, 00:03:2D:00:05:AA, IRQ 5.
Receiver lock-up bug exists -- enabling work-around.
                :
eepro100.c: VA Linux custom, Dragan Stancevic 2000/11/15
                :

ネットワークモジュール (この場合は 「eepro100 (EtherExpressPro/100)」)と, 2枚のネットワークカード ( eth0eth1 ) が表示されていれば OK です.

2 枚のネットワークカードが認識されていない場合は [1.2.1] ネットワークカードが 1枚の場合 と同様にしてネットワークカードを 2枚認識できるようにして下さい.

[2002年度] blue に使用しているマシン (DUAXES 社 1U Serverシリーズ : AS-701R ) には始めから 2枚のネットワークカードが装備されており, 2枚とも使用するネットワークモジュールは同じ (ネットワークモジュールは eepro100 [EtherExpressPro/100] )


[1.3] X サーバ の設定

本ドキュメントでは, カーネルの再構築において 「xconfig」というツールを使用します. このツールは X サーバ上で動くため, X サーバの設定をおこなっておいて下さい.

[2002年度] blue に使用しているマシン (DUAXES 社 1U Serverシリーズ : AS-701R ) は X サーバの設定が多少特殊なので, X サーバの設定 (専攻サーバの基本部分構築ガイド) を参考にして設定をおこなってください.


2. カーネルの再構築

IPマスカレードのルータとして使用するためには カーネルの再構築と必要な設定を行わなければなりません。 以下の手順に従って作業を行って下さい。

[2.1] パッケージのインストールと展開

[2.1.1]パッケージのインストール

カーネルを再構築するためのパッケージをインストールします。

インストールするパッケージは以下の通りです (すでにインストールされているものもあるかもしれません)。

・kernel-source-2.2.19
このパッケージにはLinuxカーネルバージョン2.2.19 のソースファイルをまとめたものが入っています。 なお、このカーネルのバージョンは時々更新されます。 バージョン 2.2 における 最新のものを入手してください。

[2002年度] バージョン 2.2.19 を使用

・kernel-package
これはカーネルのコンパイルの支援を行うためのパッケージです。 このパッケージをインストールすると「 make-kpkg 」が 使用できるようになります。 このコマンドの意味は使用するところで説明します。
・bzip2
bz2形式で圧縮されているソースを伸張するために必要なパッケージです。
・bin86
カーネルのコンパイルで推奨されているパッケージです。
・tcl8.2
・tk8.2
この2つはスクリプト型のプログラミング言語で、 言語環境TclとGUIを担当するtkがセットになっています。 この後の設定をGUIで(xconfig)行う際に必要となるパッケージです。

[2.1.2] ソースの展開

先ほど[2.1.1]でインストールしたファイル (カーネルのソース kernel-source-2.2.19.tar.bz2) は /usr/scr/ 以下にインストールされているのでまずそこに移動します。

# cd /usr/src/ [Enter]

ダウンロードしてきたファイルは、本来何種類もあるファイルを tar で一つにまとめ、 さらにそれを bzip2 で圧縮をかけているものです。 そのため、まず bzip2 で解凍し、 それを tar で本来のファイル群に分けます。(「展開する」と言います。)

# bzip2 -d kernel-source-2.2.19.tar.bz2 [Enter]
# tar xvf kernel-source-2.2.19.tar [Enter]

[2.1.3] kernel-source-2.2.19 にシンボリックリンクを張る。

先ほどの作業で /usr/src/ 以下に kernel-source-2.2.19 というディレクトリができるので、 そこにシンボリックリンクを張り、そこに移動します。

# ln -s kernel-source-2.2.19 linux [Enter]
# cd linux [Enter]

[2.2] カーネルの設定

xconfig を使用してカーネルの設定を行います。 (有効になるのは再起動後です。)

xconfig を起動させるには以下のコマンドを入力します。

# make xconfig [Enter]

メニューが出るので、以下の項目を有効にしてください。 (不要なものもあるかもしれません)

[2002年度] blue には 2枚、同じ型のネットワークカードがついていたので 新たなドライバはインストールしませんでした。

設定が終わったら Save and Exit を選択して終了して下さい。


[2.3] カーネルパッケージの作成とインストール

[2.3.1] カーネルパッケージの作成

カーネルパッケージの作成を行います。 作成には「 make-kpkg 」コマンドを使用します。 このコマンドは、パッケージ「kernel-package」をインストールすることで 使えるようになるコマンドで、カーネルのコンパイルからDebianパッケージの作成までを 請け負います。後はできたパッケージを dpkg -i パッケージ名でインストールすれば よいことになります。

まずはディレクトリ内の余分なファイルを削除するため、

# make-kpkg clean [Enter]

とします。

そして、カーネルをコンパイルし、新しいカーネルをパッケージ化するため 以下のコマンドを入力します。

# make-kpkg --revision blue-2002-03-01 kernel_image [Enter]

リヴィジョンナンバー ( blue-2002-03-01 ) には, ホスト名と作成日時を書き込んでください.

もし作業が滞ってしまったら、

# make-kpkg clean [Enter]

からやり直して下さい。 速いマシンなら10分程度で /usr/src/ のディレクトリ内にカーネルのパッケージ 「 kernel-image-2.2.19_blue-2002-03-01_i386.deb 」 が作成されるはずです。

[2.3.2] カーネルパッケージのインストール

先ほど作成したパッケージをインストールします。以下のコマンドを入力してください。

# dpkg -i /usr/src/kernel-image-2.2.19_blue-2002-03-01_i386.deb [Enter]

〔この際に、「/lib/mudules/2.2.19 を /lib/modules/2.2.19.old など に書き換えろ」と指示された場合は、いったんインストールを停止して、 ( そのような選択肢を聞かれます )指示された通りにしてください。〕

# mv /lib/modules/2.2.19 /lib/modules/2.2.19.old [Enter]

書き換えたら、インストールを開始します。 (このような指示を受けなかった場合は構わず進んでください。)

[2.2.3] インストール中の質問

・起動ディスクを作成するのかどうか
作成するため Yes を選びます。 以前に使用した起動ディスクを使うので、探してください。
・どのFDDを使用するのか
「Which floppy drive [0-7] do you want to use?[0]」
と聞かれますが、普通のフロッピーディスクドライブのデバイス番号は [0]なのでそのまま [Enter] を押してください。
・フォーマットするかどうか
「Do you wish me to format the floppy?[No]」
と聞かれます。フロッピーディスクが初期化されていないのであれば、 Yes と答えて下さい。
・既に /etc/lilo.conf にある設定をフロッピーディスクに書き込むのか
「 You already have a LILO configuration in /etc/lilo.conf .
Install a boot block using the existing /etc/lilo.conf? [Yes] 」
という質問はデフォルトの Yes と答えてください。

[2.3] 再起動

以上で設定は終了です。再起動してください。

# reboot [Enter]

3. ルータ側の設定ファイルの編集

カーネルの再構築は終了しました。後はこれを利用するために設定ファイル を書き換えます。

[3.1] 各設定ファイルの編集

[3.1.1] /etc/network/options の編集

ip_forward=no

となっている部分を

ip_forward=yes

に書き換えます。

[3.1.2] /etc/network/interfaces の編集

もともと書いてあるものの下に以下のものを書き足します

iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255

up ipchains -P forward DENY
up ipchains -A forward -s 192.168.0.0/24 -j MASQ 
up ipchains -M -S 21600 0 0
up /sbin/depmod -a
up /sbin/modprobe ip_masq_ftp

eth1 にはgateway の項目を書かないで下さい。

[3.1.3] /etc/hosts の編集

ホストテーブルの設定を行います。 内部ネットワークでのDNSは、/etc/hosts ファイルの設定に よって決められています。

/etc/hosts ファイルに

192.168.0.1   blue.ep.sci.hokudai.ac.jp    blue

と書き込み、IPアドレスとホスト名の対応を書いておいてください。

[3.1.4] 再起動

以上でルータの設定は終了しました。これらの設定を有効にするため再起動します。

# reboot [Enter]

[3.2] ※ルータの機能停止の際の注意!!※

ルータとしての機能を停止する場合、注意することがあります。

[3.2.1] 全ての設定ファイルを元に戻す

ルータとしての機能を停止する場合は、上記で編集した 3つのファイルについて全て元通りにして下さい!!

どれか1つでも中途半端に残すと、 ネットワーク全体に悪影響を及ぼす可能性があります!!

過去に 「プライベート空間からグローバル空間へのルーティングが断続的に行われない」 事態も発生しました。設定は完全に元に戻してください。


[3.3] ipchains コマンドについて

/etc/network/interfaces ファイルにおいて以下のような記述が あったのを覚えていますか?

up ipchains -P forward DENY
up ipchains -A forward -s 192.168.0.0/24 -j MASQ 
up ipchains -M -S 21600 0 0

行頭に「up」がついている行は, そのインターフェースが利用できる時に 実行される命令を示しています.

つまり, 今回の場合は eth1 (2枚目のネットワークカード) が利用できる時に 上記の ipchains 以下のコマンドが実行されていた事になります.

実は, IPマスカレード の機能は この ipchains コマンドによって設定されています.

以下では, 今回使用されている ipchains コマンドについて簡単に 解説を行っておきます. より詳しい事が知りたい場合は ipchains のマニュアルを 見てみると良いでしょう.

$ man ipchains [Enter]

[2002/03/07] 今のところ, ipchains の日本語マニュアルはできていません. ipchains の 先輩に当たる ipfwadm コマンドは機能も似通っていて 日本語マニュアルもあるので, そちらを参考にしてみても良いでしょう. (もちろん, "参考" にしかなりませんが)

[3.3.1] 基本ポリシーの設定

以下のコマンドで, IP forward の基本ポリシーを「拒否」にします.

# ipchains -P forward DENY [Enter]

「-P」は Policy の略で, まずこのオプションをつけた ipchains コマンドを使用し, デフォルトでの設定を決めてしまいます.

「forward」は「転送」の意味です. 他にも「input」「output」といった表記を入れることも出来ますが 今のところ使う必要は無いので知らなくて構いません.

「DENY」は「拒否」です. まず, デフォルトでは転送を行わないように 設定します. この後のコマンドで, 後から転送許可を与えていきます.

[3.3.2] 転送許可の設定

以下のコマンドで, プライベートIPアドレス空間から外部(制限無し) への転送許可を与えます.

# ipchains -A forward -s 192.168.0.0/24 -j MASQ [Enter]

「-A」は Append の略で, この後ろに書いてある 設定を現設定に「追加」します.

「-s」は source の略で, 「発信元」を意味し, この場合は 192.168.0.0 〜 192.168.0.255 を意味しています. 後ろの「/24」はネットマスクを意味し, これは「/255.255.255.0」と等価です.

「-j MASQ」は その前で指定された発信元 (-s で指定されているアドレス) から宛先への通信をマスカレード することを示します.

なお, 「宛先」の指定は「-d (destination)」で行いますが, 全ての宛先を指定する場合にはこのオプションは省略できます.

つまり, ここでは 「発信元 (192.168.0.0 〜 192.168.0.255) から 全ての宛先に対してルーティングを許可する」 という設定を追加した事になります.

[3.3.3] タイムアウトの設定

以下のコマンドで, TCP 通信の制限時間を 15分から 6時間に引き伸ばします.

# ipchains -M -S 21600 0 0 [Enter]

「-M」は Masquerading の略で, この後ろに書いてある 「-S」オプションと組み合わせて使います.

「-S」は Set timeout velues の略で, IPマスカレードにおける通信の制限時間を設定します.

厳密に言うと 無通信時の制限時間です. IPマスカレードのデフォルトの設定では 最後の通信が行われてから一定時間経過すると ルーティングを切断するようになっており, その「一定時間」を設定するのが上記のオプションです.

3 つ値が与えられていますが, これらはそれぞれ, TCP接続, 終了通知(FINパケット)を受けたTCP接続, UDP接続 に対する指定になっています. (それぞれのデフォルト値は 15分, 2分, 5分 になっています)

指定は秒数で行います。ちなみに 0 を与えた場合は, 現在の設定をそのまま継承することになります.

[管理者の独り言] 専攻ネットワーク内では ssh を多用するわけだが, はっきり言って 15 分は短すぎる. 何か少し他の作業をしていたり, 何か考えているだけで これぐらいの時間は過ぎてしまい, 強制切断されてしまう. とりあえず現在は 6時間 (21600 秒) に指定してあるが, これだけあると, 今のところ強制切断はされていない.

なお, 残り時間は IPマスカレードを行っているマシンで 以下のコマンドを使用することで見ることが出来ます.

$ netstat -Mn [Enter]
IP masquerading entries
prot   expire source               destination          ports
tcp   2:15.99 192.168.0.133        133.87.45.72         4152 -> 80 (64531)
tcp 343:90.11 192.168.0.143        133.87.45.71         4149 -> 22 (64528)
udp   1:01.05 192.168.0.150        133.87.45.70         4458 -> 53 (62004)
....

上記の expire が残り時間を示しています. (単位は分)


4. クライアント側の設定ファイルの編集

IPマスカレードを使用する際には、 クライアント側もそれに応じた設定をする必要があります。

実際に動かすことが出来るのかどうか、 近くにあって使用できるパソコンをクライアント用として設定、接続し、 使えるのかどうか実験してみましょう。

[4.1] Debian GNU/Linux における設定ファイルの編集

[4.1.1] /etc/network/interfaces の編集

ここにはネットワークの設定が書き込まれています。 既に書き込まれている値はインストール時に設定したものですが、 ここをIPマスカレードを利用するために以下のように書き換えます

iface eth0 inet static
        address 192.168.0.10
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        geteway 192.168.0.1

「 address 」の行には 192.168.0.2 から 192.168.0.254 までの 好きな値を入れてもらって構いません。

※これを新たに下に書き足すのではなく、既にあるものの数値を書き換えて下さい

[4.1.2] /etc/resolv.conf の編集

このファイルにはDNSサーバのIPアドレスが書いてあります。 (インストール時に設定しましたよね?)

ここの1行目を

search ep.sci.hokudai.ac.jp

とします。

[4.1.2] /etc/hosts の編集

ホストテーブルの設定を行います。 内部ネットワークでのDNSは、/etc/hosts ファイルの設定に よって決められています。

/etc/hosts ファイルに

192.168.0.1   blue.ep.sci.hokudai.ac.jp    blue

と書き込み、IPアドレスとホスト名の対応を書いておいてください。




[4.2] Windows における設定

Windows の設定はLinuxよりは容易にできます。 (ちなみに画面はWindows 98 Second Edition のものです)

[4.2.1] IP アドレス等の設定

マイコンピュータをクリックして, コントロールパネルを開きます
コントロールパネルから「ネットワーク」をクリックします。
そして「TCP/IP → (ネットワークカード名)」を選択します。
下にある表にしたがって、IP アドレス, ネットマスク, ゲートウェイ, ホスト名, ドメイン名, DNS サーバを 正しく設定して下さい。


ルータ(blue) 以下に接続するローカル機での設定項目
設定タグ 詳細項目 答え方
IP アドレス IP アドレス 192.168.0.2 〜 192.168.0.254
(どれか一つを指定)
ネットマスク 255.255.255.0
ゲートウェイ ゲートウェイ 192.168.0.1
DNS設定 ホスト名 接続するマシンのホスト名(必ず設定してください)
ドメイン名 ep.sci.hokudai.ac.jp
DNS サーバ 133.87.45.70, 133.87.45.66, 133.87.1.11



5.接続

ルータ、クライアント双方の設定が終了したので実際に接続して IPマスカレードが作動しているのか確かめてみましょう。

[5.1] ハブ経由でサーバとクライアントをつなぐ

サーバ( blue )の内部ネットワーク用のネットワークカードから いったんハブにつなぎ、そのハブからクライアント側の機械に接続してください。

[5.1.1] ハブの接続の仕方

ハブには10BASE-Tケーブル(電話のモジュラーケーブルに似たやつ) を接続するコネクタがいくつかあると思いますが、 サーバ側からのケーブルを「 カスケード接続 」 に使用するところにはつながないでください。 他のところならどこでも構いません。 ちなみに、「カスケード接続」とはハブ同士を繋ぐ時の接続法です。 大抵は一つのハブに一箇所そのためのコネクタがついているはずです。


[5.2] 再起動

クライアント側の機械を再起動させてください。 起動したらネットワークと接続できているのか確認しましょう。 ブラウザなどで外の世界とつながっているのかを確認しても良いですが、 他にも、 2000年度 情報実験第5回「つながらないな,という時は」 などをを参照してどのようにつながっているのかなどを確認してください。 確認できたらひとまずOKです。接続できていなかったら上に張った リンク先などを参照して原因を究明してください。


▲戻る     作成日:2001/09/09(森川靖大)