QEMU허용하다공용 멀티캐스트 주소를 기반으로 하는 가상 네트워크를 사용하면 시작 시 지정하여 다양한 가상 머신을 연결할 수 있습니다 -netdev socket,mcast=230.0.0.1:1234
.
이렇게 하면 여러 VM을 쉽게 연결하고 즉시 새 VM에 참여할 수 있습니다.
이 네트워크에 가입할 수 있나요?아니요QEMU를 사용하시나요? 특히, 도커 컨테이너를 이 네트워크에 연결할 수 있나요?
답변1
여러 호스트가 아닌 단일 호스트에서 VM을 실행한다고 가정하면 QEMU VM과 다른 VM(또는 실제 호스트) 사이에 네트워크를 설정하는 가장 쉬운 방법은 멀티캐스트 대신 Tap 장치를 사용한 다음 Tap 장치를 브리지하는 것입니다. device 를 클릭하고 Docker 컨테이너 인터페이스(또는 원하는 인터페이스)를 브리지에 추가하세요.
그런데 제공하신 링크의 구문과 네트워크 설명은 다음과 같습니다.쓸모없는그리고 어느 단계에서는 사라질 것입니다. 특히, QEMU VLAN의 개념은 사라질 것입니다. 현재 구문에서는 다음과 같은 것을 사용합니다.
-netdev tap,ifname=qemu0
그런 다음 (루트로)
ip link add br_qemu type bridge
ip link set br_qemu up
ip link set qemu0 master br_qemu
ip link set qemu1 master br_qemu
가상 머신을 시작하기 전에 브리지를 생성하는 경우 -netdev bridge,br=br_qemu
QEMU를 사용하여 브리지에 탭 인터페이스를 추가할 수도 있습니다.
가상 머신이 서로 다른 물리적 호스트에서 실행되기 때문에 특별히 멀티캐스트가 필요한 경우 상황은 더 복잡합니다. 첫 번째 단계는 QEMU가 보내는 패킷의 형식을 파악하는 것입니다(원시 패킷은 아니지만 더 자세히 살펴보지는 않았습니다). 두 번째 단계는 멀티캐스트 그룹에 합류하고 그룹과 그룹 간에 전달하는 프록시를 작성하는 것입니다. 포인트 앤 클릭 인터페이스.
또는(그러나 덜 효율적이지만) 두 네트워크 카드(멀티캐스트 1개와 탭 1개)가 있는 전용 QEMU VM을 실행할 수 있습니다. 이 카드는 카드 간에 전달하는 것 외에는 아무것도 수행하지 않도록 구성됩니다.
더 나은 대안은 서로 다른 방식(터널, 물리적 LAN의 VLAN(QEMU VLAN이 아닌 실제 801.q VLAN))으로 서로 다른 물리적 호스트 간의 통신을 구현하고 Tap 인터페이스를 고수하는 것입니다.
편집하다
LAN에 VLAN을 추가하려면 eth0
호스트에 추가하고 다음을 수행하십시오.
ip link add link eth0 name eth0.5 type vlan id 5
5
선택한 VLAN 태그는 어디에 있습니까? 다음으로 이 인터페이스를 브리지에 추가하세요.
ip link set eth0.5 master br_qemu
이제 가셔도 됩니다. 가상 머신을 시작하는 스크립트에 이 두 명령을 넣을 수 있습니다. 또는 이에 상응하는 내용을 입력하세요 /etc/network/interfaces
(자세한 내용은 Google 또는 맨페이지 참조). 예, 호스트 시스템에 일부 구성이 필요합니다.
편집하다
좋습니다. QEMU에서 보낸 멀티캐스트 패킷 형식을 살펴보니 이더넷 프레임이었습니다. 그래서 당신은 다음을 할 수 있습니다
socat UDP4-DATAGRAM:230.0.0.1:1234,sourceport=1234,ip-add-membership=230.0.0.1:10.0.0.2 TUN:10.2.3.1/24,tun-type=tap,iff-no-pi,iff-up
도커 컨테이너가 있는 호스트에서 는 10.0.0.2
멀티캐스트 그룹과 관련된 호스트의 유효 IP 주소입니다(예: 의 IP 주소) eth0
. 이는 tap
이더넷 패킷을 멀티캐스트 그룹과 보내고 받을 수 있는 (레벨 2) 인터페이스를 제공합니다 . 이제 이를 Docker 컨테이너에 연결/라우팅하기만 하면 됩니다.
socat
당신이 원하고 그것이 더 효율적이라고 생각한다면, 당신은 대신에 당신 자신의 짧은 C 프로그램 등을 작성할 수도 있습니다.