- PR -

Linuxにネットワークについて

1
投稿者投稿内容
angelus
会議室デビュー日: 2004/05/27
投稿数: 10
投稿日時: 2004-05-27 00:16
普通は、こういうことをすることは少ないかと思いますが、
以下のように1台のサーバでNICを2枚さして、それぞれのNICに
同一ネットワークのIPを割り付け、同一ネットワーク上のリモー
ト端末からそのサーバにそれぞれのIPにPingを飛ばします。
どちらもGATEWAYの設定はありません。

Linuxサーバ
eth0:10.10.130.10/255.255.255.0
eth1:10.10.130.20/255.255.255.0

リモート端末
10.10.130.5/255.255.255.0

eth0,eth1ともにLANケーブルが接続されているときは
Pingがそれぞれに通ります。
そこで、eth0のケーブルを外します。期待してい動きは、
10.10.130.10へのPingは応答せずに、10.10.130.20
にのみ応答するという動きだったのですが、なぜかどちらも
Pingに応答してしまいます。ちなみにリモート端末のARPを
見ると、どちらのIPもeth1のNICに行くようになっていました。
その逆を実施しても結果は同じでした。ただ、LANケーブルを
片方外した状態だとどちらとも通信ができなくなる状態もたまに
ありました。そのときのリモート端末のARPは、LANケーブル
が接続された側にNICを認識していました。
どうしてこのような現象になるのでしょうか?
また、それぞれのIPの対になっているNICに対してのみアクセスさ
せる方法はないでしょうか?

ちなみにリモート端末のARPをそれぞれstaticに設定すると
eth1を外すと10.10.130.10も10.10.130.20も通信ができず、
(network restartを実施してもだめでした。)
eth0を外すと10.10.130.10の通信のみ可能となりました。


Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.130.20
NETMASK=255.255.255.0
TYPE=Ethernet
USERCTL=no
PEERDNS=no
NETWORK=10.10.130.0
BROADCAST=10.10.130.255

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.130.30
NETMASK=255.255.255.0
TYPE=Ethernet
USERCTL=no
PEERDNS=no
NETWORK=10.10.130.0
BROADCAST=10.10.130.255
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-05-27 00:37
こんばんわ.
引用:

angelusさんの書き込み (2004-05-27 00:16) より:

普通は、こういうことをすることは少ないかと思いますが、
以下のように1台のサーバでNICを2枚さして、それぞれのNICに
同一ネットワークのIPを割り付け、同一ネットワーク上のリモー
ト端末からそのサーバにそれぞれのIPにPingを飛ばします。
どちらもGATEWAYの設定はありません。

Linuxサーバ
eth0:10.10.130.10/255.255.255.0
eth1:10.10.130.20/255.255.255.0

リモート端末
10.10.130.5/255.255.255.0


Linux server の network interface の構成がおかしいのは既にお分かりなのですよね.でしたらそれ以外のところで...

eth0 -- eth1 の packet forwarding を抑制してもだめでしたっけ?

command なら
# echo 0 > /proc/sys/net/ipv4/ip_forward

設定 file でやるなら
# vi /etc/sysctl.conf
 net.ipv4.ip_forward = 0
と編集する.

どうでしょ?
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-05-27 01:33
「どうして?」を問うと、それはカーネル内部での処理の話になりますし、
私自身はどうなってるのか知らないのですが...

他のOSの場合ですと、「入ってきたパケットの宛先アドレスをみて、
それが自分自身に付いているIPアドレスと一致していたら自分宛の
パケットであるとみなして処理を行う」というようになってたり
します。 遠回りな書き方をしてしまいましたが、つまり「パケットが
どの物理インタフェースから入ってきたのか」ということを問うこと
なく、宛先が自分が抱えているIPアドレスになっていれば対応する
処理が行われる、ということです。

そういうわけで、eth0 のIPアドレスを指定しても ping が返ってくる
というのは起こり得る話じゃないかなあ、と思います。
# その場合、実際に使用されている物理インタフェースは eth1 の
# 側なわけですが。
madox01
会議室デビュー日: 2003/01/09
投稿数: 4
投稿日時: 2004-05-27 21:00
IP_FORWARDINGってデフォルトで有効になってましたっけ?

