インターフェイスの構成は次のとおりです。
#ifconfig virbr0 virbr0:flags = 4355 mtu 1500 inet192.168.11.1ネットマスク255.255.255.255ブロードキャスト255.255.255.255 イーサネット52:54:00:99 :e3:0d txqueuelen 0(イーサネット) RXパケット0バイト0(0.0 B) RXエラー0ドロップ0オーバーラン0フレーム0 TXパケット0バイト0(0.0 B ) TXエラー0ドロップ0オーバーラン0キャリア0コリジョン0 #ip link show virbr0 13:virbr0 @ NONE:mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT link/ether 52:54:00:99:e3:0d brd ff:ff:ff:ff:ff:ff [.____]
192.168.11.1へのping、TCP接続など)を確立できますが、tcpdumpは報告します
0パケットがキャプチャされました 0パケットがフィルタによって受信されました 0パケットがカーネルによってドロップされました
[〜#〜] update [〜#〜]
アドレスをvethインターフェイスに割り当て、それをネットワーク名前空間に配置してから、vethペアのもう一方の端をvirbrインターフェイスに接続すると、すべてのパケットがvirbrインターフェイスのtcpdumpに表示されることがわかりました。ただし、元の質問はまだ残っています。
tcpdump
は、パケットソケット[1]を開くことによってリンクレベルで動作します。インターフェイスの真下にあるため、ハードウェアからのインバウンドパケットと、インターフェイスからのアウトバウンドパケットをインターセプトします。カーネル内のそのインターフェイスにパケットを送信すると、パケットは宛先に到達し、インターフェイスを介して送信されません。好奇心旺盛な方のために、ここに関連するコードがあります[2]。
[1] http://man7.org/linux/man-pages/man7/packet.7.html
[2] https://github.com/the-tcpdump-group/libpcap/blob/master/pcap-linux.c#L3281