WSL2のUbuntuでtcpdumpができない

こんなエラー

tcpdump icmp を実行すると以下のような表示が出る

tomozo-hb@DESKTOP-QHUPT3N:~$ tcpdump icmp
tcpdump: eth0: You don't have permission to capture on that device
(socket: Operation not permitted)

やったこと

pcapというグループを作成し、自分自身を追加

tomozo-hb@DESKTOP-QHUPT3N:~$ sudo groupadd pcap
[sudo] password for tomozo-hb:
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo usermod -aG pcap $USER
tomozo-hb@DESKTOP-QHUPT3N:~$ id $USER
uid=1000(tomozo-hb) gid=1000(tomozo-hb) groups=1000(tomozo-hb),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(pcap)

正常に追加されたことを確認。

次に、tcpdumpのグループを変更。

tomozo-hb@DESKTOP-QHUPT3N:~$ ls -la /usr/sbin/tcpdump
-rwxr-xr-x 1 root root 1044232 Jan  1  2020 /usr/sbin/tcpdump
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo chgrp pcap /usr/sbin/tcpdump
tomozo-hb@DESKTOP-QHUPT3N:~$ ls -la /usr/sbin/tcpdump
-rwxr-xr-x 1 root pcap 1044232 Jan  1  2020 /usr/sbin/tcpdump

最後に、tcpdumpに必要なcapabilityを追加する

tomozo-hb@DESKTOP-QHUPT3N:~$ sudo getcap /usr/sbin/tcpdump
tomozo-hb@DESKTOP-QHUPT3N:~$
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/tcpdump
tomozo-hb@DESKTOP-QHUPT3N:~$
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo getcap /usr/sbin/tcpdump
/usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip

CAP_NET_RAWはRAWソケットおよびPACKETソケットの使用許可、 CAP_NET_ADMINは各種ネットワーク関係の操作 を司っているらしい。 eipと指定したのはケーパビリティセットで、以下の意味らしい。 e: effective i: inheritable p: permitted

結果

無事に動作するようになった。

tomozo-hb@DESKTOP-QHUPT3N:~$ tcpdump icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

(タイトルにWSL2とつけたが、別にWSL2の問題ではなかった)

参考記事

Wiresharkを一般ユーザで実行(ラズパイ編) - Qiita

https://www.websys.edu.uec.ac.jp/wp-content/uploads/eefd56627f941a0803b2fca181c080bd.pdf