以前、ルータをLinuxで作った時には、/etc/sysctl.confのnet.ipv4.ip_forward=1と/etc/sysconfig/networkにFOWARD_IPV4=YESのように編集した記憶が・・・。

kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-05-27 21:25
こんばんわ.
引用:

madox01さんの書き込み (2004-05-27 21:00) より:
IP_FORWARDINGってデフォルトで有効になってましたっけ?

以前、ルータをLinuxで作った時には、/etc/sysctl.confのnet.ipv4.ip_forward=1と/etc/sysconfig/networkにFOWARD_IPV4=YESのように編集した記憶が・・・。


〜ん,手元に Linux な環境が無いもので...
でも,明示的にやってしまえばあとで悩まないかなと.
でも,有効になってないのに対岸の interface って答えてくれるんでしたっけ?
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-05-28 00:21
引用:

kazさんの書き込み (2004-05-27 21:25) より:
でも,有効になってないのに対岸の interface って答えてくれるんでしたっけ?


Linux で実際どうなってるのか私は知らないことをあらかじめ
おことわりしておいて...
たとえば、こんなやり方がある、という話。

IPパケットがやってきたときにOSは何をするか? チェックとか断片化の
処理とかの話をすっとばすと、要はよそへ中継するか、自分で受け取って
上位層に渡すか、ですね。
自分宛なのかどうか調べるときには、それがどのインタフェースから入って
きたのかなんてことは気にしないで宛先アドレスだけをみて調べるのが
てっとりばやい。とゆーわけで、自分が持っているIPアドレスを宛先とする
パケットならばそれがどこから入ってきたかに関わらず上位に渡される
ことがある。(もちろん、入り口のインタフェースに対して明示的に禁じて
いる場合は話が別です)

パケットを返すときにはどうするか?これは、やってきたパケットの
source と destination をひっくり返して投げ返すのが確実かつ高速
なんでないかなあ... このあたり、私は知らないのですが。

パケットはちゃんと出てゆくか?これについては、目的のネットワークに
対してはケーブルが繋がってるほうのインタフェースから出てゆくように
ルーティングされていればO.K.

とゆーわけで、forward しているかどうかにかかわらず、繋がってない
インタフェースに割り振られているIPアドレスに対する ping が返って
くる、というのはあり得る話だと思うです。
cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-05-28 02:59
引用:

以下のように1台のサーバでNICを2枚さして、それぞれのNICに
同一ネットワークのIPを割り付け、同一ネットワーク上のリモー
ト端末からそのサーバにそれぞれのIPにPingを飛ばします。



あえてサブネットを同じにしているというのは
障害対策とか、何らかの意図があってのことなんでしょうか?

http://search.luky.org/linux-users.9/msg07670.html
のように、カーネルにパラメータを渡せば、ARPのパケットもフィルタリングしてくれるようです。

for i in /proc/sys/net/ipv4/conf/*/arp_filter; do
echo 1 > $i
done

とするか、/etc/sysconfig の中のファイルをいじれば
ARPの応答の挙動を変えれると思います。


[ メッセージ編集済み 編集者: cn009 編集日時 2004-05-29 20:22 ]
angelus
会議室デビュー日: 2004/05/27
投稿数: 10
投稿日時: 2004-05-30 22:36
ご返事が遅くなった申し訳ありません。
色々とありがとうございます。
IP_FORWARDINGはしていません。デフォルトはしてないようになっていました。
ARPのコントロールはしてみようと思います.が
ルーティングテーブルが同一ネットワーク上のものが2つあると上位にあるほうが
優先されるようです。例えば以下のようになっていると
10.10.10.0 eth1
10.10.10.0 eth0
127.0.0.0 lo
eth1が優先されてしまうため、eth1のLANケーブルを外したりすると
全く通信ができなくなってしまいます。
色々と考えたあげく、iptablesとrouteを使用してシェルを作成して
コントロールしてみようかと思ってます。
1

スキルアップ/キャリアアップ(JOB@IT)