Azure サイト間接続(Site to Site VPN) static route編

スポンサーリンク

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が確立されれば「接続済み」に変わります。

IPsecの状態確認 01

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)」の順に画面遷移します。、「概要」画面の「状態」欄が「接続済み」に変わった事を確認します。

IPsecの状態確認 02

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#
タイトルとURLをコピーしました