ルータを再起動したことで, マシンはルータとして機能しているが,
具体的なルーティングの設定はまだである.
ここでは iptables を用いたルーティングの設定方法について解説する.
iptables コマンドは IP マスカレードの設定をするためのものである.
2002 年度までは iptables を使って IP マスカレードの設定を行っていた.
iptables は 2.4 系カーネルで使える ipchains の改良版(?)である.
以下では, 今回使用されている iptables コマンドについて簡単に
解説を行っておきます.
[4.1.1] チェインの初期化
チェインの初期化とはそのチェインについての設定を全て削除することである.
例えば filter チェインを初期化するには以下のコマンドを実行する.
# iptables -t filter -F FORWARD
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) から
全ての宛先に対してルーティングを許可する」
という設定を追加した事になります.
また, 特定の MAC アドレスと
IP アドレスを持つホストに対して設定を行うことも可能である.
以下のコマンドで MAC アドレス 00:5C:75:53:2B:3A を持つ
IP 192.168.16.8 のホストに対して通信を許可する.
# iptables -t nat -A PREROUTING -s 192.168.16.8 -i eth1
--match mac --mac-source 00:5C:75:53:2B:3A -j ACCEPT
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
[4.2.1] シェルスクリプトの作成
iptables の設定方法を解説して来たが,
iptables の設定をコマンドラインからひとつずつ行うのは面倒であるため現実的ではない.
実際には必要な設定を記述したシェルスクリプトを作成して,
それで iptables の設定を行う.
ここで紹介するシェルスクリプトでのルーティングの基本ポリシーは以下のようにしてある.
- 全てのホストに対し内部から外部への IP マスカレードを許可
- フィルタの設定をしない(パケットの通過を許可)
以下のシェルスクリプト /etc/init.d/ip-masq をエディタで作成する.
#!/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
このシェルスクリプトを実行するには以下のコマンドを入力する.
# /etc/init.d/ip-masq
システムを起動させた時に, 自動で IP マスカレードの設定ができるようにする.
これでいちいち手動で IP マスカレードの設定をしなくてもよくなる.
[4.2.1]で作成したシェルスクリプト /etc/init.d/ip-masq を「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
ここでは, gate-toroku-system
をインストールし, iptables の設定を自動で行う.
gate-toroku-system のインストールは基本的に
gate-toroku-system インストールの手引き
に従って行えばよい.
[ep local] 地球惑星専攻のサーバにおいては上記の手引よりも
専攻サーバへの gate のインストール
が役に立つであろう.
gate-toroku-system の設定ファイルである /etc/gate.conf を編集するに当たって iptables に関係する部分を抜き出して説明する.
[4.3.1] iptables によるルーティングの有効化
iptables によるルーティングを有効にするかどうかは
$IPTABLES_ENABLEで設定する.
この値が 1 の場合, gate-toroku-system によって[3.3.4]に対応するシェルスクリプト
gate-ip-masq が自動生成される.
$IPTABLES_ENABLE = 1 ;
[4.3.2] データベースを置くディレクトリの位置
gate-toroku-system では特定のホストのみ通信を許可している.
通信を許可するホストのデータベースを置くディレクトリの位置を
$DB_PIP_BASE, $DB_PIP_PENDING,
$DB_PIP_STABLE, $DB_PIP_DEFUNCT
で指定する.
$DB_PIP_BASE = '/home/gate/pipdb';
$DB_PIP_PENDING = "$DB_PIP_BASE/pending";
$DB_PIP_STABLE = "$DB_PIP_BASE/stable";
$DB_PIP_DEFUNCT = "$DB_PIP_BASE/defunct";
[4.3.3] プライベート IP の自動配付
プライベート IP の自動配付を $IP_AUTO_DISTRIBUTION で設定する.
$IP_AUTO_DISTRIBUTION = 1 ;
この設定を有効にしておくと, gate-toroku-system で
プライベート IP 申請が行われたとき,
自動的にあるプライベート IP を配付する.
[4.3.4] プライベート IP アドレスの範囲の指定
配付するプライベート IP アドレスの範囲は
%MIN_PRIVATE_IP, %MAX_PRIVATE_IP で指定する.
%MIN_PRIVATE_IP = (
'8', '192.168.16.10', # 8 号館
'3', '', # 3 号館
'6', '', # 6 号館
);
%MAX_PRIVATE_IP = (
'8', '192.168.16.254', # 8 号館
'3', '', # 3 号館
'6', '', # 6 号館
);
[4.3.5] ルータの指定
ルータのホスト, IP アドレスは
$IPTABLES_SERVER, IPTABLES_ROUTER_IP で指定する.
$IPTABLES_SERVER = 'blue.ep.sci.hokudai.ac.jp';
$IPTABLES_ROUTER_IP = '133.87.45.66';
ルータの IP アドレスは gate-ip-masq の以下の部分と一致する.
$IPTABLES -t nat -A POSTROUTING -s 133.87.45.66 -o eth0 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -d 133.87.45.66 -i eth1 -j ACCEPT
[4.3.6] ルーティング制御コマンド実行ファイルの指定
iptables を用いたルーティング制御コマンド実行ファイル名を
$IPTABLES_FILE で指定する.
$IPTABLES_FILE = "/usr/local/sbin/gate-ip-masq";
コマンドパスを指定するため, 絶対パスで指定すること.
[4.3.7] ルータの NIC の指定
ルータの NIC がネットワークの内側, 外側のどちらに属するかを
$INSIDE_ETH, $OUTSIDE_ETH で指定する.
$INSIDE_ETH = 'eth1'; # プライベート空間側のNIC
$OUTSIDE_ETH = 'eth0'; # グローバル空間側のNIC
この部分は gate-ip-masq の以下の部分と一致する.
$IPTABLES -t nat -A POSTROUTING -s 133.87.45.66 -o eth0 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -d 133.87.45.66 -i eth1 -j ACCEPT
[4.3.8] ログを取るための設定
ログの設定をするかどうかを $IPTABLES_LOG で指定する.
ログ中につけるプレフィックスを $LOG_PREFIX で指定する.
$IPTABLES_LOG = 1;
$LOG_PREFIX = 'IPTABLES-LOG: ';
[4.3.9] アクセス許可ポートの指定
アクセスを許可するポート番号およびそのポートで通信するためのプロトコルを
%ALLOW_ACCESS_PORT で指定する.
%ALLOW_ACCESS_PORT = (
21, 'tcp',
:
:
);
この部分は gate-ip-masq の以下の部分と一致する.
$IPTABLES -t filter -A FORWARD -i eth1 -p tcp --dport 21 -j ACCEPT
IPマスカレードを使用する際には、
クライアント側もそれに応じた設定をする必要があります。
実際に動かすことが出来るのかどうか、
近くにあって使用できるパソコンをクライアント用として設定、接続し、
使えるのかどうか実験してみましょう。
[ep local] 地球惑星専攻内では dhcp によってプライベート IP
が自動的に割り振られているため, 一般的には以下の設定をする必要はない.
ただしここでは iptables の動作確認の意味で以下の設定を行う.
ここにはネットワークの設定が書き込まれています。
既に書き込まれている値はインストール時に設定したものですが、
ここをIPマスカレードを利用するために以下のように書き換えます。
iface eth0 inet static
address 192.168.16.10
netmask 255.255.255.0
network 192.168.16.0
broadcast 192.168.16.255
geteway 192.168.16.1
「 address 」の行には 192.168.16.10 から 192.168.16.254 までの
好きな値を入れてもらって構いません。
※これを新たに下に書き足すのではなく、既にあるものの数値を書き換えて下さい。
[ep local] gate-toroku-system によってルーティングが制御されている場合
gate-toroku-system によって与えられているプライベート IP
を設定する必要がある.
このファイルにはDNSサーバのIPアドレスが書いてあります。
(インストール時に設定しましたよね?)
ここの1行目を
search ep.sci.hokudai.ac.jp
とします。
ホストテーブルの設定を行います。
内部ネットワークでの DNS は、/etc/hosts ファイルの設定に
よって決められています。
/etc/hosts ファイルに
192.168.16.1 blue.ep.sci.hokudai.ac.jp blue
と書き込み、IPアドレスとホスト名の対応を書いておいてください。
Windows9x 系 の設定はLinuxよりは容易にできます。
(ちなみに画面はWindows 98 Second Edition のものです)
[5.2.1] IP アドレス等の設定
|
マイコンピュータをクリックして, コントロールパネルを開きます
|
|
コントロールパネルから「ネットワーク」をクリックします。
そして「TCP/IP → (ネットワークカード名)」を選択します。
|
|
下にある表にしたがって、IP アドレス, ネットマスク,
ゲートウェイ, ホスト名, ドメイン名, DNS サーバを
正しく設定して下さい。
|
ルータ(blue) 以下に接続するローカル機での設定項目
設定タグ |
詳細項目 |
答え方 |
IP アドレス |
IP アドレス |
192.168.16.10 〜 192.168.16.254 (どれか一つを指定) |
ネットマスク |
255.255.255.0 |
ゲートウェイ |
ゲートウェイ |
192.168.16.1 |
DNS設定 |
ホスト名 |
接続するマシンのホスト名(必ず設定してください) |
ドメイン名 |
ep.sci.hokudai.ac.jp |
DNS サーバ |
133.87.45.70, 133.87.45.66, 133.87.1.11 |
WindowsNT 系 の設定はLinuxよりは容易にできます。
(ちなみに画面はWindows XP Home Edition のものです)
[5.3.1] IP アドレス等の設定
|
- [スタート] から [コントロールパネル] を開く
- [コントロールパネル] から [ネットワークとインターネット接続] をクリック
|
|
- [ローカルエリア接続] を右クリックし, [プロパティ] を選択
|
|
- [全体] タブにある [インターネットプロトコル(TCP/IP)] を選択
- [プロパティ] をクリック
|
|
- 「次の IP アドレスを使う」をチェックし、
該当する事項を下の表を参照して入力する。
- 「次の DNS サーバを使う」をチェックし、該当事項を入力。
|
|
- DNS サーバのアドレス入力が終ったら [詳細設定] に進む。
- DNS タブをクリック。
- 「この接続の DNS サフィックス」に下表の 「ドメイン名」
を入力する。
- 「この接続のアドレスを DNS に登録する」のチェックを外し [OK] を押す。
|
ルータ(blue) 以下に接続するローカル機での設定項目
設定項目 |
答え方 |
IP アドレス |
192.168.16.10 〜 192.168.16.254 (どれか1つを指定) |
サブネットマスク |
255.255.255.0 |
ドメイン名 |
ep.sci.hokudai.ac.jp |
DNS |
優先:133.87.45.70, 代替: 133.87.45.66 |
デフォルトゲートウェイ |
192.168.16.1 |