- - PR -
Linuxにネットワークについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2004-05-27 00:37
こんばんわ.
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 と編集する. どうでしょ? | ||||
|
投稿日時: 2004-05-27 01:33
「どうして?」を問うと、それはカーネル内部での処理の話になりますし、
私自身はどうなってるのか知らないのですが... 他のOSの場合ですと、「入ってきたパケットの宛先アドレスをみて、 それが自分自身に付いているIPアドレスと一致していたら自分宛の パケットであるとみなして処理を行う」というようになってたり します。 遠回りな書き方をしてしまいましたが、つまり「パケットが どの物理インタフェースから入ってきたのか」ということを問うこと なく、宛先が自分が抱えているIPアドレスになっていれば対応する 処理が行われる、ということです。 そういうわけで、eth0 のIPアドレスを指定しても ping が返ってくる というのは起こり得る話じゃないかなあ、と思います。 # その場合、実際に使用されている物理インタフェースは eth1 の # 側なわけですが。 | ||||
|
投稿日時: 2004-05-27 21:00
IP_FORWARDINGってデフォルトで有効になってましたっけ?
以前、ルータをLinuxで作った時には、/etc/sysctl.confのnet.ipv4.ip_forward=1と/etc/sysconfig/networkにFOWARD_IPV4=YESのように編集した記憶が・・・。 | ||||
|
投稿日時: 2004-05-27 21:25
こんばんわ.
〜ん,手元に Linux な環境が無いもので... でも,明示的にやってしまえばあとで悩まないかなと. でも,有効になってないのに対岸の interface って答えてくれるんでしたっけ? | ||||
|
投稿日時: 2004-05-28 00:21
Linux で実際どうなってるのか私は知らないことをあらかじめ おことわりしておいて... たとえば、こんなやり方がある、という話。 IPパケットがやってきたときにOSは何をするか? チェックとか断片化の 処理とかの話をすっとばすと、要はよそへ中継するか、自分で受け取って 上位層に渡すか、ですね。 自分宛なのかどうか調べるときには、それがどのインタフェースから入って きたのかなんてことは気にしないで宛先アドレスだけをみて調べるのが てっとりばやい。とゆーわけで、自分が持っているIPアドレスを宛先とする パケットならばそれがどこから入ってきたかに関わらず上位に渡される ことがある。(もちろん、入り口のインタフェースに対して明示的に禁じて いる場合は話が別です) パケットを返すときにはどうするか?これは、やってきたパケットの source と destination をひっくり返して投げ返すのが確実かつ高速 なんでないかなあ... このあたり、私は知らないのですが。 パケットはちゃんと出てゆくか?これについては、目的のネットワークに 対してはケーブルが繋がってるほうのインタフェースから出てゆくように ルーティングされていればO.K. とゆーわけで、forward しているかどうかにかかわらず、繋がってない インタフェースに割り振られているIPアドレスに対する ping が返って くる、というのはあり得る話だと思うです。 | ||||
|
投稿日時: 2004-05-28 02:59
あえてサブネットを同じにしているというのは 障害対策とか、何らかの意図があってのことなんでしょうか? 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 ] | ||||
|
投稿日時: 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