---
# System prepended metadata

title: Create site-to-site VPN connection with Hub-Spoke Network Topology in Azure
tags: [Hub-Spoke, S2S VPN, Azure Network, Landing Zone, '2023']

---

[toc]

本篇內容將透過Azure Portal來建立site-to-site VPN連線，並且搭配Hub-Spoke網路架構。
>[Azure Hub-spoke network topology 架構參考](https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli)

![](https://i.imgur.com/MpsjF35.png)
![](https://hackmd.io/_uploads/H1WUV70jh.png)


## 1/ 建立Hub Vnet
* 建立Hub虛擬網路，新建一個資源群組存放此次建立S2S VPN的相關資源。
![](https://hackmd.io/_uploads/r1ZWIXRi3.png)

```
假設Cloud Hub Vnet網段為：
10.20.0.0/24

Cloud Hub Subnet網段為：
10.20.0.192/26 - GatewaySubnet (For VPN Gateway)
```
* ==**虛擬網路IPv4位址空間**== ： 輸入**10.20.0.0/24**。
* ==**新增子網路**== ： 新增`GatewaySubnet` - **10.20.0.192/26**。

![](https://hackmd.io/_uploads/SyWG_QCo2.png)



## 2/ 建立VPN Gateway

* ==**命名**== VPN Gateway。
* ==**閘道類型**==：選擇VPN。
* ==**SKU**==：選擇VpnGw1。
    >  建立虛擬網路閘道時，根據工作負載、輸送量、功能和SLA的類型，選取符合需求的 SKU。[查看 Gateway SKUs](https://docs.microsoft.com/zh-tw/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsku)
* ==**虛擬網路**==：選擇剛才建立的Vnet (`NetworkLab-Hub-vnet`)。
* ==**子網路**== 會自動帶入剛才建立的`GatewaySubnet`
* 為VPN Gateway建立一個新的 ==**公用IP位址**==。
* 填完相對應資訊後點選建立。
![](https://hackmd.io/_uploads/HJ9tKQCo3.png)


:::warning
:warning: **注意 !**
* 建立VPN Gateway通常可能需要**40分鐘左右或者更久**，視選取的**Gateway SKU**而定。
* 等待的同時我們可以先去建立Local Network Gateway。
:::

## 3/ 建立Local Network Gateway
* 上方Search bar搜尋**區域網路閘道**或**Local Network Gateway**。
![](https://i.imgur.com/arYk1kg.png =80%x)
* 在建立Local Network Gateway的時候需要地端的一些資訊，例如：地端VPN設備的對外IP、地端要連線上雲端的IP網段。
:::warning
:warning: **注意 !** 
* 地端的網段不能和雲端的網段重疊。
* [建立VPN連線必要條件。](https://docs.microsoft.com/zh-tw/azure/vpn-gateway/tutorial-site-to-site-portal#prerequisites)
:::

```
假設地端VPN設備對外IP為：
20.123.124.125

地端IP網段為：
10.10.0.0/24
10.10.1.0/24
```
* ==**IP位址**==：填入地端VPN設備對外IP。
* ==**位址空間**==：填入地端要連上雲端的IP網段。
![](https://hackmd.io/_uploads/BJif67Co3.png)


## 4/ 設定地端VPN設備
* 設定地端 VPN 設備時，需要下列值：
    * ==**共用金鑰Pre-Shared Key**==：在建立S2S VPN Connection的時候也需要相同的共用金鑰。 
    * ==**Cloud VPN Gateway的Public IP**==。
    
    ![](https://hackmd.io/_uploads/H18HSNCsh.png)
    * >:memo: [**已經驗證的 VPN 裝置及裝置設定指南**](https://learn.microsoft.com/zh-tw/azure/vpn-gateway/vpn-gateway-about-vpn-devices#devicetable)

## 5/ 建立Connection
* 上方Search Bar搜尋**連接**。
![](https://i.imgur.com/o7S6VDr.png =70%x)

* 基本
    * ==**連接類型**== 選擇 ==**站對站(IPSec)**==。

![](https://hackmd.io/_uploads/Sk4iHNAj3.png)
* 設定
    * ==**虛擬網路閘道**== 選擇剛才建立的Virtual Network Gateway。
    * ==**區域網路閘道**== 選擇剛才建立的Local Network Gateway。
    * ==**共用金鑰(PSK)**== 輸入在地端VPN設備設定的Pre-shared key。
    * 其餘選項使用預設即可。

![](https://hackmd.io/_uploads/SyuTSNAjh.png)

* Connection建立完後，若地端VPN設備沒有同步設定完成，則Connection狀態會顯示 ==**未連接**==， ==**連入資料**== 和 ==**連出資料**== 都會是0B。

![](https://hackmd.io/_uploads/Bys_L4Co2.png)

* 地端VPN設備有同步設定成功的話，Connection狀態會顯示 ==**已連接**== ，且 ==**連入資料**== 和 ==**連出資料**== 過一段時間會開始有流量顯示。

![](https://i.imgur.com/X1aOzVX.png)

:::info
:memo: **測試連線**
* Connection設定成功後，可以建立一台VM去Ping地端的機器是否可以Ping通，來驗證我們建立的S2S VPN服務是否正常。
:::

## 6/ 建立S2S VPN所需創立的資源
* 可以在 ==**資源群組**== 中看到我們建立S2S VPN所需的資源有哪些。
![](https://i.imgur.com/pAmqMO9.png)
    - [x] **==VNet、Subnet==**
    - [x] **==VPN Gateway==**
    - [x] **==VPN Gateway Public IP==**
    - [x] **==Local Network Gateway==**
    - [x] **==Connection==**
:::info
:bulb: **提醒**
* 如果只是嘗試建立S2S VPN的話，測試完畢後，記得將資源群組刪除，才不會有額外的費用產生。
:::

## 7/ 建立Spoke Vnet
* 建立Spoke虛擬網路

![](https://hackmd.io/_uploads/rk3tgEAo2.png)
```
假設Cloud Spoke01 Vnet網段為：
10.20.1.0/24

Cloud Spoke01 Subnet網段為：
10.20.1.0/26 - app01-snet 
```
* ==**虛擬網路IPv4位址空間**== ： 輸入**10.20.1.0/24**。
* ==**新增子網路**== ： 新增`app01-snet` - **10.20.1.0/26**。

![](https://hackmd.io/_uploads/rkAAgVRsn.png)

## 8/ 建立對等互連 - Peering

1. 點選剛才建立的Hub Vnet (`NetworkLab-Hub-vnet`)
2. 點選對等互連 - Peering
![](https://hackmd.io/_uploads/ByvUwERsn.png)

3. 此虛擬網路
* ==**命名**== 對等互連Peering名稱
* **==虛擬網路閘道或路由伺服器==**：若要使Spoke01 Vnet也能夠使用Hub Vnet的Virtual Network Gateway的話(地端流量可以通到Spoke01 Vnet)，記得勾選 **==使用此虛擬網路的閘道或路由伺服器==**
    >  這裡的"使用此虛擬網路的閘道或路由伺服器"指的是Hub Vnet的Virtual Network Gateway

![](https://hackmd.io/_uploads/By3pvECjn.png)

4. 遠端虛擬網路
* ==**命名**== 對等互連Peering名稱
* **==虛擬網路閘道或路由伺服器==**：若要使Spoke01 Vnet也能夠使用Hub Vnet的Virtual Network Gateway的話(地端流量可以通到Spoke01 Vnet)，記得勾選 **==使用遠端虛擬網路的閘道或路由伺服器==**
    >  這裡的"使用遠端虛擬網路的閘道或路由伺服器"指的也是Hub Vnet的Virtual Network Gateway

![](https://hackmd.io/_uploads/Hkpbd40o3.png)

:::info
:memo: **測試連線**
* 新增對等互連Peering後，可以在Spoke01 Vnet建立一台VM去Ping地端的機器是否可以Ping通，來驗證我們剛才建立的Peering是否正確。
:::

## Reference
* [在Azure入口網站中建立站對站VPN連線](https://docs.microsoft.com/zh-tw/azure/vpn-gateway/tutorial-site-to-site-portal)
* [使用Azure入口網站建立和管理VPN閘道](https://docs.microsoft.com/zh-tw/azure/vpn-gateway/tutorial-create-gateway-portal)
* [Azure Hub-Spoke Network Topology](https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli)
* [虛擬網路對等互連](https://learn.microsoft.com/zh-tw/azure/virtual-network/virtual-network-peering-overview)

