将第二个公共 IP 路由到多个虚拟机

将第二个公共 IP 路由到多个虚拟机

我和朋友租用了一台专用服务器,并使用 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

希望这篇文章简洁明了并能对某些人有所帮助。

相关内容