[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)


## 1/ 建立Hub Vnet
* 建立Hub虛擬網路,新建一個資源群組存放此次建立S2S VPN的相關資源。

```
假設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**。

## 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位址**==。
* 填完相對應資訊後點選建立。

:::warning
:warning: **注意 !**
* 建立VPN Gateway通常可能需要**40分鐘左右或者更久**,視選取的**Gateway SKU**而定。
* 等待的同時我們可以先去建立Local Network Gateway。
:::
## 3/ 建立Local Network Gateway
* 上方Search bar搜尋**區域網路閘道**或**Local Network Gateway**。

* 在建立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網段。

## 4/ 設定地端VPN設備
* 設定地端 VPN 設備時,需要下列值:
* ==**共用金鑰Pre-Shared Key**==:在建立S2S VPN Connection的時候也需要相同的共用金鑰。
* ==**Cloud VPN Gateway的Public IP**==。

* >:memo: [**已經驗證的 VPN 裝置及裝置設定指南**](https://learn.microsoft.com/zh-tw/azure/vpn-gateway/vpn-gateway-about-vpn-devices#devicetable)
## 5/ 建立Connection
* 上方Search Bar搜尋**連接**。

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

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

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

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

:::info
:memo: **測試連線**
* Connection設定成功後,可以建立一台VM去Ping地端的機器是否可以Ping通,來驗證我們建立的S2S VPN服務是否正常。
:::
## 6/ 建立S2S VPN所需創立的資源
* 可以在 ==**資源群組**== 中看到我們建立S2S VPN所需的資源有哪些。

- [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虛擬網路

```
假設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**。

## 8/ 建立對等互連 - Peering
1. 點選剛才建立的Hub Vnet (`NetworkLab-Hub-vnet`)
2. 點選對等互連 - Peering

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

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

:::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)