我正在设计一个包含多个虚拟网络的 Azure 环境,并且要求所有网络连接;任何网络中的 VM 都应该能够与任何其他网络中的另一个 VM 通信。
我可以使用全网状拓扑连接这些网络,但随着网络数量的增加,这很快就会失控,我真的不想设置和管理n(n - 1)/2VPN 连接。
我宁愿使用中心辐射型拓扑连接它们,如果达到 Azure 中每个虚拟网络 10 个连接的限制,也许可以使用多个中心。但是,我遇到了一个问题:似乎没有办法在 Azure 中处理路由。
为了简单起见,假设我有三个虚拟网络:
- 网络 A - 10.10.1.0/24
- 网络 B - 10.10.2.0/24
- 网络 C - 10.10.3.0/24
我想将网络 A 连接到网络 B,将网络 B 连接到网络 C;我不希望网络 A 和 C 之间直接连接:我希望网络 A 通过网络 B 与网络 C 通信。
如果我能控制网关,这将完全不是问题;几个静态路由就可以快速有效地解决问题。
但是,在 Azure 中,我找不到为虚拟网络定义附加路由的方法,因此我无法告诉网络 A 的网关“将发往网络 C 的流量发送到网络 B”(反之亦然)。
如何在 Azure 中实现这一点?
答案1
好的,这可以做到,但绝对不像它可以(和应该)那么容易。
基本上,诀窍是使用 Azure 的“本地网络”来根据需要配置 Azure 网关,即使我们不能直接接触它们的配置。
为了在两个 Azure 虚拟网络之间建立连接,您需要定义两个匹配的“本地网络”,然后让每个网络连接到与另一个网络对应的“本地网络”;这已经是一个不太直接的过程,但至少有一个一些 文档对此。对于给定的虚拟网络,拥有多个连接甚至更加复杂,因为您无法从管理门户(或 PowerShell)处理该问题,而是必须手动编辑网络配置文件;但是,甚至这也可以做到。
但是路由怎么办?在本问题描述的场景中,假设网络 B 正确连接到网络 A 和网络 C,我们如何在这两个网络之间路由流量?
我们可以通过使用本地网络定义来做到这一点;基本上,我们必须告诉网络 A 的网关,它与网络 B 的连接不仅可以到达网络 B 的 IP 子网,还可以到达网络 C 的 IP 子网;当然,我们也会将相反的情况告知网络 C 的网关。
我们已经定义了四个本地网络:
- 本地网络 A(从虚拟网络 B 的角度来看):10.10.1.0/24
- 本地网络 C(从虚拟网络 B 的角度来看):10.10.3.0/24
- 本地网络 B(从虚拟网络 A 的角度来看):10.10.2.0/24
- 本地网络 B(从虚拟网络 C 的角度来看):10.10.2.0/24
我们将对其进行如下修改:
- 本地网络 A(从虚拟网络 B 的角度来看):10.10.1.0/24
- 本地网络 C(从虚拟网络 B 的角度来看):10.10.3.0/24
- 本地网络 B(从虚拟网络 A 的角度来看):10.10.2.0/24和10.10.3.0/24
- 本地网络 B(从虚拟网络 C 的角度来看):10.10.2.0/24和10.10.1.0/24
这样,当网络 A 连接到网络 B 时,它将使用此连接来路由发往网络 C 的数据包。当网络 B 的网关接收到这些数据包时,它就已经知道如何处理它们,并且它将通过其与网络 C 的连接将它们路由;反之亦然。
还有一个额外的好处,它适用于站点到站点的连接外部Azure 也是如此。如果您想将 VPN 连接到公司总部,并将其连接到网络 B(从而创建 Y 形拓扑),您可以告诉网络 A 和网络 B,它们可以通过与网络 B 的连接以完全相同的方式到达您的公司总部。
答案2
如果您不想每次连接两个网络时都费心使用 VPN,Azure 引入了 vNet Peering:
https://docs.microsoft.com/en-us/azure/virtual-network/create-peering-different-deployment-models
https://azure.microsoft.com/en-us/resources/videos/virtual-network-vnet-peering/
它可能值得一看,因为它摆脱了难以管理的困境。
如果您想了解有关如何实现它的更多信息,我为此目的在我的 blob 上创建了一个线程,以及如何在 Azure 上使用 PFSENSE。(PFSENSE 是免费的,如果您想要一个免费的路由器,我会为其打包一个 VHD)