Ubuntu11.04などのディストリビューションでIPv6関係のパケット(ICMPv6を含む)がbrctlによって作られるブリッジデバイスを通過できない問題が有るように思われる。
なぜこの問題に気がついたかというと、KVMのゲストがどうやってもルータから流れてくるRAを受信できず、tcpdumpで確認したところtapを物理ethと接続するブリッジを境にパケットが途絶えていた。原因としてはip6tablesでフィルタリングされている可能性が考えられるが、全てルールが空でポリシーもACCEPTの状態でも破棄されてしまう。
解決策としては、sysctlで次のキーを0にしてしまえば良いようだ。ブリッジでのipb6tablesが無効になってしまうようなので環境によっては注意して使う必要がある。
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0
なんとなく関連してそうなパッチがカーネル2.6.39でコミットされているようなので次のバージョンのUbuntuでは解決しているかもしれない。現状ではDebianなどの他のディストリビューションでも影響を受ける可能性が有る。
libvirtでKVMゲストを自動起動(autostart)するように設定しても上手く起動してくれないときはブリッジされているデバイスのfowarding_delayが0になっているか確認すること。ウェブ上で見つかる設定例によっては0以外になっていることがあるが、STPが無効の状態でも待機自体はしてしまうようなのでその間にゲストが起動するとインターフェースをつかみ損ねて上手く起動しない。STPを使わないのであればforwarding_delayは0で問題ない。libvirtの機能でブリッジを作っている場合はおそらく問題無いだろうが、手動でブリッジを設定している場合は気をつける必要がある。
同じような例として、ブリッジデバイス上でbindやDHCPDなどをListenする場合はforwarding_delayが長いとインターフェースのIPを取得できずにプロセスが即終了することが有るようだ。