![将第二个公共 IP 路由到多个虚拟机](https://linux22.com/image/651709/%E5%B0%86%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%85%AC%E5%85%B1%20IP%20%E8%B7%AF%E7%94%B1%E5%88%B0%E5%A4%9A%E4%B8%AA%E8%99%9A%E6%8B%9F%E6%9C%BA.png)
我和朋友租用了一台专用服务器,并使用 KVM 和 libvirt 创建了虚拟机供我们使用。(我们在主机上使用 debian jessie)
我们购买了两个额外的 IP 地址(每人一个),这样我们就总共拥有三个 IP 地址(包括原始主机 IP)。
主机 IP 为 195.154.XXX.221,网关为 195.154.XXX.1,我们的额外 IP 为 212.129.XXX.XXX,位于不同子网,网关相同。我们的提供商已为我们提供了 mac 地址,这些地址必须在分配了额外 IP 的设备上使用。
我们可以毫无困难地将 IP 分配给单个虚拟机,但我们不知道如何在一个 IP 上拥有多个虚拟机。桥接不起作用,因为所有虚拟机都需要有相同的 MAC 地址。
答案1
您必须在主机上设置 DNAT,以将端口从外部 IP 地址转发到您设置的私有 VM 网络中的 VM。
您不能在第 3 层共享 IP。
答案2
这篇文章很久以前就发布了,但我已在 online.net 上多次使用过此配置,而且我知道其他提供商也使用相同的配置,因此我将更新解决方案。
对于此场景,我将有一台主机和两台客户机。我将展示 Debian 的网络配置,请根据您的操作系统进行调整。
**** 如果您的其他 IP 位于网关 IP 子网之外,请在设置桥接后查看文章底部 ****
当你获得 IP 地址后,你将生成或获得一个 MAC 地址来使用它们,例如
XXX.YYY.ZZZ.101 - 52:54:00:00:00:01
XXX.YYY.ZZZ.102 - 52:54:00:00:00:02
XXX.YYY.ZZZ.103 - 52:54:00:00:00:03
在您的主机上,在您的网络中设置一个网桥,并像这样分配您的主机 IP。
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address XXX.YYY.ZZZ.101
netmask 255.255.255.0
gateway XXX.YYY.ZZZ.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
现在,当您创建虚拟机时,请为其设置网络接口 vmbr0。在每个虚拟机上,为您的网络设置以下配置。
auto eth0
iface eth0 inet static
address XXX.YYY.ZZZ.102
netmask 255.255.255.0
gateway XXX.YYY.ZZZ.1
这应该会将您的附加 IP 传递到您的 VM!太棒了!
但是,您可能会遇到这样的问题:您被赋予了子网外网关的额外 IP,例如
网关IP:XXX.YYY.100.1
附加 IP1:XXX.YYY.200.1
如果您在虚拟机上发现这种情况,则需要手动添加到网关 IP 的路由,并在启动时将该 IP 分配给您的接口。
在 debian 中,您可以在 /etc/network/interfaces 中执行以下操作来实现此目的:
auto eth0
iface eth0 inet manual
pre-up ip l set dev eth0 up
pre-up ip a add XXX.YYY.200.1 dev eth0
pre-up ip r add XXX.YYY.100.1 dev eth0
pre-up ip r add default via XXX.YYY.100.1
post-down ip l set dev eth0 down
希望这篇文章简洁明了并能对某些人有所帮助。