1. 程式人生 > >移動用戶想要同時訪問Azure不同站點的連接方法

移動用戶想要同時訪問Azure不同站點的連接方法

ica 完整 rmp 執行 ipsec port 步驟 5.5 這樣的

最近有合作夥伴遇到一個需求,總結下是這樣的:用戶在國內和海外Azure上都部署了應用,用戶有一批扛著筆記本到處出差的人需要訪問這些資源,但是由於應用設計原因,需要能夠同時訪問國內和海外Azure上的應用數據。通常對於這樣的移動用戶訪問Azure的需求,我們會建議采用P2S VPN,實現單點到Azure上站點的VPN連接,就可以訪問了。但是這次的問題在於用戶希望可以同時訪問國內和海外的Azure。很自然的一個想法就是能不能讓用戶先用P2S VPN連接到一個站點,比如美國的Azure,然後通過Azure站點間的VPN連接起來,使得終端用戶可以通過一個站點作為跳板,訪問另一個站點的應用。

在這其中涉及兩段設置:1、站點到站點的IPSEC VPN,需要啟用BGP。2、用戶終端到某個Azure站點的P2S VPN。

具體配置如下:

首先,要Azure的VPN Gateway要開啟BGP,是需要通過命令行來實現的,步驟記錄如下:

首先建立2個VNET,一個記做 localvnet,一個記做remotevnet,創建gateway subnet,這些步驟可以在portal界面裏完成,然後設置VPN GW所需的參數。

設置localvnet

$RG1 = "lyqvpn"

$Location1 = "China North"

$VNetName1 = "localvnet"

$GWSubName1 = "GatewaySubnet"

$GWIPName1 = "lyqGWIP01"

$GWIPconfName1 = "gwipconf1"

$gwpip1 = New-AzureRmPublicIpAddress -Name $GWIPName1 -ResourceGroupName $RG1 -Location $Location1 -AllocationMethod Dynamic

$vnet1 = Get-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1

$subnet1 = Get-AzureRmVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1

$gwipconf1 = New-AzureRmVirtualNetworkGatewayIpConfig -Name $GWIPconfName1 -Subnet $subnet1 -PublicIpAddress $gwpip1

設置 remotevnet

$VNetName2 = "remotevnet"

$GWSubName2 = "GatewaySubnet"

$GWIPName2 = "lyqGWIP02"

$GWIPconfName2 = "gwipconf2"

$gwpip2 = New-AzureRmPublicIpAddress -Name $GWIPName2 -ResourceGroupName $RG1 -Location $Location1 -AllocationMethod Dynamic

$vnet2 = Get-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $RG1

$subnet2 = Get-AzureRmVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2

$gwipconf2 = New-AzureRmVirtualNetworkGatewayIpConfig -Name $GWIPconfName2 -Subnet $subnet2 -PublicIpAddress $gwpip2

以上步驟分別為localvnet和remotevnet的VPN網關創建了公網地址,並獲得了對應的subnet信息和VPN設置。

接下來創建開啟了BGP的VPN Gateway,註意不同vnet的ASN不能相同

$VNet1ASN = 65010

$VNet2ASN = 65020

$GWName1 = "localVNetGW"

$GWName2 = "remoteVNetGW"

New-AzureRmVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1 -Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn -VpnType RouteBased -GatewaySku HighPerformance -Asn $VNet1ASN

New-AzureRmVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG1 -Location $Location1 -IpConfigurations $gwipconf2 -GatewayType Vpn -VpnType RouteBased -GatewaySku HighPerformance -Asn $VNet2ASN

創建VPN Gateway需要很長時間,耐心等待所有工作完成。

通過以下命令可以查看創建的結果:

$vnet1gw = Get-AzureRmVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1

$vnet1gw.BgpSettingsText

$vnet2gw = Get-AzureRmVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG1

$vnet2gw.BgpSettingsText

看到的返回應當像下面這個格式:

{

"Asn": 65010,

"BgpPeeringAddress": "10.3.0.78",

"PeerWeight": 0

}

創建完VPN Gateway後,需要為每段建立本地網關,來配合VPN GW。

$LNGName1 = "remoteLN"

$LNGPrefix1 = "10.6.0.78/32"

$LNGIP1 = "139.xxx.xxx.xxx"

