Azureでサイト間接続(Site to Site VPN)を用いて、オンプレミスと接続する方法を説明します。よく話題にあがるExpress Routeは物理的な機器と直接接続する方法でデータセンター事業者やISP事業者との契約が必要です。他方、サイト間接続(Site to Site VPN)はIPsecによる接続ですのでインターネット回線のみで接続が可能です。
このページではstatic routeを用いた接続方法を紹介します。BGPを使用する場合は「Azure サイト間接続(Site to Site VPN) BGP編」を参照ください。
グローバルIPアドレスの可否が話題にあがりますが、グローバルIPアドレスが変動しない環境ならばサイト間接続(Site to Site VPN)は技術上は確立可能です。オンプレミス側に付与されるIPアドレスはプライベートIPアドレスでも差し支えございません。
プライベートIPアドレスを用いたSite to Site VPNを確立する方法は、Azureの仕様ではなくIPsecの一般的な知識に基づいた設定です。MicroSoftがサポートする構成かどうかは不明である事にご注意ください(特に「自己責任」ではなく「サポート重視」の企業風土ならば注意が必要です)。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
事前設定
擬似オンプレミス側(JapanWest)
サイト間接続(Site to Site VPN)はオンプレミスとの接続を実現するためのマネージドサービスです。ですが、人によってはオンプレミス側で機器を準備するのが難しいかもしれません。そこで、JapanEastをクラウド側と見做し、JapanWestをオンプレミス側と見做します。
可能ならば、グローバルIPアドレスが付与された「物理」のCiscoルータを用意ください。Azureでオンプレミスを擬似する場合は多少の複雑な設定が必要になります。もし、「物理」のCiscoルータが準備できるならば、不要なトラブルを避けるために「物理」を使用しましょう。以下は「物理」のCiscoルータを準備できない方向けの操作方法です。
オンプレミス側とみなしたJapanWestには、オンプレミス同等の設定が可能なCisco CSRの仮想マシンを構築します。
まずは、リソースグループを作成します。
az group create --name ResourceGroupWest --location japanwest
仮想ネットワークとサブネットを作成します。
az network vnet create \ --resource-group ResourceGroupWest \ --name Vnet20 \ --address-prefix 172.20.0.0/16 az network vnet subnet create \ --resource-group ResourceGroupWest \ --name Subnet10 \ --vnet-name Vnet20 \ --address-prefixes 172.20.10.0/24
cisco CSRの仮想マシンを作成します。
az vm create \ --resource-group ResourceGroupWest \ --name router210 \ --image cisco:cisco-csr-1000v:17_3_3-byol:latest \ --size Standard_D2_v5 \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --priority Spot \ --private-ip-address 172.20.10.210
擬似オンプレミス側の仮想マシン作成時に表示されるパブリックIPアドレスはメモに控えておきましょう。後続の操作で使用します。
$ az vm create \ --resource-group ResourceGroupWest \ --name router210 \ --image cisco:cisco-csr-1000v:17_3_3-byol:latest \ --size Standard_D2_v5 \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --priority Spot \ --private-ip-address 172.20.10.210 { "fqdns": "", "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/ResourceGroupWest/providers/Microsoft.Compute/virtualMachines/router210", "location": "japanwest", "macAddress": "00-0D-3A-40-2D-4D", "powerState": "VM running", "privateIpAddress": "172.20.10.210", "publicIpAddress": "20.210.140.4", "resourceGroup": "ResourceGroupWest", "zones": "" }
疎通確認用として、cisco CSRにLoopback Interfaceを2つ作成します。
interface Loopback100 ip address 172.20.100.100 255.255.255.0 ! interface Loopback200 ip address 172.20.200.200 255.255.255.0
クラウド側(JapanEast)
クラウド側のリソースグループを作成します。
az group create --name ResourceGroupEast --location japaneast
構成図
以下の構成でJapanWestとJapanEastが疎通可能な状態を目指します。
| | Lo200 | 172.20.200.200/24 Lo100 | 172.20.100.100/24 +------+------+ | router210 | | (cisco CSR) | +------+------+ G1 | .210 (グローバルIP:20.210.140.4) | | 172.20.10.0/24 | (Subnet10:JapanWest) | | | | +------+------+ | Internet | +------+------+ | | | | | | 20.210.93.46 +------+------------------+ | Virtual Network Gateway | +------+------------------+ | | | 172.16.0.0/27 | (GatewaySubnet:JapanEast) | | +------+-----------------+ | Azure Internal Network | +------+-----------------+ | | | 172.16.1.0/24 | (Subnet01:JapanEast) | eth0 | .10 +------+------+ | linux010 | | (UbuntuLTS) | +-------------+
Azure側のIPsec設定
サブネットの作成
後続の操作で作成する「仮想ネットワークゲートウェイ」が接続されるサブネットを作成します。これは任意の名前が指定可能ではなく、「GatewaySubnet」という名前にする必要があります。また、サブネット長は27以下とする必要があります。
az network vnet create \ --resource-group ResourceGroupEast \ --name Vnet16 \ --address-prefix 172.16.0.0/16 az network vnet subnet create \ --resource-group ResourceGroupEast \ --name GatewaySubnet \ --vnet-name Vnet16 \ --address-prefixes 172.16.0.0/27
パブリックIPアドレス
後続の操作で作成する「仮想ネットワークゲートウェイ」に付与されるパブリックIPアドレスを作成します。頻繁にIPアドレスが変動するのは不都合ですので、skuはStandardにしておきましょう。
az network public-ip create \ --resource-group ResourceGroupEast \ --name VpnGwPublicIp \ --sku Standard
付与されたパブリックIPアドレスをメモに控えます。このIPアドレスは後続操作で使用します。
$ az network public-ip show \ --resource-group ResourceGroupEast \ --name VpnGwPublicIp \ --query "ipAddress" "20.210.93.46"
仮想ネットワークゲートウェイ
仮想ネットワークゲートウェイを作成します。仮想ネットワークゲートウェイはクラウド側ルータのマネージドサービスに相当する機能です。
仮想ネットワークゲートウェイの作成には45分程の時間がかかりますので、no-waitオプションを付与しましょう。
az network vnet-gateway create \ --name VnetGw \ --public-ip-address VpnGwPublicIp \ --resource-group ResourceGroupEast \ --vnet Vnet16 \ --gateway-type Vpn \ --vpn-type RouteBased \ --sku VpnGw1 \ --no-wait
以下のコマンドで仮想ネットワークゲートウェイ作成の進捗を確認できます。以下のようにprovisioningStateが「Updating」と表示される場合は完了していません。「Succeeded」と表示されるまで待ちます。
$ az network vnet-gateway show \ --name VnetGw \ --resource-group ResourceGroupEast \ --query "provisioningState" \ --output tsv Updating
CLIでの確認に自信が持てない方は、ポータル(GUI)を併用しても良いかもしれません。すべてのサービスから「ネットワーキング」「仮想ネットワークゲートウェイ」「仮想ネットワークゲートウェイ名(VnetGw)」の順に押下します。すると、「概要」画面で「更新中」の文字が確認できます。この「更新中」が消えるまで待ちます。
ローカルゲートウェイ
「ローカルゲートウェイ」はオンプレミス側の情報を定義する設定群です。gateway-ip-addressにはオンプレミス拠点のグローバルIPアドレスを指定します。local-address-prefixesはオンプレミス拠点のサブネットを指定します。クラウドと疎通したいサブネットが複数存在する場合はスペース区切りで指定します。
az network local-gateway create \ --gateway-ip-address 20.210.140.4 \ --name Site01 \ --resource-group ResourceGroupEast \ --local-address-prefixes 172.20.100.0/24 172.20.200.0/24
接続
「接続」はオンプレミスとクラウド間のIPsecに関するパラメタを指定します。shared-keyには事前共有鍵を指定します。
az network vpn-connection create \ --name ConnectToSite01 \ --resource-group ResourceGroupEast \ --vnet-gateway1 VnetGw \ --shared-key P@ssw0rd1234 \ --local-gateway2 Site01
オンプレミス側のIPsec設定
状態確認 (1)
すべてのサービスから「ネットワーキング」「接続」「接続名(ConnectToSite01)」の順に画面遷移すると、「概要」画面にて、「状態」欄が「不明」と表示されます。もし、IPsecが確立されれば「接続済み」に変わります。
CLIでは以下のように確認します。connectionStatusがNotConnectedになっています。
$ az network vpn-connection show \ --resource-group ResourceGroupEast \ --name ConnectToSite01 { "authorizationKey": null, "connectionMode": "Default", "connectionProtocol": "IKEv2", "connectionStatus": "NotConnected", "connectionType": "IPsec", "dpdTimeoutSeconds": 0, "egressBytesTransferred": 0, <omitted>
サンプル設定のダウンロード
すべてのサービスから「ネットワーキング」「接続」「接続名(ConnectToSite01)」の順に画面遷移します。「構成のダウンロード」を押下すると、オンプレミス側のルータの種類を指定する画面が現れますので、入力完了後、「構成のダウンロード」を押下するとサンプル設定をダウンロードできます。
サンプル設定の微修正と流し込み
Cisco CSRにグローバルIPアドレスが付与されている構成ならば、そのまま流し込んで差し支えございません。もし、プライベートIPアドレスが設定されているならば、微修正が必要です。以下、修正が必要となる部分を示します。
修正が不要な部分は掲載を省略しています。
crypto ikev2 policyをグローバルIPアドレスからプライベートIPアドレスに変更します。
crypto ikev2 policy Azure-Ikev2-Policy proposal Azure-Ikev2-Proposal ! match address local 20.210.140.4 match address local 172.20.10.210
crypto ikev2 profileをグローバルIPアドレスからプライベートIPアドレスに変更します。
crypto ikev2 profile Azure-Ikev2-Profile ! match address local 20.210.140.4 match address local 172.20.10.210 match identity remote address 20.210.93.46 255.255.255.255 authentication remote pre-share authentication local pre-share keyring local ConnectToSite01-keyring lifetime 28800 dpd 10 5 on-demand
トンネルインターフェースの送信元をグローバルIPアドレスからプライベートIPアドレスに変更します。
interface Tunnel11 ip address 169.254.0.1 255.255.255.255 ip tcp adjust-mss 1350 ! tunnel source 20.210.140.4 tunnel source 172.20.10.210 tunnel mode ipsec ipv4 tunnel destination 20.210.93.46 tunnel protection ipsec profile Azure-IPsecProfile
設定の流し込み後、IPsecが確立された事を確認します。show crypto ikev2 saコマンドでStatusが「READY」と表示される事を確認します。
router210#show crypto ikev2 sa IPv4 Crypto IKEv2 SA Tunnel-id Local Remote fvrf/ivrf Status 1 172.20.10.210/4500 20.210.93.46/4500 none/none READY Encr: AES-CBC, keysize: 256, PRF: SHA1, Hash: SHA96, DH Grp:2, Auth sign: PSK, Auth verify: PSK Life/Active Time: 28800/115 sec IPv6 Crypto IKEv2 SA router210# router210# router210#show crypto ipsec sa interface: Tunnel11 Crypto map tag: Tunnel11-head-0, local addr 172.20.10.210 protected vrf: (none) local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) current_peer 20.210.93.46 port 4500 PERMIT, flags={origin_is_acl,} #pkts encaps: 2, #pkts encrypt: 2, #pkts digest: 2 #pkts decaps: 2, #pkts decrypt: 2, #pkts verify: 2 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 0, #recv errors 0
状態確認 (2)
すべてのサービスから「ネットワーキング」「接続」「接続名(ConnectToSite01)」の順に画面遷移します。、「概要」画面の「状態」欄が「接続済み」に変わった事を確認します。
CLIでは以下のように確認します。connectionStatusがConnectedになっています。
$ az network vpn-connection show \ --resource-group ResourceGroupEast \ --name ConnectToSite01 { "authorizationKey": null, "connectionMode": "Default", "connectionProtocol": "IKEv2", "connectionStatus": "Connected", "connectionType": "IPsec", "dpdTimeoutSeconds": 0, "egressBytesTransferred": 200, "egressNatRules": null, <omitted>
疎通確認
疎通確認用の仮想マシンの作成
疎通確認用の仮想マシンを作成します。まずは、仮想マシンが収容されるセグメントを作成します。
az network vnet subnet create \ --resource-group ResourceGroupEast \ --name Subnet01 \ --vnet-name Vnet16 \ --address-prefixes 172.16.1.0/24
疎通確認用の仮想マシンを作成します。
az vm create \ --resource-group ResourceGroupEast \ --name linux010 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --vnet-name Vnet16 \ --subnet Subnet01 \ --private-ip-address 172.16.1.10
仮想マシンに付与されたグローバルIPアドレスをメモに控えます。
$ az vm create \ --resource-group ResourceGroupEast \ --name linux010 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --vnet-name Vnet16 \ --subnet Subnet01 \ --private-ip-address 172.16.1.10 { "fqdns": "", "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/ResourceGroupEast/providers/Microsoft.Compute/virtualMachines/linux010", "location": "japaneast", "macAddress": "00-22-48-68-9B-64", "powerState": "VM running", "privateIpAddress": "172.16.1.10", "publicIpAddress": "20.222.241.34", "resourceGroup": "ResourceGroupEast", "zones": "" }
ルートテーブル
linux010の仮想NICの画面にて、「有効なルート」を確認します。JapanEast向けである172.16.100.0/24と172.16.200.0/24が仮想ネットワークゲートウェイに向いている事を確認します。
「ローカルゲートウェイ」のlocal-address-prefixesに指定した値は、すべてのsubnetに伝播する仕様になっています。もし、この画面で想定通りの「有効なルート」が見当たらない場合は「ローカルゲートウェイ」の設定を見直してください。
疎通確認
JapanEastのLinux機(linux010:172.16.1.10)からならば、以下のようなpingコマンドで動作確認をします。
azureuser@linux010:~$ ping 172.20.100.100 -c 3 PING 172.20.100.100 (172.20.100.100) 56(84) bytes of data. 64 bytes from 172.20.100.100: icmp_seq=1 ttl=255 time=11.1 ms 64 bytes from 172.20.100.100: icmp_seq=2 ttl=255 time=11.6 ms 64 bytes from 172.20.100.100: icmp_seq=3 ttl=255 time=11.2 ms --- 172.20.100.100 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 11.184/11.331/11.604/0.193 ms azureuser@linux010:~$
JapanWestのCisco機(router210:172.20.100.100)からならば、以下のようなpingコマンドで動作確認をします。送信元を指定しないと、Tunnel 11(169.254.0.1)が送信元になってしまい疎通不能になります。送信元インターフェースを明示指定しないとpingに成功しない事に注意ください。
router210#ping 172.16.1.10 source Loopback 100 repeat 100 Type escape sequence to abort. Sending 100, 100-byte ICMP Echos to 172.16.1.10, timeout is 2 seconds: Packet sent with a source address of 172.20.100.100 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Success rate is 100 percent (100/100), round-trip min/avg/max = 10/12/28 ms router210#