我有一台带有一个网络接口的物理服务器。已启用 IP 转发并正确配置了防火墙。
我的提供商为我分配了一个主 IP 地址和 4 个故障转移 IP 地址,它们组成一个不同的子网。问题是我不知道如何配置它们,以免浪费 ipv4 资源。
(此示例中的 IP 地址是假的,仅供参考和设置示例,但它们是一个精确的类比)
主服务器(主机):主 IP:100.0.98.116,网关 100.0.98.115,网络掩码 255.255.255.252。
故障转移 IP 地址:50.76.102.200 50.76.102.201 50.76.102.202 50.76.102.203
如何在使用桥接网络(直接分配给主机接口)的虚拟机中使用所有这些地址?目前,我必须将 50.76.102.201 添加到主服务器主接口作为辅助地址,网络掩码为 255.255.255.252。在虚拟机中,我使用 IP 地址 50.76.102.202,网络掩码为 255.255.255.252,网关为 50.76.102.201。但这样我就可以使用更少的 IPv4 地址。有什么方法可以全部使用它们并使用网关 100.0.98.115?
答案1
假设您的提供商为您提供以太网,您可以通过稍微调整配置来使用所有地址。如何做到这一点取决于您的虚拟机上的操作系统。为了便于理解,我假设使用 Linux。
回到基础,以太网是多点的,您通常可以通过使用 ARP 发现其 MAC(L2 地址)来直接访问所有子网邻居(L3 地址)。您的虚拟机是虚拟的,并且虚拟交换机远离实际以太网应该无关紧要,事实上,您可以直接从虚拟机 NIC 转到提供商 DG,而无需(逻辑上,即 L3)通过您的主机。
问题在于标准逻辑(即 ARP 邻居查找)仅适用于相同子网目的地,这就是为什么您的 DG(默认网关)应该位于您的子网中。这可以通过多种方式进行更改。
最容易配置(但绝不是一个好选择)的是使用代理 ARP。大多数路由器支持对非本地(即额外子网)查询的 ARP 应答。您可以通过配置指向以太网接口的默认路由来使用它。这不是很好,因为您要对与之通信的每个地址执行 ARP,但可以工作。
ip address add 50.76.102.200/24 dev eth0
ip route add default dev eth0
一个非常简单(且好用)的替代方案是从该子网中的服务提供商处获取 DG 地址,并将其用于您的虚拟机。例如 50.76.102.1。
ip address add 50.76.102.200/24 dev eth0
ip route add default via 50.76.102.1 dev eth0
但如果不是,您可以(至少在 Linux 中使用 iproute2)使用不在同一子网中的 DG:
ip address add 50.76.102.200/24 dev eth0
ip route add default via 100.0.98.115 dev eth0 onlink
我希望你明白我的意思。
答案2
我没能按照计划修复这个问题。我可以使用桥接网络为虚拟机使用的唯一方法是将主机上的 IP 地址 .201 提升为 eth0:0 别名,网络掩码为 255.255.255.252。然后为虚拟机分配 IP 地址 .202,网络掩码为 255.255.255.252,网关为 .201 — 这种方法很好用。但是,这种方式消耗了太多 IP 地址,只有 2 个主机可用。
我所做的是将所有 IP 地址 .200-.203 添加为别名 eth0:0 - eth0:3,每个别名的网络掩码为 255.255.255.255,以便它们都可以使用。我为虚拟机创建了一个虚拟 NIC 主机专用,该虚拟机在 192 范围内有一个私有局域网,我使用 SNAT / DNAT 将 192 范围后面的每个虚拟机绑定到公共 IP 地址。