Cisco 891FJ を使って Azure とサイト間VPN 接続してみた

16 min read読了の目安(約14400字

はじめに

Microsot のクラウドサービスである Azure は、IaaS を含めてすべてのサービスをインターネット経由でアクセスすることができますが、セキュリティや社内サーバーとの連携などの理由から、オンプレミスのプライベートなネットワークと接続させたいという場合があります。Azureでは、オンプレミスのネットワークと Azure の仮想ネットワークを接続させる方法として、下記の3種類の接続方式が用意されています。

  • P2S (Point-toーSite)
  • S2S (Site-to-Site)
  • ExpressRoute (閉域網接続)

それぞれの接続方式の特徴については、下記サイトなどに譲りますが、今回は S2S と呼ばれるサイト間VPN を利用して、オンプレミスのプライベートネットワークを Azure IaaS 環境へ拡張する手順を紹介します。

参考:Azureとオンプレミス拠点の接続方法解説!ExpressRouteの紹介

構成図

今回は多くのブランチオフィスに導入されている、Cisco 891FJを使用して、以下のような構成で進めていきます。

なお、ルータは、インターネット接続の設定がすでに完了してグローバル IP が割り当てられており、Azure側は、仮想ネットワーク(Vnet01)と仮想マシン(TestSV01)の作成が完了しているものとします。

設定の流れ

今回は以下の順番で設定を実施します。

  1. ゲートウェイサブネットの作成
  2. 仮想ネットワーク ゲートウェイの作成
  3. ローカルネットワーク ゲートウェイの作成
  4. 仮想ネットワーク ゲートウェイとローカルネットワーク ゲートウェイの接続
  5. ルータ(Cisco 891FJ)の設定
  6. 接続確認

設定内容

1. ゲートウェイサブネットの作成

仮想ネットワーク ゲートウェイを配置するための GatewaySubnet を作成します。
仮想ネットワーク ゲートウェイは、通常のサブネットに配置することができないため、専用の GatewaySubnet に配置する必要があります。
GatewaySubnet のアドレス範囲は、VPN のみの利用の場合は、 /29でも可能ですが、ExpressRoute と併用する場合は /27 のアドレス範囲が必要になります。GatewaySubnet のアドレス範囲は作成後に変更することができないため、あらかじめ /27 で作成することが推奨されています。

2. 仮想ネットワーク ゲートウェイの作成

仮想ネットワーク ゲートウェイを作成します。この仮想ネットワーク ゲートウェイが Azure 側の VPN ルータ(ソフトウェアルータ)になります。

  • VPN の種類

    • ルートベース(動的):IKEv1、IKEv2をサポート、SKUにより最大10拠点~30拠点の接続が可能
    • ポリシーベース(静的):IKEv1のみサポート、1拠点間の接続のみ可能

    ポリシーベースは、1拠点間のみの接続となるため、基本的にはルートベースを使用することが多いと思いますが、オンプレの VPN デバイスがルートベースに対応していない場合はポリシーベースを利用する必要があります。

検証済みの VPN デバイスとデバイス構成ガイド

  • SKU:SKUによってスループットや、接続可能なトンネル数、BGP や冗長化の有無などの違いがありますが、今回は Basic を選択しています。

ゲートウェイの SKU

3. ローカル ネットワークゲートウェイの作成

ローカルネットワーク ゲートウェイには、オンプレミス側のネットワーク情報を入れていきます。ここで登録したオンプレミスの情報がオンプレミスへのルーティング情報として仮想ネットワーク ゲートウェイに登録されます。

  • IP アドレス:オンプレミスのルータに設定されているグローバル IP を指定します

  • アドレス空間:Azure の仮想ネットワークと通信させたいオンプレミスのネットワークを指定します。ここで指定したネットワークが仮想マシンのルートテーブルに宛先として追加されます。

4. 仮想ネットワーク ゲートウェイとローカルネットワーク ゲートウェイの接続

仮想ネットワーク ゲートウェイとローカルネットワーク ゲートウェイの作成が完了したら、それらを接続する必要があります。この接続も一つのリソースとして作成されます。
これで Azure 側の設定は完了です。

  • 共有キー:共有キー任意の文字列で構いませんが、ルータと一致させる必要があります。

5. ルータ(Cisco 891FJ)の設定

オンプレミスのルータの設定は、機種によって設定内容が異なりますので、それぞれの機器に合わせて設定する必要がありますが、主要な海外メーカーの製品は、Azure ポータルからサンプルコンフィグをダウンロードすることができます。国内メーカーの場合は利用できませんが、各メーカーの HP にサンプル設定が公開されていることが多いので参考にしてみてください。

今回はCisco のルータを使用しているので Cisco のサンプルコンフィグを元に投入するコンフィグを作成してみます。
「接続」のリソースから、「構成のダウンロード」をクリックして、ベンダー、デバイス ファミリー、ファームウェアのバージョンを選択してサンプルコンフィグをダウンロードします。

サンプルを元に設定する場合は、オンプレの VPN デバイスの設定に応じて必要な箇所を書き換えます。今回はサンプルファイルを参考に必要最低限の設定を追加し、以下のような内容で設定しています。

<IKE SA 設定>
crypto ikev2 proposal VPNconnection-proposal 
 encryption aes-cbc-256
 integrity sha1
 group 2

crypto ikev2 policy VPNconnection-policy 
 match address local <ルータのグローバル IP>
 proposal VPNconnection-proposal
 
crypto ikev2 keyring VPNconnection-keyring
 peer <仮想ネットワーク ゲートウェイのパブリック IP>
  address <仮想ネットワーク ゲートウェイのパブリック IP>
  pre-shared-key <共有キー>

crypto ikev2 profile VPNconnection-profile
 match address local <ルータのグローバル IP>
 match identity remote address <仮想ネットワーク ゲートウェイのパブリック IP> 255.255.255.255 
 authentication remote pre-share
 authentication local pre-share
 keyring local VPNconnection-keyring
 lifetime 3600
 dpd 10 5 on-demand

<IPsec 設定>
crypto ipsec transform-set VPNconnection-TransformSet esp-gcm 256 
 mode tunnel
!
crypto ipsec profile VPNconnection-IPsecProfile
 set transform-set VPNconnection-TransformSet 
 set ikev2-profile VPNconnection-profile
!

<トンネルインターフェース設定>
interface Tunnel1
 ip unnumbered Dialer1
 ip tcp adjust-mss 1350
 tunnel source VPN <ルータのグローバル IP>
 tunnel mode ipsec ipv4
 tunnel destination <仮想ネットワーク ゲートウェイのパブリック IP>
 tunnel protection ipsec profile VPNconnection-IPsecProfile
 
 <ルーティング設定>
 ip route 10.10.0.0 255.255.0.0 Tunnel1

6. 接続確認

接続できているか Azure 側とルータ側で確認してみます。
ルータ側は以下コマンドで確認します。

  • IKE SA の状態を確認
    show crypto ikev2 sa
GW-RT01#show crypto ikev2 sa
 IPv4 Crypto IKEv2  SA 

Tunnel-id Local                 Remote                fvrf/ivrf            Status 
4         <ルータのグローバル IP>/500      <仮想ネットワーク ゲートウェイのパブリック IP> /500      none/none            READY  
      Encr: AES-CBC, keysize: 256, PRF: SHA1, Hash: SHA96, DH Grp:2, Auth sign: PSK, Auth verify: PSK
      Life/Active Time: 3600/847 sec

 IPv6 Crypto IKEv2  SA 

StatusReady となっていることを確認します。

  • IPSec SA の状態を確認
    show crypto ipsec sa
GW-RT01#show crypto ipsec sa

interface: Tunnel1
    Crypto map tag: Tunnel1-head-0, local addr 183.180.0.99

   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 <仮想ネットワーク ゲートウェイのパブリック IP> port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
    #pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4
    #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

     local crypto endpt.: <ルータのグローバル IP>, remote crypto endpt.: <仮想ネットワーク ゲートウェイのパブリック IP>
     plaintext mtu 1398, path mtu 1454, ip mtu 1454, ip mtu idb Dialer1
     current outbound spi: 0x9A9F74D0(2594141392)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x661FA060(1713348704)
        transform: esp-gcm 256 ,
        in use settings ={Tunnel, }
        conn id: 102, flow_id: Onboard VPN:102, sibling_flags 80000040, crypto map: Tunnel1-head-0
        sa timing: remaining key lifetime (k/sec): (4247987/1077)
        IV size: 8 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x9A9F74D0(2594141392)
        transform: esp-gcm 256 ,
        in use settings ={Tunnel, }
        conn id: 101, flow_id: Onboard VPN:101, sibling_flags 80000040, crypto map: Tunnel1-head-0
        sa timing: remaining key lifetime (k/sec): (4247987/1077)
        IV size: 8 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:

以下のパケットカウンターでパケットが流れていることを確認します。
#pkts encaps: x, #pkts encrypt: x, #pkts digest: x
#pkts decaps: x, #pkts decrypt: x, #pkts verify: x

加えて、inbound/outbound esp sas の StatusActive と表示されていることを確認します。

続いて Azure 側でも確認してみます。
「接続」のリソースの状態が「接続済み」となっていること確認します。

なお、接続が完了すると、仮想マシンのネットワークインターフェースのルートテーブルにネクストホップを仮想ネットワーク ゲートウェイとした、オンプレミスのネットワークの経路が追加されます。

おわりに

今回は Azure とオンプレミスのネットワークをプライベートなネットワークで接続する方法として、サイト間 VPN の手順を紹介しました。
今回は最小限の設定で構成してみましたが、サイト間 VPN では、BGP やゲートウェイの冗長化など様々なオプションがありますので希望の構成に合わせて柔軟に構成することができますのでぜひ試してみてください。

サンプルコンフィグ

参考までに Azure ポータルよりダウンロードした構成ファイルの全文は以下になります。
※一部グローバル IP などはマスキングしています。

! Microsoft Corporation
! ------------------------------------------------------------------------------
! Sample VPN tunnel configuration template for Cisco IOS-based devices
!
! ##############################################################################
! !!! Search for "REPLACE" to find the values that require special
! !!! considerations
! !!!
! !!! (1) ACL/access-list rule numbers
! !!! (2) Tunnel interface number
! !!! (3) Tunnel interface IP address
! !!! (4) BGP routes to advertise (if BGP is enabled)
! !!! (5) BGP peer IP address on the device - loopback interface number
! ##############################################################################
!
! [0] Device infomration
!
!   > Device vendor:    Cisco
!   > Device family:    IOS-based (ASR, ISR)
!   > Firmware version: IOS 15.1 or beyond
!   > Test platform:    Cisco ISR 2911, version 15.2
!
! [1] Network parameters
!
!   > Connection name:       VPNconnection
!   > VPN Gateway name:      4f34006d-3ef2-43ca-967b-bfb9f432f984
!   > Public IP addresses:   
!     + Public IP 1:         <仮想ネットワーク ゲートウェイのパブリック IP>
!   > Virtual network address space: 
!     + CIDR:10.10.0.0/16, prefix:10.10.0.0, netmask:255.255.0.0, wildcard:0.0.255.255
!   > Local network gateway: LocalNWGW
!   > On-premises VPN IP:    <ルータのグローバル IP>!   > On-premises address prefixes:
!     + CIDR:192.168.99.0/24, prefix:192.168.99.0, netmask:255.255.255.0, wildcard:0.0.0.255
!
! [2] IPsec/IKE parameters
!
!   > IKE version:             IKEv2
!     + Encryption algorithm:  aes-cbc-256
!     + Integrityalgorithm:    sha1
!     + Diffie-Hellman group:  2
!     + SA lifetime (seconds): 3600
!     + Pre-shared key:        <共有キー>!     + UsePolicyBasedTS:      False
!
!   > IPsec
!     + Encryption algorithm:  esp-gcm 256
!     + Integrity algorithm:   
!     + PFS Group:             none
!     + SA lifetime (seconds): 3600
!     + SA lifetime (KB):      102400000
!
! [3] BGP parameters - Azure VPN gateway
!
!   > Azure virtual network
!     + Enable BGP:            False
!     + Azure BGP ASN:         VNG_ASN
!   > On-premises network / LNG
!     + On premises BGP ASN:   LNG_ASN
!     + On premises BGP IP:    LNG_BGPIP
!
! ==============================================================================
! Cisco IOS 15.x+ IKEv2, route-based (any-to-any) 
! ==============================================================================
!
! ACL rules
! 
! Some VPN devices require explicit ACL rules to allow cross-premises traffic:
!
! 1. Allow traffic between on premises address ranges and VNet address rangesa
! 2. Allow IKE traffic (UDP:500) between on premises VPN devices and ure VPN gateway
! 3. Allow IPsec traffic (Proto:ESP) between on premises VPN devices and Azure VPN gateway
! [REPLACE] access-list number: access-list 101

access-list 101 permit ip 192.168.99.0 0.0.0.255 10.10.0.0 0.0.255.255
access-list 101 permit esp host <仮想ネットワーク ゲートウェイのパブリック IP> host <ルータのグローバル IP>access-list 101 permit udp host <仮想ネットワーク ゲートウェイのパブリック IP> eq isakmp host <ルータのグローバル IP>access-list 101 permit udp host <仮想ネットワーク ゲートウェイのパブリック IP> eq non500-isakmp host <ルータのグローバル IP>
! ==============================================================================
! Internet Key Exchange (IKE) configuration
! - IKE Phase 1 / Main mode configuration
! - Encryption/integrity algorithms, Diffie-Hellman group, pre-shared key

crypto ikev2 proposal VPNconnection-proposal
  encryption aes-cbc-256
  integrity  sha1
  group      2
  exit

crypto ikev2 policy VPNconnection-policy
  proposal VPNconnection-proposal
  match address local <ルータのグローバル IP>  exit
  
crypto ikev2 keyring VPNconnection-keyring
  peer <仮想ネットワーク ゲートウェイのパブリック IP>
    address <仮想ネットワーク ゲートウェイのパブリック IP>
    pre-shared-key <共有キー>    exit
  exit

crypto ikev2 profile VPNconnection-profile
  match address  local <ルータのグローバル IP>  match identity remote address <仮想ネットワーク ゲートウェイのパブリック IP> 255.255.255.255
  authentication remote pre-share
  authentication local  pre-share
  lifetime       3600
  dpd 10 5 on-demand
  keyring local  VPNconnection-keyring
  exit

! ------------------------------------------------------------------------------
! IPsec configuration
! - IPsec (or IKE Phase 2 / Quick Mode) configuration
! - Transform Set: IPsec encryption/integrity algorithms, IPsec ESP mode

crypto ipsec transform-set VPNconnection-TransformSet esp-gcm 256 
  mode tunnel
  exit

crypto ipsec profile VPNconnection-IPsecProfile
  set transform-set  VPNconnection-TransformSet
  set ikev2-profile  VPNconnection-profile
  set security-association lifetime seconds 3600
  exit

! ------------------------------------------------------------------------------
! Tunnel interface (VTI) configuration
! - Create/configure a tunnel interface
! - Configure an APIPA (169.254.x.x) address that does NOT overlap with any
!   other address on this device. This is not visible from the Azure gateway.
! * REPLACE: Tunnel interface numbers and APIPA IP addresses below
! * Default tunnel interface 11 (169.254.0.1) and 12 (169.254.0.2)

int tunnel 11
  ip address 169.254.0.1 255.255.255.255
  tunnel mode ipsec ipv4
  ip tcp adjust-mss 1350
  tunnel source <ルータのグローバル IP>  tunnel destination <仮想ネットワーク ゲートウェイのパブリック IP>
  tunnel protection ipsec profile VPNconnection-IPsecProfile
  exit


! ------------------------------------------------------------------------------
! Static routes
! - Adding the static routes to point the VNet prefixes to the IPsec tunnels
! * REPLACE: Tunnel interface number(s), default tunnel 11 and tunnel 12

ip route 10.10.0.0 255.255.0.0 Tunnel 11

! ==============================================================================
! Cleanup script
! ==============================================================================
!
! [WARNING] This section of the script will cleanup the resources: IPsec/IKE,
! [WARNING] interfaces, routes, access-list. Validate the objects in your
! [WARNING] configuration before applying the script below.
! [REPLACE] Interfaces: Loopback 11, Tunnel 11, Tunnel 12; access-list 101
!
!!
!! no ip route 10.10.0.0 255.255.0.0 Tunnel 11
!!
!!
!! no int tunnel 11
!!
!! no crypto ipsec profile VPNconnection-IPsecProfile
!! no crypto ipsec transform-set VPNconnection-TransformSet
!!
!! no crypto ikev2 profile VPNconnection-profile
!! no crypto ikev2 keyring VPNconnection-keyring
!! no crypto ikev2 policy VPNconnection-policy
!! no crypto ikev2 proposal VPNconnection-proposal
!!
!! no access-list 101 permit ip 192.168.99.0 0.0.0.255 10.10.0.0 0.0.255.255
!! no access-list 101 permit esp host <仮想ネットワーク ゲートウェイのパブリック IP> host <ルータのグローバル IP>!! no access-list 101 permit udp host <仮想ネットワーク ゲートウェイのパブリック IP> eq isakmp host <ルータのグローバル IP>!! no access-list 101 permit udp host <仮想ネットワーク ゲートウェイのパブリック IP> eq non500-isakmp host <ルータのグローバル IP>```