Xen, bonding, arp監視でpbond0: received packet with own address as source addressのエラー
先日、2台のXenホストOSでbondingの設定を行ったときのこと。
OSはCentOS 5.5、bondingの監視方法はarp監視です。
bondingの設定を行い、ネットワークの冗長化そのものはゲストOSのネットワークの切り替わりを含めて問題なく動作したのですが、/var/log/messages に下記のメッセージが大量に出力されるようになりました。
Mar 3 10:24:41 hostname kernel: pbond0: received packet with
own address as source address
いろいろ調べたのですが、例えば下記に書かれている対処方法では解決できず。
Stray Penguin - Linux Memo (Xen):
http://www.asahi-net.or.jp/~aa4t-nngk/xen.html#ownaddresstrouble
その後さらに調べたところ、XenSourceのbugzillaに記載されていた方法で無事解決しました。
XenSource bugzilla:
http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=339
原因は、ブリッジ・インタフェースと物理ネットワーク・インタフェースを結ぶための論理ネットワーク・インタフェースであるpeth0に割り当てられたMACアドレスが"FE:FF:FF:FF:FF:FF"であり、これが2台のXenホストOSとも同じでバッティングしていた、というものでした。
XenのホストOSが同一ネットワークに複数台存在し、かつ複数台でbondingの設定を行い、かつbondingの監視方法がarpという条件で発生する現象のようです。
ちなみに監視方法がMIIの場合は発生しません。
対処方法は、ネットワークブリッジ設定スクリプト/etc/xen/network-bridgeを下記のように変更し、Xenの各インターフェースに一意なMACアドレスを割り当てるようにします。
macidはホストOSごとに違う値を指定します。
-- /etc/xen/network-bridge 変更前
setup_bridge_port ${vif0}
ip link set ${netdev} addr ${mac} arp onip link set ${bridge} up
add_to_bridge ${bridge} ${vif0}
add_to_bridge2 ${bridge} ${pdev}
--
-- /etc/xen/network-bridge 変更後
#macid is used to uniquely identify this dom0 on this network
#change this to avoid MAC address conflicts if you get:
#"peth0: received packet with own address as source address"
macid="F0"(中略)
setup_bridge_port ${vif0}
ip link set ${netdev} addr ${mac} arp onip link set ${pdev} addr fe:ff:ff:ff:${macid}:0${vifnum}
ip link set ${vif0} addr fe:ff:ff:ff:${macid}:0${vifnum}ip link set ${bridge} up
add_to_bridge ${bridge} ${vif0}
add_to_bridge2 ${bridge} ${pdev}
--
設定変更後、OSを再起動したところ、エラーメッセージが出なくなりました。
解決したのはよいけれど、なぜarp監視のときだけエラーメッセージが出力されたのでしょう。
今回のarp監視ではターゲットとしてルータのIPアドレスを指定しているのですが、そのIPアドレスに対するMACアドレスを知るためにarpパケットをブロードキャストしているから、ですね。
あるホストOSが別のホストOSからブロードキャストされたARPパケットを受け取って、そのARPパケットのヘッダにある送信元のMACアドレスが、自分のMACアドレスと同じなので「received packet with own address as source address(送信元のアドレスが自分のアドレスと同じパケットを受け取ったよ。なんか変じゃない?)」というエラーを出力したのでしょう。
原因がわかってすっきりしました。
arp監視のために送受信するarpパケットについては下記が詳しいです。
Carpe Diem bonding ことはじめ:
http://www.sssg.org/blogs/naoya/archives/1188
