找回密码
 加入我们
搜索
      
查看: 170|回复: 3

[网络] KVM怎么把物理机的端口转发到虚拟机

[复制链接]
发表于 2025-11-23 23:43 | 显示全部楼层 |阅读模式
本帖最后由 chainofhonor 于 2025-11-24 00:48 编辑

RT
今天学了一天的纯命令行模式下安装KVM
然后各种功能都没问题了
唯独这个有问题

物理机是rockylinux10
虚拟机也是rockylinux10

我想把物理机的2200端口,转发到虚拟机的22端口
通过iptables或者firewall都行
我今天折腾了好几个小时这个问题,都不通

----------------------------------------------
虚拟机可以正常上网

然后我对服务器的防火墙做如下设置:
firewall-cmd --add-masquerade
然后在防火墙里面添加端口转发
firewall-cmd --add-forward-port=port=2201:proto=tcp:toaddr=192.168.11.2:toport=3389
firewall-cmd --add-forward-port=port=2200:proto=tcp:toaddr=192.168.122.6:toport=22

现在问题来了:
我有一台电脑,是和服务器在同一网络的,电脑的IP是192.168.11.179
用这台电脑扫描服务器的2200和2201端口,发现2200端口不通  

然后我把服务器的端口转发删掉,把端口对调
firewall-cmd --add-forward-port=port=2200:proto=tcp:toaddr=192.168.11.2:toport=3389
firewall-cmd --add-forward-port=port=2201:proto=tcp:toaddr=192.168.122.6:toport=22
再用这台电脑扫描服务器的2200和2201端口,发现2201端口不通了
----------------------------------------------

症状就是这样
端口转发同网段的没问题,转发到虚拟机的不行

用firewall或者iptables转发都是这种症状

用socat转发没问题
但是这个技术未来我要用到生产环境的,我感觉还是防火墙转发稳定

谁知道这个问题应该怎么解决?


还有个奇葩问题
systemctl start libvirtd #启动服务
systemctl status libvirtd  # 确认服务运行正常
systemctl enable libvirtd #设置开机启动启动服务  

这个服务设置了开机自启,但是每次重启物理机,这个服务都不会自启,都需要我手动start


发表于 2025-11-23 23:46 | 显示全部楼层
firewalld 的端口转发默认只对外部区域(external zone)生效,而你把网卡放在了 internal/trusted 这种区域,导致从同一网段来的包根本不会走 FORWARD 链,自然就转发失效了。

很简单,你把产生外部访问的网卡放到 external 区域 + 开 masquerade + 加 forward-port 规则,这是 RHEL/CentOS/Rocky 官方文档里明确写的标准做法。

 楼主| 发表于 2025-11-24 00:39 | 显示全部楼层
本帖最后由 chainofhonor 于 2025-11-24 00:44 编辑
黑钢 发表于 2025-11-23 23:46
firewalld 的端口转发默认只对外部区域(external zone)生效,而你把网卡放在了 internal/trusted 这种区 ...


刚刚测试了,问题依旧

我个人倾向于是KVM的网络里面有一些设置导致的

我用一台外部的电脑,和物理机设置在同一网段,网关指向物理机的IP
然后ping物理机的virtbr0的IP能通
但是ping虚拟机的IP就提示无法连到端口

虚拟机ping外部电脑的IP能通
虚拟机的防火墙是关了的

在物理机上ping虚拟机的IP是能通的


我感觉解决这个外部电脑ping虚拟机的问题 就能解决端口映射的问题了  

发表于 2025-11-24 01:18 | 显示全部楼层
那你试试policy + rich-rule呢,强制让同网段的流量也走转发。
先创建一个专用的转发策略,



然后把ingress和egress都设定到ANY呢?

就像这样:
firewall-cmd --permanent --policy ToKVM --set-target ACCEPT
firewall-cmd --permanent --policy ToKVM --add-ingress-zone ANY
firewall-cmd --permanent --policy ToKVM --add-egress-zone ANY
然后再再加一个真正的DNAT富规则,匹配所有。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-11-24 05:12 , Processed in 0.009403 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表