我正在尝试在 KVM 中设置多个相互隔离的 NAT 网络,但无法正常工作。我面临一种无法解释的行为,我想对此进行一些澄清。
如果我在 IP 范围 192.168.122.0/24、192.168.123.0/24 和 192.168.124.0/24 中设置 3 个 NAT 网络,并按该顺序启动它们,122 中的虚拟机将无法 ping 123 或 124 中的虚拟机(这是我想要的行为),123 中的虚拟机将能够 ping 通 122,但不能 ping 124,而 124 中的虚拟机将能够 ping 122 和 123。
启动顺序似乎很重要,因为它将暗示 iptables 规则顺序,我认为这就是该行为的原因。
我读过这个文档:
在此步骤中,您选择要在此虚拟网络内使用的 IP 地址范围。使用此虚拟网络的所有来宾都可以看到它们,但由于 NAT,在虚拟网络之外看不到它们。
并在这个教程:
尽管主机操作系统和公共网络无法启动与 NAT 网络中的来宾的连接,但请注意,其他 NAT 中的 KVM 来宾确实有能力访问它。
看似矛盾的信息。
我想了解实际行为,并知道是否有办法实现我想要的。
编辑:完整的设置有点复杂,因为它涉及 GNS3 层。
我尝试过的:
virt-manager
通过在不同的 IP 范围上创建不同的虚拟 NAT 网络。例如,virsh net-dumpxml
其中两个网络的结果是:
# Note : This one is the default one
<network>
<name>default</name>
<uuid>5506b439-c3f6-4d8a-b901-66736c18c976</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:9c:bf:07'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
# Note : This one is one I created through virt-manager
<network>
<name>nat-network1</name>
<uuid>dca96cc1-b4bd-44ac-b1b9-9f581219fa94</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:2e:7d:d5'/>
<domain name='defaul1'/>
<ip address='192.168.123.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.123.2' end='192.168.123.254'/>
</dhcp>
</ip>
</network>
- 使用 GNS3(“云”接口)中的特殊接口,允许将虚拟机链接到这些 NAT 虚拟网络。例如,我已将 VM1 链接到
default
,将 VM2 链接到nat-network1
。两个虚拟机都通过 DHCP 在我定义的范围内获取 IP,都可以访问互联网。
我所期望的:我预计设置为使用不同 NAT 网络的虚拟机将无法通信。正如我一开始所解释的那样,情况似乎并非如此。
答案1
在您发布的教程中提到:
如果您没有将“dev”属性设置为物理网络设备或网桥,那么您将得到意外的行为,因为它可能会采取捷径并使用内部接口将流量直接从一个 KVM 网络转发到另一个 KVM 网络。
这似乎就是导致您出现问题的原因。
改变:
<forward mode='nat'>
到:
<forward mode='nat' dev='<network interface example: eth0>' >
我对此进行了测试,它使 iptables 规则起作用。