У меня проблемы с редактированием host-xml в libvirt, чтобы 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,...
option, и почему-то мой недавно определенный параметр не обрабатывается должным образом. ps aux | grep qemu
показывает это:
qemu-system-x86_64 -enable-kvm -name guest = mygestsname, debug-threads = on -S -object secret, id = masterKey0, format = raw, file = ~ / .config / libvirt / qemu / lib / domain-28 -mygestsname / master-key.aes -machine pc-i440fx-artful, accl = kvm, usb = off, vmport = off, dump-guest-core = off -cpu Skylake-Client -m 1024 -realtime mlock = off -smp 1, сокеты = 1, ядра = 1, потоки = 1 -uuid 713287321 -no-user-config -nodefaults -chardev socket, id = charmonitor, path = ~ / .config / libvirt / qemu / lib / domain-28-mygestsname /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, многофункциональный = 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 / mygestsname.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 -drive file = 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, диск = диск-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 = guestfs, 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 -устройство usb-tablet, id = input0, bus = usb.0, port = 1 -spice port = 5900, адрес = 127.0.0.1, дис возможность-тикетинг, сжатие изображений = выкл., бесшовная миграция = на-устройстве 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 timestamp = on
Мы можем увидеть -netdev user,id=hostnet0
. Я попытался использовать то же имя в своей командной строке, но это не удалось:
ошибка: внутренняя ошибка: процесс завершился при подключении к монитору: qemu-system-x86_64: -chardev pty, id = charserial0: char устройство перенаправлено на / dev / pts / 23 (метка charserial0)
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, оно используется
Для сетевых настроек без пользовательского режима, несколько вопросы уже существуют. Но мне нужно работать с сетью пользовательского режима.
Как правильно перенаправить порты с помощью libvirt с qemu и сетью в пользовательском режиме?
В документация здесь не очень полезно, потому что в нем не говорится, как переопределить уже существующие определения устройств.
недостающая часть вашей конфигурации описана здесь: 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>