仮想マシンからの着信トラフィックをフィルタリングしてキャプチャしたいです。仮想マシンはユーザースペースで実行する必要があります。キャプチャにはルートが必要であることを理解します(ただし、今後は必要なルート活動を最小限にしたいと思います)。
私が知っている限り、キャプチャしてフィルタリングする最も簡単な方法は、vnet0
仮想マシン専用インターフェイスなどの専用仮想ネットワークインターフェイスを持つことです。その後、それに対して背中tshark
を実行できますtcpdump
。iptables
ネットワークインターフェイスをルートとして設定(作成)する方法と、KVM / QEMU仮想マシンを使用してルート以外のインターフェイスに接続するにはどうすればよいですか?
ip
コマンド(iproute2スタイル)とqemu設定オプションを探しています。
私は次のようなインターフェース作業を始めました。
(root 1) ip link add br0 type bridge
(root 2) ip addr add dev br0 10.10.0.1/24
(root 3) ip link set dev br0 up
(root 4) ip link add vm1-host type veth peer name vm1-net
(root 5) ip link set dev vm1-host master br0
(root 6) ip link set dev vm1-host up
(root 7) ip tuntap add vm1-tap mode tap
(root 8) ip addr add 10.10.0.2/24 dev vm1-net
(root 9) ip addr add 10.0.2.2/24 dev vm1-tap
(root 10) ip link set dev vm1-tap up
(root 10b) echo 1 > /proc/sys/net/ipv4/ip_forward
その後、QEMUを使用してブリッジに接続しようとしましたが、root以外のユーザーとしては接続できません。
/etc/qemu/bridge.conf
ユーザーが/usr/libexecを介してブリッジに接続できるように編集しました/qemu-bridge-helper
。
(root 11) grep -v # /etc/qemu/bridge.conf
allow veth0
allow vm1-tap
allow vm1-host
allow vm1-net
(root 12) ll /usr/libexec/qemu-bridge-helper
-rwsr-x--- 1 root kvm 312888 Aug 25 16:16 /usr/libexec/qemu-bridge-helper
ユーザーは実際にはkvm
グループのメンバーです(id
表示)。ただし、virt-manager
ブリッジインターフェイスとして実行すると、次のエラーメッセージが表示されます。$USERNAME
Error starting domain: /usr/libexec/qemu-bridge-helper --use-vnet --br=vm1-tap --fd=34: failed to communicate with bridge helper: stderr=failed to add interface `tap0' to bridge `vm1-tap': Operation not supported
: Transport endpoint is not connected
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 72, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 108, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/domain.py", line 1425, in startup
self._backend.create()
File "/usr/lib64/python3.10/site-packages/libvirt.py", line 1362, in create
raise libvirtError('virDomainCreate() failed')
libvirt.libvirtError: /usr/libexec/qemu-bridge-helper --use-vnet --br=vm1-tap --fd=34: failed to communicate with bridge helper: stderr=failed to add interface `tap0' to bridge `vm1-tap': Operation not supported
: Transport endpoint is not connected
一部能力それでも必要でしょうか? -ユーザーが仮想マシンを起動できるようにするにはどうすればよいですか?
おそらくこれは役に立ちますか?
(root 13) ip tuntap add vm1-tap mode tap user $USERNAME
ioctl(TUNSETIFF): Device or resource busy
オンラインで見つけたコマンドを試しましたが、チューニング/タブが必要ですか?そして、これを行う正しい方法が見つかりません。
参考資料(役に立つが問題は解決しない):