IPマスカレードのルータとして使用するマシンには
既に、Debian GNU/Linux ( ver 2.2 --potato--)がインストールされている
必要があります。まだインストールされていない場合は
専攻サーバの基本部分構築ガイド
を参考にして, OSのインストールを行っておくこと.
解説 IPマスカレードとは?にも
書いた通り、パソコンをルータ代わりに使うには2枚のネットワークカードが
必要になります。
ルータとして機能するためには, Network Device が2つ必要になります.
もし, コンピュータにネットワークカードが 1枚しか装備されていない場合は
もう 1枚ネットワークカードを増設して下さい.
もう 1枚のネットワークカードが現在使用するネットワークカードと
異なる機種の場合, 新たなデバイスドライバをインストールする
必要があります.
カーネルの再構築を行う際に、ネットワークカードのデバイスを
選択する必要があるので、
今のうちに使用するもう1枚のネットワークカードの
製造元・型番を確認しておいてください。
ネットワークカードの用意・チェックが終わったら,
本体に取り付けてください.
(もちろん, 電源を停止してから行うように!!)
[1.2.2] ネットワークカードが 2枚の場合
既にネットワークカードが 2枚ある場合,
その 2枚のネットワークカードを使用してルータを構築します.
両方のネットワークカードが OS に認識されているか確認してください.
確認には dmesg コマンドを使用すると良いでしょう.
$ dmesg
:
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枚のネットワークカード
( eth0 と eth1 )
が表示されていれば OK です.
2 枚のネットワークカードが認識されていない場合は
[1.2.1] ネットワークカードが 1枚の場合
と同様にしてネットワークカードを
2枚認識できるようにして下さい.
[2002年度] blue に使用しているマシン
(DUAXES 社 1U Serverシリーズ : AS-701R )
には始めから 2枚のネットワークカードが装備されており,
2枚とも使用するネットワークモジュールは同じ
(ネットワークモジュールは eepro100 [EtherExpressPro/100] )
本ドキュメントでは, カーネルの再構築において
「xconfig」というツールを使用します.
このツールは X サーバ上で動くため,
X サーバの設定をおこなっておいて下さい.
[2002年度] blue に使用しているマシン
(DUAXES 社 1U Serverシリーズ : AS-701R )
は X サーバの設定が多少特殊なので,
X サーバの設定 (専攻サーバの基本部分構築ガイド)
を参考にして設定をおこなってください.
IPマスカレードのルータとして使用するためには
カーネルの再構築と必要な設定を行わなければなりません。
以下の手順に従って作業を行って下さい。
カーネルを再構築するためのパッケージをインストールします。
インストールするパッケージは以下の通りです
(すでにインストールされているものもあるかもしれません)。
- ・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.1]でインストールしたファイル
(カーネルのソース kernel-source-2.2.19.tar.bz2)
は /usr/scr/ 以下にインストールされているのでまずそこに移動します。
# cd /usr/src/
ダウンロードしてきたファイルは、本来何種類もあるファイルを tar で一つにまとめ、
さらにそれを bzip2 で圧縮をかけているものです。
そのため、まず bzip2 で解凍し、
それを tar で本来のファイル群に分けます。(「展開する」と言います。)
# bzip2 -d kernel-source-2.2.19.tar.bz2
# tar xvf kernel-source-2.2.19.tar
先ほどの作業で /usr/src/ 以下に kernel-source-2.2.19
というディレクトリができるので、
そこにシンボリックリンクを張り、そこに移動します。
# ln -s kernel-source-2.2.19 linux
# cd linux
xconfig を使用してカーネルの設定を行います。
(有効になるのは再起動後です。)
xconfig を起動させるには以下のコマンドを入力します。
# make xconfig
メニューが出るので、以下の項目を有効にしてください。
(不要なものもあるかもしれません)
- [Code maturyty lebel options]
- Prompt for development and/or incomplete code/drivers
- [Loadable module support]
- Enable loadable module support
- Kernel mudule loader
- [Networking options]
- Network firewalls
- TCP/IP networking
- Socket filtering
- IP: advanced router
- IP: firewalling
- IP: firewall packet netlink device
- IP: masquerading
- IP: ICMP masquerading
- IP: masquerading special modules support
- IP: ipautofw masq support (EXPERIMENTAL)
- IP: ipportfw masq support (EXPERIMENTAL)
- IP: ip fwmark masq-forwarding support (EXPERIMENTAL)
- IP: optimize as router not host
- IP: TCP syncookie support (not enabled per default)
- [Network device support]
- Dummy net driver support
- [Ethernet 10 or 100Mbit]
- ネットワークカードのドライバ
この項目はネットワークカードのドライバです。
[1.2.1] において確認した
ネットワークカードのドライバを選択してください。
既に2枚とも認識されている場合は設定を変更
する必要はありません。
[2002年度] blue には 2枚、同じ型のネットワークカードがついていたので
新たなドライバはインストールしませんでした。
設定が終わったら Save and Exit を選択して終了して下さい。
カーネルパッケージの作成を行います。
作成には「 make-kpkg 」コマンドを使用します。
このコマンドは、パッケージ「kernel-package」をインストールすることで
使えるようになるコマンドで、カーネルのコンパイルからDebianパッケージの作成までを
請け負います。後はできたパッケージを
dpkg -i パッケージ名
でインストールすれば
よいことになります。
まずはディレクトリ内の余分なファイルを削除するため、
# make-kpkg clean
とします。
そして、カーネルをコンパイルし、新しいカーネルをパッケージ化するため
以下のコマンドを入力します。
# make-kpkg --revision blue-2002-03-01 kernel_image
リヴィジョンナンバー ( blue-2002-03-01
)
には, ホスト名と作成日時を書き込んでください.
もし作業が滞ってしまったら、
# make-kpkg clean
からやり直して下さい。
速いマシンなら10分程度で /usr/src/ のディレクトリ内にカーネルのパッケージ
「 kernel-image-2.2.19_blue-2002-03-01_i386.deb 」
が作成されるはずです。
先ほど作成したパッケージをインストールします。以下のコマンドを入力してください。
# dpkg -i /usr/src/kernel-image-2.2.19_blue-2002-03-01_i386.deb
〔この際に、「/lib/mudules/2.2.19 を
/lib/modules/2.2.19.old など
に書き換えろ」と指示された場合は、いったんインストールを停止して、
( そのような選択肢を聞かれます )指示された通りにしてください。〕
# mv /lib/modules/2.2.19 /lib/modules/2.2.19.old
書き換えたら、インストールを開始します。
(このような指示を受けなかった場合は構わず進んでください。)
- ・起動ディスクを作成するのかどうか
- 作成するため Yes を選びます。
以前に使用した起動ディスクを使うので、探してください。
- ・どのFDDを使用するのか
- 「Which floppy drive [0-7] do you want to use?[0]」
と聞かれますが、普通のフロッピーディスクドライブのデバイス番号は
[0]なのでそのまま
を押してください。
- ・フォーマットするかどうか
- 「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 と答えてください。
以上で設定は終了です。再起動してください。
# reboot
カーネルの再構築は終了しました。後はこれを利用するために設定ファイル
を書き換えます。
ip_forward=no
となっている部分を
ip_forward=yes
に書き換えます。
もともと書いてあるものの下に以下のものを書き足します。
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
の項目を書かないで下さい。
ホストテーブルの設定を行います。
内部ネットワークでのDNSは、/etc/hosts ファイルの設定に
よって決められています。
/etc/hosts ファイルに
192.168.0.1 blue.ep.sci.hokudai.ac.jp blue
と書き込み、IPアドレスとホスト名の対応を書いておいてください。
[3.1.4] 再起動
以上でルータの設定は終了しました。これらの設定を有効にするため再起動します。
# reboot
ルータとしての機能を停止する場合、注意することがあります。
[3.2.1] 全ての設定ファイルを元に戻す
ルータとしての機能を停止する場合は、上記で編集した
3つのファイルについて全て元通りにして下さい!!
どれか1つでも中途半端に残すと、
ネットワーク全体に悪影響を及ぼす可能性があります!!
過去に
「プライベート空間からグローバル空間へのルーティングが断続的に行われない」
事態も発生しました。設定は完全に元に戻してください。
/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
[2002/03/07] 今のところ, ipchains の日本語マニュアルはできていません.
ipchains の 先輩に当たる ipfwadm コマンドは機能も似通っていて
日本語マニュアルもあるので, そちらを参考にしてみても良いでしょう.
(もちろん, "参考" にしかなりませんが)
以下のコマンドで, IP forward の基本ポリシーを「拒否」にします.
# ipchains -P forward DENY
「-P」は Policy の略で, まずこのオプションをつけた
ipchains コマンドを使用し, デフォルトでの設定を決めてしまいます.
「forward」は「転送」の意味です.
他にも「input」「output」といった表記を入れることも出来ますが
今のところ使う必要は無いので知らなくて構いません.
「DENY」は「拒否」です.
まず, デフォルトでは転送を行わないように
設定します.
この後のコマンドで, 後から転送許可を与えていきます.
以下のコマンドで, プライベートIPアドレス空間から外部(制限無し)
への転送許可を与えます.
# ipchains -A forward -s 192.168.0.0/24 -j MASQ
「-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) から
全ての宛先に対してルーティングを許可する」
という設定を追加した事になります.
以下のコマンドで, TCP 通信の制限時間を 15分から
6時間に引き伸ばします.
# ipchains -M -S 21600 0 0
「-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
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 が残り時間を示しています.
(単位は分)
IPマスカレードを使用する際には、
クライアント側もそれに応じた設定をする必要があります。
実際に動かすことが出来るのかどうか、
近くにあって使用できるパソコンをクライアント用として設定、接続し、
使えるのかどうか実験してみましょう。
ここにはネットワークの設定が書き込まれています。
既に書き込まれている値はインストール時に設定したものですが、
ここを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 までの
好きな値を入れてもらって構いません。
※これを新たに下に書き足すのではなく、既にあるものの数値を書き換えて下さい。
このファイルにはDNSサーバのIPアドレスが書いてあります。
(インストール時に設定しましたよね?)
ここの1行目を
search ep.sci.hokudai.ac.jp
とします。
ホストテーブルの設定を行います。
内部ネットワークでのDNSは、/etc/hosts ファイルの設定に
よって決められています。
/etc/hosts ファイルに
192.168.0.1 blue.ep.sci.hokudai.ac.jp blue
と書き込み、IPアドレスとホスト名の対応を書いておいてください。
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 |
ルータ、クライアント双方の設定が終了したので実際に接続して
IPマスカレードが作動しているのか確かめてみましょう。
[5.1] ハブ経由でサーバとクライアントをつなぐ
サーバ( blue )の内部ネットワーク用のネットワークカードから
いったんハブにつなぎ、そのハブからクライアント側の機械に接続してください。
[5.1.1] ハブの接続の仕方
ハブには10BASE-Tケーブル(電話のモジュラーケーブルに似たやつ)
を接続するコネクタがいくつかあると思いますが、
サーバ側からのケーブルを「 カスケード接続 」
に使用するところにはつながないでください。
他のところならどこでも構いません。
ちなみに、「カスケード接続」とはハブ同士を繋ぐ時の接続法です。
大抵は一つのハブに一箇所そのためのコネクタがついているはずです。
[5.2] 再起動
クライアント側の機械を再起動させてください。
起動したらネットワークと接続できているのか確認しましょう。
ブラウザなどで外の世界とつながっているのかを確認しても良いですが、
他にも、
2000年度 情報実験第5回「つながらないな,という時は」
などをを参照してどのようにつながっているのかなどを確認してください。
確認できたらひとまずOKです。接続できていなかったら上に張った
リンク先などを参照して原因を究明してください。