在图中,我们有一个虚拟网络、两个子网和三个系统。
- 路由器接口上启用了 Azure“IP 转发”。
- 为“信任”和“不信任”子网创建路由表
- 在机器上创建静态路由(隐藏的路由是主机路由,以确保我不会切断自己)
我们可以看到,bob 成功 ping 了 alice。
尽管bob的默认路由是路由器,但azure路由表将bob的默认路由设置为路由器,并且alice不在同一个子网中,因此流量不会通过路由器!?
这给我带来了两个大问题
Azure 为何以及如何这样做?这似乎完全违背了 Layer3 逻辑。
我们应该如何在 Azure 中做到这一点?
我对此的下一个猜测是,这可能需要使用不同的虚拟网络来完成,但如果我使用虚拟网络,是否意味着 3 个虚拟网络? 1 个用于虚拟设备,1 个用于每个子网?
答案1
以下是我得出的结论(回答我自己的问题):
Azure 为何以及如何做到这一点?
为什么:
与物理网络不同,Azure 的优势在于可以记录环境中的所有系统和网络接口。
在物理网络中,“地址解析协议”(即 ARP)是一种基于广播的协议,用于发现广播域或“本地连接”L2 环境中的机器。这仅仅是因为没有中央记录才有必要。
Azure 无需广播即可运行。它效率更高,而且当您已经知道子网中的所有计算机时,它不是必需的。
如何在 L3 上路由数据包?:
对于路由问题,Azure 会观察离开 Alice 的所有数据包,并将它们发送给 Bob,而不考虑操作系统的默认路由。发往 10.0.2.5 的数据包是否被传输到 10.0.1.4 进行路由并不重要。该 L2 方向将使用 ARP,但这在这里不起作用。相反,vnet 完全控制 L3。在有效路由表中使用 Azure“vnet local”路由类型,无论数据包是否在同一子网中,都会直接传递给 Bob。
在 Azure 中,vnet 地址范围的“vnet local”是默认设置。需要在子网的 UDR 中覆盖此路由,以便将数据包传送到“路由器”
应该如何做呢?
虚拟机上的本地路由表几乎被忽略(您仍然需要注意数据包离开哪个接口,因为这会影响它出现的子网和应用的路由表)。
鉴于 L2 是单播,L3 允许子网外的目的地,并且 Azure 路由表应用于子网,因此可以实现完全不同的设计。
“应该”不清楚,但这就是我所做的。
注意路由器在两个子网之间路由,其中这些子网中没有接口。