You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux宿主机访问QEMU虚拟机的流程及永久配置端口转发远程访问的最佳方案

Linux宿主机访问QEMU虚拟机的流程及永久配置端口转发远程访问的最佳方案

嘿,我完全懂你找稳定永久端口转发方案的痛苦——之前我也踩过不少坑,尤其是想要跨所有KVM变体通用的配置方式。别担心,直接通过修改虚拟机的XML配置文件添加QEMU原生参数,就能搞定永久生效的端口转发,下面一步步给你讲清楚:

首先,先把虚拟机停掉,因为修改XML需要虚拟机处于关机状态:

virsh shutdown <你的虚拟机名称>

接下来编辑虚拟机的XML配置:

virsh edit <你的虚拟机名称>

第一步要先给XML添加QEMU命名空间,不然libvirt会不识别qemu相关的标签。找到根标签<domain>,把它改成这样(原来的type属性保留,比如type='kvm'):

<domain type='kvm' xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">

然后,在XML文件的末尾,</devices>标签之后、</domain>标签之前,添加QEMU命令行参数区块,用来配置端口转发。举个实际例子:如果你想把宿主机的8080端口(TCP协议)转发到虚拟机的80端口,让远程能访问,就加这段:

<qemu:commandline>
  <qemu:arg value='-redir'/>
  <qemu:arg value='tcp:0.0.0.0:8080::80'/>
</qemu:commandline>

这里解释下参数的意思:

  • tcp:指定转发的协议,UDP的话改成udp就行
  • 0.0.0.0:表示允许所有远程IP访问这个端口,如果只想让本地访问,换成127.0.0.1
  • 8080:宿主机上对外暴露的端口
  • 80:虚拟机内部对应的服务端口

要是你需要转发多个端口,直接在同一个<qemu:commandline>里加多组参数就行,比如同时转发SSH(22)和HTTP(80):

<qemu:commandline>
  <qemu:arg value='-redir'/>
  <qemu:arg value='tcp:0.0.0.0:2222::22'/>
  <qemu:arg value='-redir'/>
  <qemu:arg value='tcp:0.0.0.0:8080::80'/>
</qemu:commandline>

保存退出编辑器后,启动虚拟机:

virsh start <你的虚拟机名称>

最后验证一下配置是否生效:在宿主机上用这条命令查看端口监听状态,能看到qemu进程在监听你设置的端口就说明成了:

ss -tulnp | grep <宿主机端口号>

还有几个要注意的点:

  • 宿主机的防火墙(比如ufw、firewalld)要开放你设置的宿主机端口,比如用ufw allow 8080/tcp
  • 虚拟机内部的防火墙也要开放对应的服务端口(比如上面例子里的80)
  • 这种方式之所以能适配所有KVM变体,是因为直接用了QEMU原生的端口转发参数,绕过了libvirt不同网络模式下的配置差异,不管你用的是user网络、NAT还是桥接,只要虚拟机启动就会加载这些参数

备注:内容来源于stack exchange,提问作者nicholascox2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:08:11