在我的VM主机上,我有两个libvirt虚拟networking:
我在每个虚拟networking背后都有一个虚拟机。 机器可以看到主机,并看到互联网。 但是,当我尝试从一个networking连接到另一个networking时,即使连接到我所知道的端口,我也会得到“拒绝连接”。
我禁用UFW(主机是Ubuntu),仍然失败。 没有logging,所以我不知道哪个规则阻止它。 我的FORWARD块(我假设由virtlib创build)是:
Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED ACCEPT all -- 192.168.122.0/24 anywhere ACCEPT all -- anywhere anywhere REJECT all -- anywhere anywhere reject-with icmp-port-unreachable REJECT all -- anywhere anywhere reject-with icmp-port-unreachable ACCEPT all -- anywhere 192.168.130.0/24 ctstate RELATED,ESTABLISHED ACCEPT all -- 192.168.130.0/24 anywhere ACCEPT all -- anywhere anywhere REJECT all -- anywhere anywhere reject-with icmp-port-unreachable REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
如果我清除了所有的防火墙规则,那么不同虚拟networking上的虚拟机可以相互通信,但是当然不能脱离虚拟机主机。
我发现如果我摆脱了这些规则:
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -o virbr1 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -i virbr1 -j REJECT --reject-with icmp-port-unreachable
然后虚拟机可以相互交谈。 这太棒了,但是我该如何指示libvirt修改它如何创build转发规则,以便它不禁止虚拟networking之间的stream量?
感谢您提供任何提示,指针或url!
发生这种情况是因为您已将虚拟networkingconfiguration为“nat”networking。
build立这样一个networking,只能访问:
特别是,如您所发现的,访问主机上的任何其他虚拟networking都被阻止。
要解决这个问题需要两个步骤:
将每个虚拟networking重新configuration为“路由”networking,而不使用NAT。 在这种情况下,libvirtd不会尝试将虚拟networking彼此隔离,但也不会执行任何NAT。
您将需要通过编辑XML(使用virsh net-edit networkname ; virt-manager GUI不能进行此更改)来完成此操作:
<forward mode='nat'/>
应改为:
<forward mode='route'/>
当您使用networkingclosures所有虚拟机,停止networking( virsh net-stop networknamenetworking终止networkingvirsh net-stop networkname ),重新启动networking( virsh net-start networknamenetworkingvirsh net-start networkname )并使用networking重新启动所有虚拟机时,此更改将生效。
如果您希望虚拟机访问Internet,则您还必须插入自己的伪装规则。
例如,在/etc/ufw/before.rules 的nat表部分 :
-A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE -A POSTROUTING -s 192.168.130.0/24 -o eth0 -j MASQUERADE
或者,你可以忘记所有这些,创build一个新的孤立的虚拟networking,并给每个虚拟网卡连接一个隔离的networking。 虚拟机可以通过这个networking进行通信。