1.最後に起動したNICに設定されていたGATEWAY以外は無効になる事象

 

→rp_filterな

CentOSに複数NICをつけて、異なるセグメントのIPアドレスを設定して、ルータに接続する。
例えば、/etc/sysconfig/network-script/ifcfg-eth*
上で、下記のように、IPADRや、GATEWAYを設定した場合、

(1) eth0では、
①IPアドレス  : 192.168.2.99/24
②ゲートウエイ: 192.168.2.1

(2) eth1では、
①IPアドレス  : 10.0.0.99/8
②ゲートウエイ: 10.0.0.1 

この場合、CentOS5.6では、
(ア)別のPCからeth0とeth1の両方へのping成功。
ただし、帰りの経路は、eth1経由
(イ)# routeコマンドでは、デフォルトゲートウェイは、10.0.0.1のが記載されてるが、192.168.2.1の記載は無い。
(ウ)# service network restart実施後、eth0停止→eth1停止→lo停止→lo起動→eth0起動→eth1起動
の順に停止と起動が行われるが、eth0起動後、eth1が起動する前に、routeコマンドでルーティングテーブルを見ると、デフォルトゲートウエイは、192.168.2.1になっているが、
eth1起動後は、10.0.0.1が唯一のデフォルトゲートウェイとなる。
(エ)#ifconfig eth1 downを実行後、別のPCから、
ping 192.168.2.99
ping 10.0.0.99
はともにタイムアウトとなる。
(オ)192.168.2.1(ルータ)からのping 192.168.2.99は成功する。
(カ)ifcfg-eth1の、「ONBOOT」を"no"にして、networkサービスをrestartしたら、ifcfg-eth0二設定したGATEWAY=192.168.2.1が有効になって、別セグメントとの通信は、eth0を経由するようになる。

つまり、下記のような感じだと思われる
①デフォルトゲートウェイは、eth0、eth1ともに、10.0.0.1として動作する。 
②eth0から、別セグメントに向かうパケットでも、eth1を経由する。
③eth1を無効にしてnetworkサービスを再起動すると、GATEWAYは、ifcfg-eth0に設定された値が採用される。
④どうやら、デフォルトだと、複数NICの場合、後に起動したNICに紐付けられた、ifcfg-ethファイルのデフォルトゲートウェイのみが有効になるらしい。 

CentOS6.3でも、上記(イ)~(カ)は同じ。ただし、上記(ア)は失敗する。
→eth1のONBOOTを"no"にしたら通信できるし、CentOS5では問題なく通信できるので、NICやルータ故障ではなさそう。
→同じセグメント内のルータからのpingはちゃんと帰るので、ドライバではなさそう。

→つまり、CentOS6.3の設定かバグ?
いずれにせよ、CentOSでは、複数NICのifcfg-ethにGATEWAYを書いて、networkサービスを再起動しても、最後に起動したNICに紐付けられたifcfg-ethファイルの「GATEWAY」の値のみが採用されて、サーバ全体で唯一のデフォルトゲートウェイとして機能するみたい。
とりわけ、CentOS6.3では、別セグメントのホストから、eth0に向けてpingを打ったら、ルーティングテーブルの中の
10.0.0.0        *               255.0.0.0       U     0      0        0 eth1
default         10.0.0.1        0.0.0.0         UG    0      0        0 eth1
を解決できず、eth0のデフォルトゲートウェイが無効なので、そのまま別セグメント宛の通信が戻ってこなくなる。

   
2.解決策

(1)NICごとに異なるルーティングテーブルもしくは、デフォルトゲートウェイを設定する方法を調べる
http://www.maruko2.com/mw/%E8%A4%87%E6%95%B0NIC%E3%81%A7%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95
※上記はWindowsの場合。
※そもそも普通は、デフォルトゲートウェイはホスト1つにつき一つらしい
ifcfg-eth*ファイルごとに、GATEWAYの設定項目があることと、上記URLのように、WindowsはNICごとにGATEWAYをしていできるらしいので混乱しているみたい。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47393&forum=10 

(2)ではなんで、CentOS6.3の場合、eth0宛の別セグメントからのoingは帰らないのか?
デフォルトゲートウェイとして、eth1が指定されているのに。
→謎

(3)マルチホーミング
pingを打ったとき、受け取ったNICから返すようにする設定らしい。
http://ibucket.blogspot.jp/2010/07/centos.html 


3.そのほか参考になりそうな情報

(1)iptablesの設定、STP enabledって何?
http://blog.flatlabs.net/20110513_211047/ 

(2)KVMの基本的な使い方
http://www.atmarkit.co.jp/flinux/rensai/kvm02/kvm02c.html