Azure通过Vnet Peering和用户自定义路由(UDR)实现hub-spoken连接
Azure的Vnet Peering可以把Azure中不同的Vnet连接起来的技术。底层是通过对NVGRE的租户标签进行修改,实现了不同租户间的互通。这种技术非常类似传统网络中MPLS/VPN不同租户互通的技术。在MPLS/VPN中是对RT值进行控制,实现不同租户间的互通。
但Vnet Peering有一个限制:VNet 对等互连存在于两个 VNet 之间,多个对等互连之间没有任何派生的可传递关系。例如,如果 VNetA 与 VNetB 对等互连,VNetB 与 VNetC 对等互连,但 VNetA 不 与 VNetC 对等互连。(https://www.azure.cn/documentation/articles/virtual-network-peering-overview/)
比如,在我们之前讨论过的Vnet Peering实现多个Vnet公用Express Route和VPN Gateway的情况下:

Vnet1、Vnet2、Vnet3和Gateway Vnet都建立了Vnet Peering的关系,Vnet1可以和Gateway Vnet通讯,但不可以和Vnet2通讯。着就是上面所提到的Vnet Peering的限制。
这是一个典型的Hub-Spoken的网络结构,但Spoken节点间不通通讯。
同时Vnet Peering有数量上的限制:(https://www.azure.cn/documentation/articles/azure-subscription-service-limits/#networking-limits)

如果需要各个Vnet间都相互连接,需要在各个Vnet间都配置Vnet Peering关系,不但需要大量的工作(n*(n-1)个peering配置),而且有可能碰到Vnet Peering的上限。
本文将介绍,如上文场景中,Vnet1、Vnet2和Vnet3间不需要配置Vnet Peering,而采用用户自定义路由的方式,实现Hub-Spoken结构的Vnet互通。
一、创建3个Vnet
如下图所示,创建3个Vnet,IP地址互相不重叠:

二、在Vnet-BGP-2中创建VPN Gateway
配置如下图:

三、配置Vnet Peering
配置成如下图所示的结构:Vnet-BGP-1 <-> Vnet-BGP-2, Vnet-BGP-3 <-> Vnet-BGP2

具体配置如下:
Vnet-BGP-1的配置:

Vnet-BGP-2的配置:

同理配置Vnet-BGP-2和Vnet-BGP-3的Vnet Peering关系。
配置完成后,在Vnet-BGP-1中的VM1-1、VM3-1都可以ping通Vnet-BGP-2中的Gateway地址:
[root@hwvntp01 ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether ::fa::: brd ff:ff:ff:ff:ff:ff
inet 10.1.1.4/ brd 10.1.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:::faff:fe01:/ scope link
valid_lft forever preferred_lft forever
[root@hwvntp01 ~]# ping 10.2.0.4
PING 10.2.0.4 (10.2.0.4) () bytes of data.
bytes from 10.2.0.4: icmp_seq= ttl= time=1.86 ms
bytes from 10.2.0.4: icmp_seq= ttl= time=0.983 ms
bytes from 10.2.0.4: icmp_seq= ttl= time=1.08 ms
^C
--- 10.2.0.4 ping statistics ---
packets transmitted, received, % packet loss, time 2003ms
rtt min/avg/max/mdev = 0.983/1.310/1.866/0.395 ms
[root@hwvntptest02 ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether ::fa::: brd ff:ff:ff:ff:ff:ff
inet 10.3.1.4/ brd 10.3.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:::faff:fe01:/ scope link
valid_lft forever preferred_lft forever
[root@hwvntptest02 ~]# ping 10.2.0.4
PING 10.2.0.4 (10.2.0.4) () bytes of data.
bytes from 10.2.0.4: icmp_seq= ttl= time=1.08 ms
bytes from 10.2.0.4: icmp_seq= ttl= time=0.772 ms
bytes from 10.2.0.4: icmp_seq= ttl= time=1.23 ms
^C
--- 10.2.0.4 ping statistics ---
packets transmitted, received, % packet loss, time 2003ms
rtt min/avg/max/mdev = 0.772/1.032/1.238/0.194 ms
但此时VM1-1和VM3-1不通:
[root@hwvntp01 ~]# ping 10.3.1.4
PING 10.3.1.4 (10.3.1.4) () bytes of data.
^C
--- 10.3.1.4 ping statistics ---
packets transmitted, received, % packet loss, time 1000ms
四、配置UDR
1. 在Vnet-BGP-1中配置UDR
由于在Vnet Peering配置中,Vnet-BGP-1可以使用远端的Gateway,所以远端的Gateway就相当于本地的Gateway使用。
在Vnet-BGP-1的vlan1中,关联如下的Route-Table:

这个路由表中,10.3.0.0/16是Vnet-BGP-3的网段,下一跳是VPN Gateway,这个VPN Gateway是在Vnet-BGP-2网络中的。虽然Vnet-BGP-1和Vnet-BGP-3是不通的,但这个VPN Gateway和Vnet-BGP-1已经Vnet-BGP-3都是通的。通过把Vnet-BGP-1到Vnet-BGP-3的流量导引到Vnet-BGP-2中的VPN Gateway上,两边的流量就通起来了。
2. 在Vnet-BGP-3的vlan3中配置UDR:

此时在进行VM1-1和VM3-1间的ping检测,状态是通的:
[root@hwvntp01 ~]# ping 10.3.1.4
PING 10.3.1.4 (10.3.1.4) () bytes of data.
bytes from 10.3.1.4: icmp_seq= ttl= time=3.66 ms
bytes from 10.3.1.4: icmp_seq= ttl= time=1.64 ms
bytes from 10.3.1.4: icmp_seq= ttl= time=1.62 ms
^C
--- 10.3.1.4 ping statistics ---
packets transmitted, received, % packet loss, time 2003ms
rtt min/avg/max/mdev = 1.626/2.311/3.665/0.958 ms
五、总结:
Azure上Vnet Peering的关系不能传递。通过UDR的方式,通过中间的VPN Gateway可以实现Hub-Spoken的网络结构。当然VPN Gateway也可以采用Virtual Appliance设备,但需要考虑NVA的HA架构。

Azure通过Vnet Peering和用户自定义路由(UDR)实现hub-spoken连接的更多相关文章
- Azure 用户自定义路由 (User Defined Route)
在公有云环境中,用户创建了一个Vnet,添加了若干个网段后,这几个网段是全联通的状态. 如果希望在Vnet中添加一些功能性的设备,比如防火墙.IPS.负载均衡设备等,就需要进行用户自定义路由的配置. ...
- Windows Azure Virtual Network (11) 虚拟网络之间点对点连接VNet Peering
<Windows Azure Platform 系列文章目录> 在有些时候,我们需要通过VNet Peering,把两个虚拟网络通过内网互通互联.比如: 1.在订阅A里的Virtual N ...
- Windows Azure Virtual Network (13) 跨数据中心之间的虚拟网络点对点连接VNet Peering
<Windows Azure Platform 系列文章目录> 今天是大年初二,首先祝大家新年快乐,万事如意. 在笔者之前的文章中:Windows Azure Virtual Networ ...
- Windows Azure Virtual Network (12) 虚拟网络之间点对点连接VNet Peering
<Windows Azure Platform 系列文章目录> 在有些时候,我们需要通过VNet Peering,把两个虚拟网络通过内网互通互联.比如: 1.在订阅A里的Virtual N ...
- Azure Application Gateway (4) 设置URL路由 - PowerShell
<Windows Azure Platform 系列文章目录> 本文将介绍如果使用Azure PowerShell,创建Azure Application Gateway URL Rout ...
- For Microsoft Azure Network VNET to VNET Connection
将一个 Azure 虚拟网络 (VNet) 连接到另一个 Azure 虚拟网络非常类似于将虚拟网络连接到本地站点位置.这两种连接类型都使用虚拟网络网关通过 IPsec/IKE 提供安全隧道.连接的 V ...
- Azure Application Gateway (3) 设置URL路由
<Windows Azure Platform 系列文章目录> 在之前的文章中,笔者介绍了Azure Web App可以设置URL路由.如下图: 在这里笔者简单介绍一下,首先我们还是创建以 ...
- 设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接
标题:设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接 里面有使用C#使用SqlServer的例子.
- Bat:IP切换,内外网切换,路由设置内外网同时连接
1.IP切换: @echo off ::双冒号表示注释,注释只能单独一行写,@表示不让执行的命令又显示在屏幕上 cls ::清屏 color c ::设置显示字体颜色 set IP=10.10.17. ...
随机推荐
- 对matrix,dataframe的操作函数
1.每行(列)的平均值:rowMeans() ; colMeans() 输入:数值型矩阵:数值型数据框 输出:向量 2.每行(列)的总和:rowSums() ;colSums() 输入:数值型矩阵,数 ...
- Eclipse开发快捷键精选
1.alt+?或alt+/:自动补全代码或者提示代码2.ctrl+o:快速outline视图3.ctrl+shift+r:打开资源列表4.ctrl+shift+f:格式化代码5.ctrl+e:快速转换 ...
- RealThinClient SDK 学习笔记(1)
从客户端调用远程函数的两种方法 1: RtcClientModule1.Prepare('select'); // call the "select" function on th ...
- linux基础(8)-文件处理(awk 、sed、grep)
grep基本用法 格式:grep [选项] [模式] [文件] 选项: -c:只显示有多少行匹配 ,而不具体显示匹配的行 -n:在每一行前面打印该行在文件中的行数 -i:在字符串比较的时候忽略大小 ...
- MapReduce-多个Mapper
MapReduce的多输入.多mapper 虽然一个MapReduce作业的输入可能包含多个输入文件(由文件glob.过滤器和路径组成),但所有文件都由同一个InputFormat和同一个Mapper ...
- ASPX一句话爆破工具
#include "stdafx.h" #include <stdio.h> #include <Windows.h> #include <stdli ...
- 爬虫之MongoDB的图片
聚合:
- JQuery小知识点
//get() : 就是把JQ转成原生JS,可以让通过jquery获得元素使用JS的innerHTML方法. $(function(){ //document.getElementById('div1 ...
- Pycharm如何打断点
一. python代码的调试方式 1. 使用print语句打印出来 2. 在编辑工具中,加断点跟踪(打断点) 3. 使用日志模块,输出到日志中 下面我们来看一下如何打断点 二. 环境 python 3 ...
- 如何理解python中的if __name__=='main'的作用
一. 一个浅显易懂的比喻 我们在学习python编程时,不可避免的会遇到if __name__=='main'这样的语句,它到底有什么作用呢? <如何简单地理解Python中的if __name ...