QEMU の tap でパケットを見たい

背景

QEMU の -net user ではなく、-net tap を使う方法に切り替えた。その際に、Wiresharktcpdump でパケットを見る方法を模索する。

うまくいく例

% cat /etc/qemu-ifup
#!/bin/sh
sudo /sbin/ifconfig $1 192.168.50.2 up

のように QEMU に interface を up させた後、tcpdump -i tap0 とする。
tap0 は tunctl -t tap0 で persistent にしておいても良い。


これの問題点は tcpdumpQEMU の起動後に起動しなければいけないこと。

うまくいかない例

事前に tunctl で tap0 を persistent、にしておき更に up しておく。
原因は分からないが、これをすると

  • tcpdump でパケットが見られない
  • QEMU のゲストでもパケット送受信がうまくいかない

という状況になる。

bridge を作っておく方法はどうか?

sudo brctl addbr br
sudo /sbin/ifconfig br 192.168.50.2 up

としておき。

#!/bin/sh
sudo /sbin/ifconfig $1  up
sudo brctl addif br $1

これで事前に br を tcpdump しておく。
やはりこれも

  • tcpdump でパケットが見られない
  • QEMU のゲストでもパケット送受信がうまくいかない

となる。

追記

結局以下のような苦肉の策で乗り切ることに。tap0 は persistent にしていない。

% cat  /etc/qemu-ifup
#!/bin/sh
sudo ifconfig $1 192.168.50.2 up
sudo rm -f /tmp/tcpdump.log
sudo tcpdump -i $1 -s 1500 -w /tmp/tcpdump.log &
% cat  /etc/qemu-ifdown
#!/bin/sh
sudo ifconfig $1 down
sudo pkill tcpdump
wireshark /tmp/tcpdump.log