web-dev-qa-db-ja.com

ユーザーモードネットワークでlibvirtを介してqemuでホストポートを転送

LibvirtのHost-xmlを編集してqemuを転送するのに問題がありますTCPゲストへの接続。 この質問 リンク先 ブログ投稿 = -redirをQemuコマンドラインに追加することを推奨しましたが、最近は機能しなくなりました。

エラー:内部エラー:qemuが予期せずモニターを閉じました:qemu-system-x86_64:-redir tcp:5564 :: 3389:-redirオプションは非推奨です。代わりに「-netdev user、hostfwd = ...」を使用してください。

ただし、これはそのままでは機能しません。つまり、ホストで開いているポートを取得しますが、クライアントには到達しません。

XMLを次のように編集しました。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  .
  .
  .
  </devices>
  <qemu:commandline>
    <qemu:arg value='-net'/>
    <qemu:arg value='user,hostfwd=tcp::22222-:22,hostfwd=tcp::8000-:8000'/>
  </qemu:commandline>
</domain>

私のテストは、クライアントでnc -l -p 8000を実行し、ホストでtelnet localhost 8000を実行することでした。 Telnetは、開かれたTCP=接続を示していますが、クライアントは何も受信していません。

Libvirtには既に-Net User,...オプションが含まれており、新しく定義されたオプションがどういうわけか適切に処理されないためだと思います。 ps aux | grep qemuはこれを示しています:

qemu-system-x86_64 -enable-kvm -name guest = myguestsname、debug-threads = on -S -object secret、id = masterKey0、format = raw、file =〜/ .config/libvirt/qemu/lib/domain-28 -myguestsname/master-key.aes -machine pc-i440fx-artful、accel = kvm、usb = off、vmport = off、dump-guest-core = off -cpu Skylake-Client -m 1024 -realtime mlock = off -smp 1、sockets = 1、cores = 1、threads = 1 -uuid 713287321 -no-user-config -nodefaults -chardev socket、id = charmonitor、path =〜/ .config/libvirt/qemu/lib/domain-28-myguestsname /monitor.sock,server,nowait -mon chardev = charmonitor、id = monitor、mode = control -rtc base = utc、driftfix = slew -global kvm-pit.lost_tick_policy = delay -no-hpet -no-shutdown -global PIIX4_PM .disable_s3 = 1 -global PIIX4_PM.disable_s4 = 1 -boot strict = on -device ich9-usb-ehci1、id = usb、bus = pci.0、addr = 0x5.0x7 -device ich9-usb-uhci1、masterbus = usb .0、firstport = 0、bus = pci.0、multifunction = on、addr = 0x5 -device ich9-usb-uhci2、masterbus = usb.0、firstport = 2、bus = pci.0、addr = 0x5.0x1-デバイスich9-usb-uhci3、masterbus = usb.0、firstport = 4、bus = pci.0、addr = 0x5.0 x2 -device virtio-serial-pci、id = virtio-serial0、bus = pci.0、addr = 0x6 -drive file =〜/ .local/share/libvirt/images/myguestsname.img、format = qcow2、if = none 、id = drive-virtio-disk0 -device virtio-blk-pci、scsi = off、bus = pci.0、addr = 0x7、drive = drive-virtio-disk0、id = virtio-disk0、bootindex = 1-ドライブファイル= Cloud-Init-ISO/master-init.iso、format = raw、if = none、id = drive-ide0-0-0、readonly = on -device ide-cd、bus = ide.0、unit = 0、 drive = drive-ide0-0-0、id = ide0-0-0 -fsdev local、security_model = mapped、id = fsdev-fs0、path =〜/ guestfs -device virtio-9p-pci、id = fs0、fsdev = fsdev-fs0、mount_tag = guestsfs、bus = pci.0、addr = 0x9 -netdev user、id = hostnet0 -device virtio-net-pci、netdev = hostnet0、id = net0、mac = 52:54:00:aa: aa:0a、bus = pci.0、addr = 0x3 -chardev pty、id = charserial0 -device isa-serial、chardev = charserial0、id = serial0 -chardev spicevmc、id = charchannel0、name = vdagent -device virtserialport、bus = virtio-serial0.0、nr = 1、chardev = charchannel0、id = channel0、name = com.redhat.spice.0 -device usb-tablet、id = input0、bus = usb.0、port = 1 -spice port = 5900、addr = 127.0.0.1、dis able-ticketing、image-compression = off、seamless-migration = on -device qxl-vga、id = video0、ram_size = 67108864、vram_size = 67108864、vram64_size_mb = 0、vgamem_mb = 16、max_outputs = 1、bus = pci.0 、addr = 0x2 -device intel-hda、id = sound0、bus = pci.0、addr = 0x4 -device hda-duplex、id = sound0-codec0、bus = sound0.0、cad = 0 -chardev spicevmc、id = charredir0、name = usbredir -device usb-redir、chardev = charredir0、id = redir0、bus = usb.0、port = 2 -chardev spicevmc、id = charredir1、name = usbredir -device usb-redir、chardev = charredir1、id = redir1、bus = usb.0、port = 3 -device virtio-balloon-pci、id = balloon0、bus = pci.0、addr = 0x8 -Net User、hostfwd = tcp :: 22222-:22、hostfwd = tcp :: 8000-:8000 -msgタイムスタンプ=オン

-netdev user,id=hostnet0が表示されます。カスタムコマンドラインで同じ名前を使用しようとしましたが、失敗しました。

エラー:内部エラー:モニターへの接続中にプロセスが終了しました:qemu-system-x86_64:-chardev pty、id = charserial0:/ dev/pts/23(ラベルcharserial0)にリダイレクトされたcharデバイス

qemu-system-x86_64:-device virtio-net-pci、netdev = hostnet0、id = net0、mac = 52:54:00:aa:aa:0a、bus = pci.0、addr = 0x3:プロパティ 'virtio- net-device.netdev 'は値' hostnet0 'をとることができず、使用中です

非ユーザーモードのネットワーク設定の場合、 いくつか質問 はすでに存在しています。ただし、ユーザーモードネットワーキングを使用する必要があります。

Qvirとユーザーモードネットワークでlibvirtを使用してポートを適切に転送するにはどうすればよいですか?

documentation は、既存のデバイス定義を上書きする方法を説明していないため、ここではあまり役に立ちません。

5
Frederick Nord

構成から欠落している部分は、ここで説明されています: https://www.linux-kvm.org/page/Networking 。次のように、新しいアドレスで別のnetdevを追加する必要があります。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
.
.
.
 </devices>
 <qemu:commandline>
   <qemu:arg value='-netdev'/>
   <qemu:arg value='user,id=mynet.0,net=10.0.10.0/24,hostfwd=tcp::22222-:22,hostfwd=tcp::8000-:8000'/>
   <qemu:arg value='-device'/>
   <qemu:arg value='e1000,netdev=mynet.0'/>
 </qemu:commandline>
</domain>
4
mihais