$LNGASN1 = 65020

$BGPPeerIP1 = "10.6.0.78"

New-AzureRmLocalNetworkGateway -Name $LNGName1 -ResourceGroupName $RG1 -Location $Location1 -GatewayIpAddress $LNGIP1 -AddressPrefix $LNGPrefix1 -Asn $LNGASN1 -BgpPeeringAddress $BGPPeerIP1

$LNGName2 = "localLN"

$LNGPrefix2 = "10.3.0.78/32"

$LNGIP2 = "139.xxx.xxx.xxx"

$LNGASN2 = 65010

$BGPPeerIP2 = "10.3.0.78"

New-AzureRmLocalNetworkGateway -Name $LNGName2 -ResourceGroupName $RG1 -Location $Location1 -GatewayIpAddress $LNGIP2 -AddressPrefix $LNGPrefix2 -Asn $LNGASN2 -BgpPeeringAddress $BGPPeerIP2

在這裏要註意本地網關設置是代表了VPN GW需要去連接的那一端。

等待兩個本地網關創建完成,用以下命令獲得localvnet兩個網關的設置

$vnet1gw = Get-AzureRmVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1

$lng1gw = Get-AzureRmLocalNetworkGateway -Name $LNGName1 -ResourceGroupName $RG1

在localvnet上創建VPN連接

$Connection1 = "local2remote"

New-AzureRmVirtualNetworkGatewayConnection -Name $Connection1 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet1gw -LocalNetworkGateway2 $lng1gw -Location $Location1 -ConnectionType IPsec -SharedKey ‘AzureA1b2C3‘ -EnableBGP $True

獲得remotevnet的兩個網關的設置

$vnet2gw = Get-AzureRmVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG1

$lng2gw = Get-AzureRmLocalNetworkGateway -Name $LNGName2 -ResourceGroupName $RG1

為remotevnet創建VPN連接

$Connection2 = "remote2local"

New-AzureRmVirtualNetworkGatewayConnection -Name $Connection2 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet2gw -LocalNetworkGateway2 $lng2gw -Location $Location1 -ConnectionType IPsec -SharedKey ‘AzureA1b2C3‘ -EnableBGP $True

到這裏,VPN Gateway的配置就完成了,等待一會,看到VPN連接狀態為已連接就好了。

接下來在localvnet上做一個P2S的VPN配置,這個可以在Portal裏實現:

找到以下位置,按要求輸入地址池地址(與VNET地址不能重復),以及VPN所需的證書。

證書可以是企業已有的證書,或自簽名的證書

技術分享

獲得自簽名證書的方法如下:

在筆記本上用以下命令創建一個名為P2SRootCert的根證書

$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `

-Subject "CN=P2SRootCert" -KeyExportPolicy Exportable `

-HashAlgorithm sha256 -KeyLength 2048 `

-CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign

把證書導出成cer文件,註意導出的文件裏含有回車符,而Azure界面上只接受一個完整的字符串輸入,所以要手工把回車符都去掉,才可以復制。

然後依據所生成的根證書,用以下命令生成客戶端證書:

New-SelfSignedCertificate -Type Custom -KeySpec Signature `

-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `

-HashAlgorithm sha256 -KeyLength 2048 `

-CertStoreLocation "Cert:\CurrentUser\My" `

-Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")

這些都完成後,就可以從Azure的界面上下載一個配置安裝文件,執行後自動為用戶的筆記本創建了一個VPN連接。

所以,到現在為止,我們有了從國內到海外的一個VPN,支持BGP。有了從客戶端到Azure的P2S VPN。開始測試,誒呀,為什麽不通呢?

檢查了下配置沒問題,2個VPN也都打通了。再看一下筆記本的配置,發現筆記本的路由只有到Localvnet的路由,沒有到remotevnet的路由,這是因為BGP並不會把路由推送到本地客戶端。所以需要在筆記本上加一條去remotevnet的路由,指向到P2S VPN的網關。

route add 10.6.0.0 mask 255.255.255.0 192.168.10.128

這下就都好了,用戶可以從筆記本上直接訪問到2個Azure站點上的應用數據。這個方案可以滿足用戶要求。

移動用戶想要同時訪問Azure不同站點的連接方法