Ubuntu Server 24.04主机KVM/QEMU虚拟机NAT端口转发配置求助
Ubuntu Server 24.04主机KVM/QEMU虚拟机NAT端口转发配置求助
别着急,我帮你一步步搞定这个NAT端口转发的问题,顺便给你后续部署Web应用的相关配置提个参考:
首先,我们得先明确几个前提(你需要根据自己的实际环境替换下面的示例值):
- KVM默认创建的NAT网络子网一般是
192.168.122.0/24,你可以在主机上用ip a查看virbr0网卡的IP确认 - 先登录到Guest虚拟机,用
ip a拿到它的实际IP,示例里假设是192.168.122.10 - 主机的对外网卡(就是分配到
192.168.100.1的那个网卡),示例里假设是eth0
第一步:调整主机SSH端口,避免冲突
你需要把主机的SSH监听端口改成50022,这样访问主机IP的50022端口就直接连主机,22端口专门留给Guest的转发:
- 编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config - 找到
Port 22这一行(如果被注释就去掉前面的#),改成Port 50022 - 保存退出后,重启SSH服务:
sudo systemctl restart sshd - 用UFW允许这个新端口:
sudo ufw allow 50022/tcp
第二步:开启主机IP转发
这是NAT转发的基础,必须先开启:
- 编辑sysctl配置文件:
sudo nano /etc/sysctl.conf - 找到
net.ipv4.ip_forward=1这一行,去掉前面的注释# - 让配置立即生效:
sudo sysctl -p
第三步:配置iptables端口转发规则
我们要添加DNAT规则把主机的22端口转到Guest的22端口,同时配置SNAT让Guest能正常回包:
- 添加DNAT规则(替换成你的Guest IP和主机网卡名):
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.122.10:22 - 添加SNAT规则(替换成你的主机网卡名和NAT子网):
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE - 用UFW允许主机的22端口:
sudo ufw allow 22/tcp
第四步:保存规则,确保重启后生效
Ubuntu重启后iptables规则会丢失,我们用iptables-persistent来永久保存:
- 安装工具:
sudo apt update && sudo apt install iptables-persistent - 安装过程中会提示保存当前的IPv4和IPv6规则,都选
Yes即可
测试配置
现在你可以从同一局域网的其他机器测试:
- 连接主机SSH:
ssh your_host_user@192.168.100.1 -p 50022,应该直接登录到主机 - 连接Guest SSH:
ssh your_guest_user@192.168.100.1,应该登录到Guest虚拟机
后续部署Nginx的额外建议
等你在Guest上装好Nginx并部署Web应用后,要让外部访问主机IP就能打开应用,只需要添加对应的端口转发规则:
比如转发80端口:
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.122.10:80 sudo ufw allow 80/tcp
如果用HTTPS的443端口,同理添加对应的规则即可,别忘了用sudo netfilter-persistent save保存新规则。
备注:内容来源于stack exchange,提问作者sujan bastola
相关产品推荐
相关产品推荐

