veth0/bridge를 통한 네트워크 라우팅을 위한 사용자 공간 QEMU VM?

veth0/bridge를 통한 네트워크 라우팅을 위한 사용자 공간 QEMU VM?

가상 머신에서 들어오는 트래픽을 필터링하고 캡처하고 싶습니다. 가상 머신은 사용자 공간에서 실행되어야 합니다. 캡처에는 루트가 필요하다는 점을 이해합니다(단, 향후에는 필요한 루트 활동을 최소화하고 싶습니다).

제가 아는 한, 캡처하고 필터링하는 가장 쉬운 방법은 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를 사용하여 브리지에 연결을 시도했지만 루트가 아닌 사용자로는 연결할 수 없습니다.

/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

온라인에서 찾은 명령을 시도했지만튜닝/탭이 필요합니까?, 그리고 이 작업을 수행하는 올바른 방법을 찾을 수 없습니다.

참고 자료(도움이 되지만 문제가 해결되지 않음):

관련 정보