IPマスカレードのルータとして使用するマシンには
既に、Debian GNU/Linux ( ver 3.0 --woody--)
がインストールされている必要があります。
まだインストールされていない場合は
専攻サーバの基本部分構築ガイド
を参考にして, OSのインストールを行っておくこと.
解説 IPマスカレードとは?にも
書いた通り、パソコンをルータ代わりに使うには2枚のネットワークカードが
必要になります。
ルータとして機能するためには, Network Device が2つ必要になります.
もし, コンピュータにネットワークカードが 1枚しか装備されていない場合は
もう 1枚ネットワークカードを増設して下さい.
もう 1枚のネットワークカードが現在使用するネットワークカードと
異なる機種の場合, 新たなデバイスドライバをインストールする
必要があります.
カーネルの再構築を行う際に、ネットワークカードのデバイスを
選択する必要があるので、
今のうちに使用するもう1枚のネットワークカードの
製造元・型番を確認しておいてください。
ネットワークカードの用意・チェックが終わったら,
本体に取り付けてください.
(もちろん, 電源を停止してから行うように!!)
[1.2.2] ネットワークカードが 2枚の場合
既にネットワークカードが 2枚ある場合,
その 2枚のネットワークカードを使用してルータを構築します.
両方のネットワークカードが OS に認識されているか確認してください.
確認には dmesg コマンドを使用すると良いでしょう.
$ dmesg ![[Enter]](./images/return.gif)
:
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枚認識できるようにして下さい.
[2003年度] blue に使用しているマシン
(SUPERSURVER 6012P-6)
には始めから 2枚のネットワークカードが装備されています.
使用するネットワークモジュールは EtherExpressPro/100
と Intel PRO/1000 です. この時点では EtherExpressPro/100
しか認識できません.
本ドキュメントでは, カーネルの再構築において
「xconfig」というツールを使用します.
このツールは X サーバ上で動くため,
X サーバの設定をおこなっておいて下さい.
[2003 年度] カーネルの再構築には xconfig ではなく
menuconfig を用いたためこの設定はとくに必要ではなかった.
IPマスカレードのルータとして使用するためには
カーネルの再構築と必要な設定を行わなければなりません。
以下の手順に従って作業を行って下さい。
カーネルを再構築するためのパッケージをインストールします。
インストールするパッケージは以下の通りです
(すでにインストールされているものもあるかもしれません)。
- ・kernel-source-2.4.20
- このパッケージにはLinuxカーネルバージョン2.4.20
のソースファイルをまとめたものが入っています。
なお、このカーネルのバージョンは時々更新されます。
バージョン 2.4 における
最新のものを入手してください。
[2003年度] バージョン 2.4.20 を使用
- ・kernel-package
- これはカーネルのコンパイルの支援を行うためのパッケージです。
このパッケージをインストールすると「 make-kpkg 」が
使用できるようになります。
このコマンドの意味は使用するところで説明します。
- ・bzip2
- bz2形式で圧縮されているソースを伸張するために必要なパッケージです。
- ・bin86
- カーネルのコンパイルで推奨されているパッケージです。
- ・libncurses5-dev
- menuconfig を使って設定を行う際に必要となるパッケージです。
先ほど[2.1.1]でインストールしたファイル
(カーネルのソース kernel-source-2.4.20.tar.bz2)
は /usr/scr/ 以下にインストールされているのでまずそこに移動します。
# cd /usr/src/
ダウンロードしてきたファイルは、本来何種類もあるファイルを tar で一つにまとめ、
さらにそれを bzip2 で圧縮をかけているものです。
そのため、まず bzip2 で解凍し、
それを tar で本来のファイル群に分けます。(「展開する」と言います。)
# bzip2 -d kernel-source-2.4.20.tar.bz2
# tar xvf kernel-source-2.4.20.tar
先ほどの作業で /usr/src/ 以下に kernel-source-2.4.20
というディレクトリができるので、
そこにシンボリックリンクを張り、そこに移動します。
# ln -s kernel-source-2.4.20 linux
# cd linux
menuconfig を使用してカーネルの設定を行います。
(有効になるのは再起動後です。)
xconfig を起動させるには以下のコマンドを入力します。
# make menuconfig
メニューが出るので、以下の通りに設定.
(不要なものもあるかもしれません)
ネットワークカードのサポート
Network Device Support --->
Ethernet (10 or 100 Mbit) --->
[*] EISA, VLB, PCI and on board controllers
<*> DECchip Tulip (dc21x4x) PCI support
Ethernet (1000 Mbit) --->
<*> Intel PRO/1000 Gigabit Ethernet Support (NEW)
RAID コントローラのサポート
Scsi Support --->
Scsi low-level drivers --->
<*> Adaptec I2O RAID Support
SMPのサポートを外す
Processor type and features
[ ] Symmetric multi-processing support
APMを有効にする
General setup
[*] Advanced Power Management BIOS support
[ ] Ignore USER SUSPEND (NEW)
[*] Make CPU Idle calls when idle (NEW)
[*] Enable console blanking using APM (NEW)
iptables で IPマスカレードが行えるようにする
Networking options
[*] Network packet filtering (replaces ipchains)
[*] Socket Filtering
[*] TCP/IP networking
[*] IP: advanced router
[*] IP: advanced router
[*] IP: policy routing (NEW)
[*] IP: use netfilter MARK value as routing key (NEW)
[*] IP: fast network address translation (NEW)
[*] IP: equal cost multipath (NEW)
[*] IP: use TOS value as routing key (NEW)
[*] IP: verbose route monitoring (NEW)
[*] IP: large routing tables (NEW)
IP: Netfilter Configuration --->
<M> Connection tracking (required for masq/NAT) (NEW)
<M> FTP protocol support (NEW)
<M> IRC protocol support (NEW)
<M> IP tables support (required for filtering/masq/NAT) (NEW)
<M> limit match support (NEW)
<M> MAC address match support (NEW)
<M> netfilter MARK match support (NEW)
<M> Multiple port match support (NEW)
<M> TOS match support (NEW)
<M> AH/ESP match support (NEW)
<M> LENGTH match support (NEW)
<M> TTL match support (NEW)
<M> tcpmss match support (NEW)
<M> Connection state match support (NEW)
<M> Packet filtering (NEW)
<M> REJECT target support (NEW)
<M> Full NAT (NEW)
<M> MASQUERADE target support (NEW)
<M> REDIRECT target support (NEW)
<M> Packet mangling (NEW)
<M> TOS target support (NEW)
<M> MARK target support (NEW)
<M> LOG target support (NEW)
<M> TCPMSS target support (NEW)
<M> ipchains (2.2-style) support (NEW)
<M> ipfwadm (2.0-style) support (NEW)
Quotaをサポートする
File systems --->
[*] Quota support
Windows 系ファイルシステムをサポートする
(これらは, 後で起動ディスクを作成する際に必要となる)
File systems --->
[*] DOS FAT fs support
[*] MSDOS fs support
[*] UMSDOS : Unix-like file system on top of ...
[*] VFAT (Windows-95) fs support
[*] NTFS file system support (read only)
FAT や CD-ROM のファイルシステムを扱う際の言語コードの設定
File systems --->
Native Language Support
[*] Codepage 437 (United States ,Canada)
[*] Japanese charasets (Shift-JIS, EUC-JP)
[*] NLS ISO 8859-1 (Latin 1; Western Europearn Languages)
設定が終わったら Save and Exit を選択して終了して下さい。
カーネルパッケージの作成を行います。
作成には「 make-kpkg 」コマンドを使用します。
このコマンドは、パッケージ「kernel-package」をインストールすることで
使えるようになるコマンドで、カーネルのコンパイルからDebianパッケージの作成までを
請け負います。後はできたパッケージを
dpkg -i パッケージ名
でインストールすれば
よいことになります。
まず、依存関係を調べるため、
# make dep
を実行します。
カーネルのコンパイルの前にディレクトリ内の余分なファイルを削除するため、
# make-kpkg clean
とします。
そして、カーネルをコンパイルし、新しいカーネルをパッケージ化するため
以下のコマンドを入力します。
# make-kpkg --revision blue-2003-03-14 kernel_image
リヴィジョンナンバー ( blue-2002-03-01
)
には, ホスト名と作成日時を書き込んでください.
もし作業が滞ってしまったら、
# make-kpkg clean
からやり直して下さい。
速いマシンなら 5 分程度で /usr/src/ のディレクトリ内にカーネルのパッケージ
「 kernel-image-2.4.20_blue-2003-03-14 _i386.deb 」
が作成されるはずです。
先ほど作成したパッケージをインストールします。以下のコマンドを入力してください。
# dpkg -i /usr/src/kernel-image-2.4.20_blue-2002-03-01_i386.deb
〔この際に、「/lib/mudules/2.4.20 を
/lib/modules/2.4.20.old など
に書き換えろ」と指示された場合は、いったんインストールを停止して、
( そのような選択肢を聞かれます )指示された通りにしてください。〕
# mv /lib/modules/2.4.20 /lib/modules/2.4.20.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
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つでも中途半端に残すと、
ネットワーク全体に悪影響を及ぼす可能性があります!!
過去に
「プライベート空間からグローバル空間へのルーティングが断続的に行われない」
事態も発生しました。設定は完全に元に戻してください。
iptables コマンドは IP マスカレードの設定をするためのものである.
2002 年度までは iptables を使って IP マスカレードの設定を行っていた.
iptables は 2.4 系カーネルで使える ipchains の改良版(?)である.
以下では, 今回使用されている iptables コマンドについて簡単に
解説を行っておきます.
nat は(プライベートアドレス空間とグローバルアドレス空間の間での)
IP アドレスの変換に用いられるテーブルです.
以下のコマンドで, nat テーブルにおける
IP アドレス変換の基本ポリシーを「拒否」にします.
# iptables -t nat -P PREROUTING DENY
「-P」は Policy の略で, まずこのオプションをつけた
iptables コマンドを使用し, デフォルトでの設定を決めてしまいます.
「PREROUTING」は「外部から通信を受信する時のルート」を意味します.
他にも「POSTROUTING(外部へ通信を発信する時のルート)」
「OUTPUT(ローカルホストからの通信を発信する時のルート)」
といった表記を入れることも出来ます.
「DENY」は「拒否」です.
まず, デフォルトでは転送を行わないように
設定します.
なお許可する時は「ACCEPT」です.
この後のコマンドで, 後から転送許可を与えていきます.
以下のコマンドで, プライベートIPアドレス空間から外部(制限無し)
への転送許可を与えます.
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
「-A」は Append の略で, この後ろに書いてある
設定を現設定に「追加」します.
「-s」は source の略で,
「発信元」を意味し, この場合は 192.168.0.0 〜 192.168.0.255
を意味しています. 後ろの「/24」はネットマスクを意味し,
これは「/255.255.255.0」と等価です.
「-j MASQUERADE」は その前で指定された発信元 (-s で指定されているアドレス)
から宛先への通信をマスカレードすることを示します.
なお, 「宛先」の指定は「-d (destination)」で行いますが,
全ての宛先を指定する場合にはこのオプションは省略できます.
つまり, ここでは 「発信元 (192.168.0.0 〜 192.168.0.255) から
全ての宛先に対してルーティングを許可する」
という設定を追加した事になります.
filter テーブルはルータを通過するパケットの許可,
不許可を行うためのものである.
特定のポートへのパケットのみ通過を許可するといったことが
filter テーブルによって可能になる.
filter テーブルの設定も nat テーブルと同じように行う.
ポリシーは通過拒否とする時は,
# iptables -t filter -P FORWARD DROP
とする.
特定のポートへのパケットのみ通信許可するには
(例えば、http (80 番ポート)を許可する場合)
# iptables -t filter -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT
とする.
iptables の設定をコマンドラインから行うのは面倒である.
そこで iptables の設定をするためのシェルスクリプトを作成する.
ルーティングの基本ポリシーは以下のようにした.
- 全てのホストに対し内部から外部への IP マスカレードを許可
- フィルタの設定をしない(パケットの通過を許可)
以下のシェルスクリプトをエディタで作成する.
#!/bin/sh
#
# iptables を用いてルーティングを行う
# シェルスクリプト
#
# IP フォワーディングを有効にする
echo 1 > /proc/sys/net/ipv4/ip_forward
# テーブルの初期化
iptables -t filter -F FORWARD
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
# POSTROUTING, PREROUTING ともにアドレス変換を許可
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# フィルタの設定: 通過許可
iptables -t filter -P FORWARD ACCEPT
# 内部から外部への IP マスカレードを許可
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# ftp 通信用のモジュールのロード
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
システムを起動させた時に, 自動で IP マスカレードの設定ができるようにする.
これでいちいち手動で IP マスカレードの設定をしなくてもよくなる.
[3.3.4]で作成したシェルスクリプトを「S20ip-masq」
(ip-masq はシェルスクリプト名)以下のディレクトリに置く.
- /etc/rc2.d
- /etc/rc3.d
- /etc/rc4.d
- /etc/rc5.d
# ln -s /etc/init.d/ip-masq /etc/rc2.d/S20ip-masq
# ln -s /etc/init.d/ip-masq /etc/rc3.d/S20ip-masq
# ln -s /etc/init.d/ip-masq /etc/rc4.d/S20ip-masq
# ln -s /etc/init.d/ip-masq /etc/rc5.d/S20ip-masq
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です。接続できていなかったら上に張った
リンク先などを参照して原因を究明してください。