2007/02/02

ルーティングでハマる

普通のLinuxデストリビューションでは、デフォルトでルーティング動作が無効化されている。つまり、Linux機が二つのインターフェースを持っていても、この間のL3レベルでの転送は行わない、ということだ。これを有効にするには、sysctlコマンドを使って、
# sysctl net.ipv4.ip_forward = 1
#
と実行すればよい。起動時からルーティングを有効にしたいなら、/etc/sysctl.confの中の対応する部分(見れば判る)を変更する。

なのだが、ものの頁には、/etc/sysconfig/networkの中に、FORWARD_IPV4=yesを追加すればよい、と書いてある。これは、昔のRed Hat系ディストリビューションなんかでは正しいようなのだが、少なくとも、FC5では正しくないようだ。実際、/etc/init.d/networkの中を眺めてみても、この変数を処理する部分は無いようだ。

と、言う事実を知らず、Linux機をルータに仕立てる作業をしていたのだが、ここでハマってしまった。ルーティングしていない、ということであれば、単に通信ができないという症状になるので、すぐに気付きそうなものだが、そう単純ではないのだ。
例えば、Linux機をrouter1としよう。これには二つのインターフェースeth0およびeth1が付いているが、上のように間違った設定をしているため、ルーティングは無効になっている。このeth0側にpc1というマシンを接続する。このpc1(に割当てたIPアドレス)とeth0(に割当てたIPアドレス)の間の通信ができるよう設定し、pc1のデフォルトルートは、eth0に向ける。この状態でpc1から、eth1(に割当てたIPアドレス)へのHTTPは、ルーティングされないので、当然接続を確立できない。ここまでは想定内だ。
しかし、pc1からeth1へのPINGは正常に応答があるのだ!これが理解できなかったので、非常に苦労した。

0 件のコメント: