veth0 / bridgeを介したネットワークルーティングのためのユーザースペースQEMU VM?

veth0 / bridgeを介したネットワークルーティングのためのユーザースペースQEMU VM?

仮想マシンからの着信トラフィックをフィルタリングしてキャプチャしたいです。仮想マシンはユーザースペースで実行する必要があります。キャプチャにはルートが必要であることを理解します(ただし、今後は必要なルート活動を最小限にしたいと思います)。

私が知っている限り、キャプチャしてフィルタリングする最も簡単な方法は、vnet0仮想マシン専用インターフェイスなどの専用仮想ネットワークインターフェイスを持つことです。その後、それに対して背中tsharkを実行できますtcpdumpiptables

ネットワークインターフェイスをルートとして設定(作成)する方法と、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

オンラインで見つけたコマンドを試しましたが、チューニング/タブが必要ですか?そして、これを行う正しい方法が見つかりません。

参考資料(役に立つが問題は解決しない):

関連情報