동일한 브리지에 연결된 가상 머신은 서로 ping할 수 없습니다.

동일한 브리지에 연결된 가상 머신은 서로 ping할 수 없습니다.

이제 libvirt와 같은 도구를 사용하지 않고 qemu를 통해 직접 두 개의 가상 머신을 호스팅하려고 합니다.

나는 각각에 대해 브리지/탭 인터페이스를 설정했습니다.

ip link add br0 type bridge
ip addr add 192.168.122.1/24 dev br0
ip link set br0 up

ip tuntap add mode tap tap0
ip link set tap0 master br0
ip link set tap0 up             // tap1 as well

그리고 다음 명령을 통해 가상 머신을 시작합니다.

qemu-system-x86_64 -enable-kvm -m 1G \
-cdrom archlinux-2018.12.01-x86_64.iso \
-drive file=vm.raw,format=raw,id=hd0 \
-device virtio-net,netdev=network0 \
-netdev tap,id=network0,ifname=tap0,script=no,downscript=no \
-device virtio-net,netdev=network1 \
-netdev user,id=network1 \

의도적으로 두 개의 네트워크 카드를 할당했습니다. 이 user네트워크는 가상 머신이 인터넷에 액세스할 수 있도록 보장하며 탭 네트워크를 서브넷으로 사용할 수 있기를 원합니다. 콘솔에서 가상 머신의 네트워크 인터페이스에 수동 IP를 할당했습니다.

이 설정을 사용하면 호스트는 각 가상 머신을 ping할 수 있고 각 가상 머신은 호스트를 ping할 수 있지만 VM0은 VM1을 ping할 수 없으며 그 반대의 경우도 마찬가지입니다. 나는 다음과 같은 iptable 규칙을 사용해 보았습니다.

iptables -A FORWARD -i br0 -o br0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE

그러나 여전히 헛된 것입니다.

설명 1. (sourcejedi에)

보시다시피 이 부팅 명령은 Arch Linux의 liveCD입니다. 이런 식으로 시작 후 바로 쉘에 들어가게 됩니다. 기본적으로 탭의 인터페이스에는 IP 또는 라우팅 설정이 없습니다.

qemu는 3.0.0입니다. 호스트는 아치 리눅스입니다.

설명 2.

두 사람의 기본 MAC은 52:54:00:12:34:56으로 밝혀져 어떤 통신도 설정할 수 없었습니다.

답변1

이론적으로 두 탭이 모두 VM에 연결되고 둘 다 올바른 IP 설정(DHCP 또는 수동)으로 호스트의 브리지에 연결되면 iptable 조정 없이 서로 핑을 보낼 수 있어야 합니다.

문제는 모든 네트워크 장치에 동일한 MAC 주소를 할당하는 지나치게 단순화된 명령을 사용하여 각 가상 머신을 시작한다는 사실에서 비롯됩니다. 즉, 원래 명령을 간단히 확장하는 것과 같이 항상 가상 클러스터에 다른 MAC 주소를 할당해야 합니다.

-device virtio-net,netdev=network0,mac=52:54:01:12:34:56

마지막으로 모든 팁을 제공한 Sourcejedi에게 감사드립니다!

관련 정보