libvirt: 기존 Tap 인터페이스를 VM에 할당

libvirt: 기존 Tap 인터페이스를 VM에 할당

qemu/kvm을 사용하여 가상 머신을 생성하고 기존 Tap 인터페이스를 가상 머신에 할당하고 싶습니다. virshCLI 또는 GUI를 사용하여 virt-manager이를 수행하는 방법은 무엇입니까 ?

이 수동 qemu 호출에 해당하는 libvirt를 찾고 있습니다.

qemu-system-x86_64 -net nic, 모델=virtio, macaddr= -net tap, ifname=MY_EXISTING_TAP_INTERFACE, script=no

브리지를 포함하여 모든 네트워킹을 직접 관리하는 복잡한 멀티홈 방화벽과 라우터가 있기 때문에 이것을 원합니다. 가상 머신이 내가 준비한 Tap 인터페이스만 사용하고 다른 작업은 수행하지 않기를 원합니다.

답변1

virt-manager GUI를 사용하면 가상 머신의 세부 정보를 볼 수 있고, 버튼을 클릭하고 , 대화 상자에서 세부 정보를 Add Hardware선택 하고 입력할 수 있습니다.Network

명령줄에서 를 사용할 수 있습니다. virsh attach-interface또는 NIC에 적합한 XML 조각을 생성/복사한 경우에는 다음을 사용하십시오 virsh attach-device(BTW, attach-interface하위 명령에는 --print-xml인터페이스를 연결하는 대신 XML 조각만 인쇄하는 옵션이 있습니다).

virsh매뉴얼 페이지와libvirt.org웹 사이트에는 광범위한 내장 도움말도 있습니다. 예를 들어:

# virsh attach-interface --help
  NAME
    attach-interface - attach network interface

  SYNOPSIS
    attach-interface <domain> <type> <source> [--target <string>] [--mac <string>]
      [--script <string>] [--model <string>] [--alias <string>] [--inbound <string>]
      [--outbound <string>] [--persistent] [--config] [--live] [--current] [--print-xml]
      [--managed] [--source-mode <string>]

  DESCRIPTION
    Attach new network interface.

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--type] <string>  network interface type
    [--source] <string>  source of network interface
    --target <string>  target network name
    --mac <string>   MAC address
    --script <string>  script used to bridge network interface
    --model <string>  model type
    --alias <string>  custom alias name of interface device
    --inbound <string>  control domain's incoming traffics
    --outbound <string>  control domain's outgoing traffics
    --persistent     make live change persistent
    --config         affect next boot
    --live           affect running domain
    --current        affect current domain
    --print-xml      print XML document rather than attach the interface
    --managed        libvirt will automatically detach/attach the device from/to host
    --source-mode <string>  mode attribute of <source/> element


# virsh attach-device --help
  NAME
    attach-device - attach device from an XML file

  SYNOPSIS
    attach-device <domain> <file> [--persistent] [--config] [--live] [--current]

  DESCRIPTION
    Attach device from an XML <file>.

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--file] <string>  XML file
    --persistent     make live change persistent
    --config         affect next boot
    --live           affect running domain
    --current        affect current domain

기억하세요, 와 함께 libvirt,모든 것VM 정보("도메인")는 궁극적으로 XML을 사용하여 구성됩니다. libvirt 자체와 libvirt가 관리하는 모든 가상 머신에 대한 XML 구성 파일과 구성 파일 조각을 생성하고 수정하기 위한 도구입니다 virsh.virt-manager

virsh도메인의 전체 XML 구성이나 특정 장치의 XML 조각을 표준 출력으로 덤프하는 여러 명령이 있습니다. 나중에 사용하기 위해 파일로 리디렉션될 수 있습니다. 또는 이와 유사한 것을 사용하여 수정할 수도 있습니다 xmlstarlet(XML 출력은 편리하게 거의 라인 지향 형식이므로 awk, sed 또는 perl 등을 사용하여 합리적으로 수정할 수 있지만 도구를 사용하는 것이 더 나을 것입니다). 또는 언어 올바른 XML을 구문 분석하고 생성할 수 있으며 재사용하여 기존 VM을 업데이트하거나 약간 다른 새 VM을 생성할 수 있습니다.

예를 들어 명령 및 XML 구성 파일/조각으로 수행할 수 있는 작업을 virsh help | grep -i xml확인하려면 실행해 보세요 .virsh

그런데 다양한 "편집" 하위 명령(예: , , edit등)은 XML을 원하는 편집기(일반 또는 환경 변수를 통해)에 로드하여 편집할 수 있도록 합니다. 변경 사항을 저장한 후 XML이 확인을 통과하면 편집 중인 항목에 따라 가상 머신 또는 자체를 재구성하는 데 사용됩니다.iface-editpool-edit$EDITOR$VISUALlibvirt

답변2

같은 문제가 있습니다. 내 (주로) 호스트 기반 네트워크에서 작동하는 XML은 다음과 같습니다.

<interface type="ethernet">
  <script path="/vm/qemu/tap-up.sh"/>
  <target dev="tap10"/>
  <mac address="00:11:22:33:44:55"/>
  <model type="virtio"/>
  <address type:="pci"/>
</interface>

기본적으로 QEMU를 사용하는 경우 모든 네트워크 구성은 호스트에서 수행되지만 어떤 이유로 libvirt는 여기에 언급된 "managed" 지시문을 무시합니다.https://libvirt.org/formatdomain.html#generic-ethernet-connection

그래서 호스트에 브리지를 구성하고 libvirt가 탭을 생성하도록 했습니다. Tap이 생성된 후 위에 나열된 스크립트는 브리지 인터페이스의 멤버로 "tap10"을 추가합니다. 이상적이지는 않지만 작동합니다.

관련 정보