Sunday, December 16, 2018

AWS VPC 與 Azure VNet 互通


既然都上了Cloud, 多少會想要不同家平台互通
這次就來試試目前大家最常用的 AWS, 與後來急起直追的 Azure 互通
有參考不少文章 會一併列在後面

在開始之前 先列出大概架構圖 下面是大概

基本上就是 AWS 端 弄一台 Windows 2012 server 當 router
當然 Linux 版會更好 不過這邊先用 Windows 2012 來玩
Azure 端則是直接 Local Network Gateway, Virtual Private Gateway 接 VPN Tunnel
因為步驟有點多 AWS, Azure UI又常在改版 乾脆就只付簡單的圖就好


起始架構

首先是最原始狀態 兩邊都還各自獨立的時候
Azure Vnet, Subnet, VM1, AWS VPC, AWS VPC, Subnet, VM2
各自已經是完成 這部分的實作就不贅述

Step 1: 在AWS 開一個Windows 2012 R2 當 Router

Windows 2012 R2版本, 記得掛一個 Public EIP, 晚點要給 Azure 對接用


Step 2: AWS 端 Routing Table 指向修改

Route Table 修改 加一筆 10.1.0.0/16 導向剛剛建立的 Windows Server


還有在剛剛建立的VM上面 把 Source/Dest check 關閉
這樣network package就可以往這邊送了




Step 3: Azure 端 建立 Virtual Private Gateway

建立Virtual Private Gateway, 記得掛對 Virtual network, 相關設定如下
這時候會拿到 Azure 配給你的 VPG Public IP (圖上為 104.211.51.17)
這動作會花不少時間 建議先放著不管 大概半小時會完成


Step 4: Azure 端 建立 Local Network Gateway

這邊在建立 Local Network Gateway的時候 會要你另外開一個gateway 專用network
這裡是指定10.1.0.0/24
另外 Local Network Gateway 的 IP address 為 AWS 端 剛剛拿來要當 Gateway 的 Windows server EIP (35.165.73.8)


Step 5: Azure 端 設定 VPN Tunnel


記得這個 Connection Local Network Gateway 跟 Virtual Private Gateway 都要掛到剛剛設定的
Share Key 也記得要設定記下來 待會AWS那一端會用到
這時候因為 AWS 端還沒設定 所以 Connection status 會是 "Connecting"


Step 6: AWS 端 Windows Router VPN Tunnel

這邊比較麻煩 有現成的 PowerShell 可以用
https://github.com/Azure/Azure-vpn-config-samples/blob/master/Microsoft/microsoft-rras-windows-server-2012-r2.ps1.xslt


前面第5~78行 直接copy 到 PowerShell IDE 下跑

後面加interface那一段 黃色標籤記得修改 SharedSecet 就是上一步的 Share Key 這邊先放這裡的版本
Add-VpnS2SInterface -Protocol IKEv2 -AuthenticationMethod PSKOnly -NumberOfTries 3 -ResponderAuthenticationMethod PSKOnly
 -Name toAzure -Destination 104.211.51.17 -IPv4Subnet @("10.1.0.0/16:100")
 -SharedSecret 12345

Set-VpnServerIPsecConfiguration -EncryptionType MaximumEncryption

Set-VpnS2Sinterface -Name toAzure -InitiateConfigPayload $false -Force

# Set S2S VPN connection to be persistent by editing the router.pbk file (required admin priveleges)
Set-PrivateProfileString $env:windir\System32\ras\router.pbk “toAzure"IdleDisconnectSeconds" "0"
Set-PrivateProfileString $env:windir\System32\ras\router.pbk "toAzure" "RedialOnLinkFailure" "1"

# Restart the RRAS service
Restart-Service RemoteAccess

# Dial-in to Azure gateway
Connect-VpnS2SInterface -Name toAzure

在這之後 大致就完成了
AWS 端 Windows Routing and Remote Access 應該會看到如下畫面

Azure 端 剛剛建立的物件 Connection Status 就會變成 Connected

基本上這時候兩邊VM就已經互通了


== 然後....就把 AWS 跟 Azure 上的所以有VM都砍掉了 免得被收太多$$ ==



參考文章如下
https://blogs.technet.microsoft.com/canitpro/2016/01/11/step-by-step-connect-your-aws-and-azure-environments-with-a-vpn-tunnel/

RRAS configure source
https://github.com/Azure/Azure-vpn-config-samples/tree/master/Microsoft