가상 머신에서 들어오는 트래픽을 필터링하고 캡처하고 싶습니다. 가상 머신은 사용자 공간에서 실행되어야 합니다. 캡처에는 루트가 필요하다는 점을 이해합니다(단, 향후에는 필요한 루트 활동을 최소화하고 싶습니다).
제가 아는 한, 캡처하고 필터링하는 가장 쉬운 방법은 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
온라인에서 찾은 명령을 시도했지만튜닝/탭이 필요합니까?, 그리고 이 작업을 수행하는 올바른 방법을 찾을 수 없습니다.
참고 자료(도움이 되지만 문제가 해결되지 않음):