Azure通過Vnet Peering和使用者自定義路由(UDR)實現hub-spoken連線

衡子發表於2017-04-01

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
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:17:fa:01:27:80 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.4/24 brd 10.1.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::217:faff:fe01:2780/64 scope link
valid_lft forever preferred_lft forever
[root@hwvntp01 ~]# ping 10.2.0.4
PING 10.2.0.4 (10.2.0.4) 56(84) bytes of data.
64 bytes from 10.2.0.4: icmp_seq=1 ttl=128 time=1.86 ms
64 bytes from 10.2.0.4: icmp_seq=2 ttl=128 time=0.983 ms
64 bytes from 10.2.0.4: icmp_seq=3 ttl=128 time=1.08 ms
^C
--- 10.2.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.983/1.310/1.866/0.395 ms
[root@hwvntptest02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:17:fa:01:26:06 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.4/24 brd 10.3.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::217:faff:fe01:2606/64 scope link
valid_lft forever preferred_lft forever
[root@hwvntptest02 ~]# ping 10.2.0.4
PING 10.2.0.4 (10.2.0.4) 56(84) bytes of data.
64 bytes from 10.2.0.4: icmp_seq=1 ttl=128 time=1.08 ms
64 bytes from 10.2.0.4: icmp_seq=2 ttl=128 time=0.772 ms
64 bytes from 10.2.0.4: icmp_seq=3 ttl=128 time=1.23 ms
^C
--- 10.2.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% 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) 56(84) bytes of data.
^C
--- 10.3.1.4 ping statistics ---
2 packets transmitted, 0 received, 100% 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) 56(84) bytes of data.
64 bytes from 10.3.1.4: icmp_seq=1 ttl=63 time=3.66 ms
64 bytes from 10.3.1.4: icmp_seq=2 ttl=63 time=1.64 ms
64 bytes from 10.3.1.4: icmp_seq=3 ttl=63 time=1.62 ms
^C
--- 10.3.1.4 ping statistics ---
3 packets transmitted, 3 received, 0% 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架構。

相關文章