Fre*_*ord 5 networking port-forwarding forwarding 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>
Run Code Online (Sandbox Code Playgroud)
我的测试是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,多功能=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4, bus=pci.0,addr=0x5.0x2 -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 -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,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,disable-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 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',它正在使用中
对于非用户模式网络设置,已经存在几个 问题。但我需要使用用户模式网络。
我如何使用带有 qemu 和用户模式网络的 libvirt 正确转发端口?
该文档在这里并不是很有帮助,因为它没有说明如何覆盖现有的设备定义。
小智 6
此处描述了配置中缺少的部分: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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5640 次 |
最近记录: |