有关 Azure 虚拟网络上转发流量的问题
Question concerning forward traffic on Azure Virtual Networks
我有一个路由问题,我正在 Azure 云平台中努力解决,涉及需要通过另一个 vnet 和两个 VPN 隧道从一个 vnet 路由到另一个 vnet 的流量。
以下是设置说明:
我有两个 Azure 虚拟网络(VNET1 和 VNET2),每个网络都有自己的基于路由的 Azure VPN 网关和一个通过 IPsec VPN 隧道连接到第一个 Azure 虚拟网络 VNTE1 的第三方虚拟网络 (VNET3)。以下是所有 3 个虚拟网络的地址空间。
- VNET1 10.20.0.0/16(Azure vnet)
- VNET2 10.30.0.0/16(Azure vnet)
- VNET3 10.0.0.0/12(第 3 方 vnet)
这是我能做的:
- VNET1 通过 IPsec VPN 隧道与 VNET3 连接。因此,我能够从 VNET1 10.20.10.5 中的虚拟机 ping 到 VNET3 10.0.0.1 中的虚拟机,他们可以 ping 回我。
- VNET1 通过 IPsec VPN 隧道与 VNET2 连接。因此,我能够从 VNET1 10.20.10.5 中的虚拟机 ping VNET2 10.30.10.5
中的虚拟机
这是我不能做的:
- 我无法从 VNET2 10.30.10.5 中的 VM ping VNET3 10.0.0.1 中的 VM。
这是我尝试做的解决问题的方法,但到目前为止没有成功:
- 我的假设是网络 VNET2 不知道如何将流量路由到网络 VNET3。因此,我创建了一个 Azure Route table 并将路由 table 分配给子网 10.30.10.0/24 并且我创建了所有到网络 10.0.0.0/12 的流量都应该被路由的规则到VNTE2的VPN网关。我的期望是,一旦流量进入 GW,它将到达知道如何将其路由到 VNET3 的 VNET1。这没有用。
- 虽然我认为不需要,因为 VNET1 已经知道如何将流量路由到 VNET3,但我还为 10.0.0.0/12 创建了一个类似于上面的路由 table。这也没有帮助。
我是不是在某处遗漏了一条路线,如果是,那是哪条规则,在哪里?或者我什至需要有一个虚拟机作为路由器吗? (我希望不是)
我认为您的问题是 Azure 虚拟网关的限制:
The on-premises networks connecting through policy-based VPN devices with this mechanism can only connect to the Azure virtual network; they cannot transit to other on-premises networks or virtual networks via the same Azure VPN gateway.
https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-connect-multiple-policybased-rm-ps
因此,即使您使用相同的 VPN 网关连接 VNET 3 和 VNET 2,设计上 VNET 3 和 VNET 2 也无法通信。
要解决此问题,我建议使用对等互连。您的配置类似于经典的 Hub-Spoke 拓扑。您的 VNET1 是 Hub,VNET2 是 Spoke,VNET3 是 "on-prem".
无需更改 VNET1 和 VNET3 之间的配置。您需要在 VNET1 和 VNET2 之间建立对等互连并向后应用以下配置:
- Configure the peering connection in the hub to allow gateway transit.
- Configure the peering connection in each spoke to use remote gateways.
- Configure all peering connections to allow forwarded traffic.
在这种情况下,VNET3 将能够与 HUB (VNET1) 和所有分支(VNET2 和连接到 VNET1 的任何其他节点)进行通信。当隧道启动时,VNET2 可以与 HUB (VNET1) 和本地 (VNET3) 通信。
警告:如果 HUB 中没有转发网关,分支将无法相互通信,即如果添加 VNET4 并与 VNET1 建立对等互连,则 VNET4 将无法ping VNET2 中的虚拟机。但是他们可以在没有任何额外设备的情况下与 HUB 和本地通信。
我有一个路由问题,我正在 Azure 云平台中努力解决,涉及需要通过另一个 vnet 和两个 VPN 隧道从一个 vnet 路由到另一个 vnet 的流量。
以下是设置说明: 我有两个 Azure 虚拟网络(VNET1 和 VNET2),每个网络都有自己的基于路由的 Azure VPN 网关和一个通过 IPsec VPN 隧道连接到第一个 Azure 虚拟网络 VNTE1 的第三方虚拟网络 (VNET3)。以下是所有 3 个虚拟网络的地址空间。
- VNET1 10.20.0.0/16(Azure vnet)
- VNET2 10.30.0.0/16(Azure vnet)
- VNET3 10.0.0.0/12(第 3 方 vnet)
这是我能做的:
- VNET1 通过 IPsec VPN 隧道与 VNET3 连接。因此,我能够从 VNET1 10.20.10.5 中的虚拟机 ping 到 VNET3 10.0.0.1 中的虚拟机,他们可以 ping 回我。
- VNET1 通过 IPsec VPN 隧道与 VNET2 连接。因此,我能够从 VNET1 10.20.10.5 中的虚拟机 ping VNET2 10.30.10.5 中的虚拟机
这是我不能做的:
- 我无法从 VNET2 10.30.10.5 中的 VM ping VNET3 10.0.0.1 中的 VM。
这是我尝试做的解决问题的方法,但到目前为止没有成功:
- 我的假设是网络 VNET2 不知道如何将流量路由到网络 VNET3。因此,我创建了一个 Azure Route table 并将路由 table 分配给子网 10.30.10.0/24 并且我创建了所有到网络 10.0.0.0/12 的流量都应该被路由的规则到VNTE2的VPN网关。我的期望是,一旦流量进入 GW,它将到达知道如何将其路由到 VNET3 的 VNET1。这没有用。
- 虽然我认为不需要,因为 VNET1 已经知道如何将流量路由到 VNET3,但我还为 10.0.0.0/12 创建了一个类似于上面的路由 table。这也没有帮助。
我是不是在某处遗漏了一条路线,如果是,那是哪条规则,在哪里?或者我什至需要有一个虚拟机作为路由器吗? (我希望不是)
我认为您的问题是 Azure 虚拟网关的限制:
The on-premises networks connecting through policy-based VPN devices with this mechanism can only connect to the Azure virtual network; they cannot transit to other on-premises networks or virtual networks via the same Azure VPN gateway.
https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-connect-multiple-policybased-rm-ps
因此,即使您使用相同的 VPN 网关连接 VNET 3 和 VNET 2,设计上 VNET 3 和 VNET 2 也无法通信。
要解决此问题,我建议使用对等互连。您的配置类似于经典的 Hub-Spoke 拓扑。您的 VNET1 是 Hub,VNET2 是 Spoke,VNET3 是 "on-prem".
无需更改 VNET1 和 VNET3 之间的配置。您需要在 VNET1 和 VNET2 之间建立对等互连并向后应用以下配置:
- Configure the peering connection in the hub to allow gateway transit.
- Configure the peering connection in each spoke to use remote gateways.
- Configure all peering connections to allow forwarded traffic.
在这种情况下,VNET3 将能够与 HUB (VNET1) 和所有分支(VNET2 和连接到 VNET1 的任何其他节点)进行通信。当隧道启动时,VNET2 可以与 HUB (VNET1) 和本地 (VNET3) 通信。
警告:如果 HUB 中没有转发网关,分支将无法相互通信,即如果添加 VNET4 并与 VNET1 建立对等互连,则 VNET4 将无法ping VNET2 中的虚拟机。但是他们可以在没有任何额外设备的情况下与 HUB 和本地通信。