Nix의 Tap Network를 사용하여 가상 머신 간의 네트워킹을 설정하시겠습니까?

Nix의 Tap Network를 사용하여 가상 머신 간의 네트워킹을 설정하시겠습니까?

여러 가상 머신 간에 네트워크를 공유하려고 합니다.

나는 다음을 추가해 보았습니다:

    qemu.networkingOptions = [
                               "-nic user,model=virtio-net-pci"
                               "-netdev tap,id=mynet0"
                             ];

그러나 이로 인해 다음과 같은 오류가 발생합니다.

qemu-system-x86_64: network script /etc/qemu-ifup failed with status 256

루트로 실행하는 경우에도 마찬가지입니다. 이 파일이 실제로 어디에 있는지도 모르겠습니다. 손님 문제일까요?

답변1

옵션을 순수하게 유지해야 합니다. 내 말은, 네트워크 선언을 혼합할 수 없다는 뜻입니다.

-net nic,model=virtio-net-pci,macaddr=... -net user,restrict=[on|off]

그리고

-device virtio-net-pci,netdev=net0,mac=...  -netdev tap,ifname=tap0,id=net0,script=...,downscript=...

이러한 옵션 중 첫 번째는 전용 범위가 10.0.0.x/8인 가상 LAN을 생성하고 게스트 VM에 10.0.0.15의 DHCP 주소를 제공하며 (비활성화) 게스트 VM이 호스트 시스템 네트워크에 연결할 수 있도록 허용합니다. 내장형 NAT 방화벽; 표시된 문자는 호스트의 tap0 인터페이스에 바인딩된 가상 인터페이스를 생성하며, 여기서 tap0이 연결되는 실제 인터페이스를 정의해야 합니다.

따라서 두 개의 가상 머신(예: VMA/tapA 및 VMB/tapB)을 연결하려는 경우 다음과 같이 정의할 수 있는 브리지를 통해 이러한 가상 머신을 함께 연결할 수 있습니다.

# ip link add name brAB type bridge
# ip link set dev  brAB up
# ip link set dev  tapA master brAB
# ip link set dev  tapB master brAB
# ip link set dev  tapA up
# ip link set dev  tapB up

이 구성은 VMA와 VMB를 연결하는 격리된 네트워크를 생성합니다.오직!. 이 네트워크를 무료 호스트 NIC와 결합하거나 다른 네트워크 모드를 구성하려면 가상 스위치(openvswitch) 또는 기타 가능성과 같은 실제 호스트 네트워크 구성에 대해 자세히 읽어야 합니다.

물론, 가상 인터페이스 tapA 또는 tapB를 사용하기 전에 상자에 넣어야 합니다. 예를 들어 다음과 같이 할 수 있습니다.

# ip tuntap add name tapA mode tap

주문하다.

답변2

다음이 필요합니다.

qemu.networkingOptions = [
                           "-device e1000,netdev=abc,mac=52:55:00:d1:55:01"
                           "-netdev tap,id=abc,ifname=tapA,script=no,downscript=no"
                         ];

두 번째 가상 머신에서 주소 + 인터페이스를 변경합니다.

qemu.networkingOptions = [
                           "-device e1000,netdev=abc,mac=52:55:00:d1:55:02"
                           "-netdev tap,id=abc,ifname=tapB,script=no,downscript=no"
                         ];

@schweik이 언급했듯이 다음 스크립트를 사용하여 네트워크도 구성해야 합니다.

for i in "$@"
do
case $i in
    --down)
        ip link delete brAB
        ip link delete tapA
        ip link delete tapB
    ;;
    --up)

        ip link add name brAB type bridge
        ip link set dev brAB up

        ip tuntap add dev tapA mode tap user $(whoami)
        ip tuntap add dev tapB mode tap user $(whoami)

        ip link set dev tapA master brAB
        ip link set dev tapB master brAB
        ip link set dev tapA up
        ip link set dev tapB up
    ;;
esac
done

관련 정보