如何为只有一个网卡的虚拟机设计网络

如何为只有一个网卡的虚拟机设计网络

在过去的一周左右,我一直在从震惊中恢复过来,我完全不知道我的ISP 的网络工作通过获取一个新盒子并尝试从头开始进行合理的设计。

我们的设计约束如下:

  • libvirt + kvm(因为我们很穷)
  • ubuntu(主机上是 12.04,但如果 openvswitch 可以让事情变得更容易,我们愿意尝试 14.04)
  • 一个外部网络接口(我们无法更改这一点)
  • 一个 ipv4、一个 /64 ipv6 和有限的附加(公共)ipv4 地址,以及一个……呃……有趣的设置

这些限制促使我们考虑以下几点:

  • 公共 IP 地址应谨慎使用,我们主要将其用于面向客户的缓存代理
  • 所有虚拟机在所有服务器上必须能够相互通信(代理到应用服务器。应用服务器到数据库。所有服务器到管理基础设施等...)
  • 既然我们已经有 /64 IPv6 地址,为什么不使用它们呢?!

然而,这导致了一些问题,因为 IPv6 支持还没有在所有地方都十分完善:

  • 在 pxe 启动后(从临时的私有 IPv4 dhcp 服务器),我们仍然需要在虚拟机配置期间访问几个 ipv4 资源
  • 目前(在 busybox 中),我们无法设置 4over6 隧道,因为工具不支持它
  • 但即使如此,我们可能仍然需要访问一些仅限 v4 的资源(apt 存储库、github 等...)
  • 4over6 隧道看起来充其量只是黑客行为。

但等等?你已经设置?!

目前,我们有一座桥,直接向 libvirt 公开公共 ipv4 地址。并且我们有一个带有 nat 的虚拟桥,用于安装那些隐藏的虚拟机并为我们的 IPv6 地址提供路由。

这种设置的问题在于它非常不稳定:现在我有一个盒子除了 ping 之外没有响应任何其他操作,但其虚拟机仍然可以访问(ipv4 和 v6),还有一个盒子完美互连,但其虚拟机无法通过 ipv6 出去。

也许是因为我发现hetzner 的文档难以理解,或者因为我根本不了解他们手中更深层次的设计问题,或者因为我不懂网络。

我正在寻找一种不太不稳定的设计。即使这意味着我必须(重新)学习网络。

相关内容