我使用 Virsh 来管理使用 KVM 的虚拟机。拥有一台主机和带有 http 服务(端口 80)的虚拟机。如何在不使用 iptables、firewalld 或 route 等防火墙的情况下设置端口转发以将 http 服务公开到 Internet?
实际上我使用 iptables,很难管理所有的连接类型。
我可以在 KVM 中设置规则以重定向主主机和虚拟机之间的 http 流量吗?例如,在 VirtualBox 中,在网络配置中有一个端口转发选项,比如主机 ip、主机端口、虚拟 ip、虚拟端口和主机中的监听端口为本地主机(0.0.0.0)。
如何在 KVM 中制作这个?
我尝试使用带有 qemu artguments 的本机端口转发来编辑 XML,但不起作用:
# virsh edit demo
> <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
> <name>...
> ...
> <qemu:commandline>
> <qemu:arg value='-redir'/>
> <qemu:arg value='tcp:80::80'/>
> </qemu:commandline>
> </domain>
# virsh start demo
# ps -aux | grep qemu
root 30119 58.8 2.9 3421616 330084 ? Sl 15:38 0:07 qemu-system-x86_64 -enable-kvm -name demo -S -machine pc-i440fx-xenial,accel=kvm,usb=off -cpu Haswell -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid c996f3b2-5e16-470f-9ad6-e591fc9a2537 -nographic -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-demo/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -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=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3 -drive file=/var/kvm/images/demo.img,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:43:ed:8d,bus=pci.0,addr=0x2 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-demo/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -redir tcp:80::80 -msg timestamp=on
现在,从主机http://192.168.123.91/打开工作正常,但http://127.0.0.1/无法连接,但 qemu 命令显示-redir tcp:80::80
.
我做错了什么?