Azure と 自宅環境を Cisco ルータを用いて、NAT トラバーサル経由で BGP ルーティングで Site-to-Site VPN (IKEv2) 接続を行う

# はじめに
Azure 仮想環境に対して、自宅から Site-to-Site VPN 接続 (IPSec) を行い、BGP を用いた動的ルーティングを試してみました。
以下、備忘録に残しておきます。

# 環境
環境は以下の通りです。今回は PoC 環境用途としてシンプルな環境になっていますが、前回の投稿（[Azure と 自宅環境を Cisco ルータを用いて、NATトラバーサル経由で Site-to-Site VPN接続をしてみる](https://qiita.com/hisnakad/items/572ca4e7543211651771)）と比較して、以下を追加しています。

- BGP ルーティングによる経路交換
- IPSec / IKEv2
- Cisco IPSec Tunnel Interfaceの利用（Azure設定サンプルだとこちら）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1e44949e-37b6-3637-e35e-ca24bdc41df4.png)


# 自宅環境側設定
- NTT光ルータで Internet には NAT 変換を行う
- Cisco 891 ルータが Azure から見た Local Gateway として設定する
    - Private IP経由での IPSec パススルー接続（NATトラバーサル）を行う
    - Flet's ルータ側のポートマッピング機能にて、UDP:500、UDP:4500、ESP を Cisco ルータにポートマッピングする

# Azure 環境設定
- Azure VPN Gateway の構成は以下の通り。
- Standard SKUを用いて、動的ルーティングを行う。

|  構成  |  パラメータ  |
| ---- | ---- |
| ゲートウェイの種別  | VPN |
| VPNの種類  | ルートベース |
| 世代 | Generation1 |
| SKU | VpnGw1 |
|IKEプロトコル | IKEv2 |

#設定例
## やってみる ～ Azure編 ～
- **Azure 側 Vnet にて、仮想ネットワークゲートウェイのための専用サブネットを作成する**
    - 仮想ネットワークゲートウェイの専用サブネットとして「GatewaySubnet」を作成します。
    - [公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gateway-subnet)に「GatewaySubnet」に関する記述があるので参照のこと。
        - サブネットのサイズについて、同じように調べられた方がいらっしゃるので、[リンクを張っておきます。](https://www.syuheiuda.com/?p=5311)
            - VPN のみの場合: /29
            - ExpressRoute のみの場合: /28
            - VPN / ExpressRoute を併用する場合: /27
- **仮想ネットワークゲートウェイを作成する(※ 30-40分かかるので注意!)**
    - Azure Portal から、仮想ネットワークゲートウェイを作成します。
    - 仮想ネットワークゲートウェイが使用するパブリックIPアドレスも合わせて作っちゃいましょう。
    - 「確認および作成」を押すと、仮想ネットワークゲートウェイを作成し始めます。
    - 作成完了まで30-40分ほど経過しますので、根気よく待ちましょう。
    - 作成後、BGPの設定を行う
        - 仮想ネットワークゲートウェイの設定から、「BGPの構成」を有効化します。
            - AS番号はPrivate用のIDが自動的に付与されるため、それを用いています。
            - ここで仮想ネットワークゲートウェイ側のBGPピアIPアドレスがアサインされます。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/f02e1c1e-a176-c979-da56-d5e837d589f7.png)
- **ローカルネットワークゲートウェイを作成する**
    - local Network Gateway == 対抗先VPNルータのことです。
    - IPSecの対抗先となるグローバルIPアドレスを設定します。
    - ローカルネットワークゲートウェイでBGP設定を有効化します。
        - 対抗先（Cisco）側のAS番号を設定します。
        - BGPピアのIPアドレスは、今回はCiscoルータで設定するTunnelインターフェースのIPアドレス（BGPの広報元）を指定します。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/dfe0a880-4078-4393-fa3b-c75de1dd9799.png)
- **仮想ネットワークゲートウェイでローカルネットワークゲートウェイの設定を行う**
    - 仮想ネットワークゲートウェイの「接続」から、対向先のローカルネットワークゲートウェイを指定します。
    - BGPの有効化、IKEv2の指定などを行います。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/045314ef-74f3-1d54-4632-87c29a001e45.png)
- **(参考) Azure 推奨のルータ構成ファイルをダウンロードする**
    - 元となるルータコンフィグ情報はAzureポータルからもダウンロードができます。
    - 仮想ネットワークゲートウェイの「接続」画面から、サンプルコンフィグをダウンロードしましょう。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5b9d1dfa-370d-d8d6-0aca-6935467e0101.png)

## やってみる ～ VPNルータ (Cisco 891) ～
- Azure の VPNルータについては、[公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpn-devices)に検証済みデバイス、および構成ガイドが掲載されています。
    - デバイスによっては、Azure Portal から直接コンフィグファイルを落とせたりします。
    - 詳細なサンプルは [GitHub に Config Sample として掲載されています](https://github.com/Azure/Azure-vpn-config-samples)ので、最新情報をWatchしておいた方がよさそうです。

```
version 15.3
no service pad
service tcp-keepalives-in
service tcp-keepalives-out
service timestamps debug datetime localtime year
service timestamps log datetime localtime year
service password-encryption
service sequence-numbers
!
hostname c891home
!
logging buffered 512000
!         
no aaa new-model
memory-size iomem 15
clock timezone JST 9 0
!
! ローカルの DHCP 設定
ip dhcp pool MyHome
 network 10.16.0.0 255.255.0.0
 dns-server 8.8.8.8 
 lease 7
!
!
! IKEv2 Proposal 設定
crypto ikev2 proposal azure-proposal-MyHome_BGP 
 encryption aes-cbc-256 aes-cbc-128
 integrity sha1 sha256
 group 2  
!
! IKEv2 Policy 設定
crypto ikev2 policy azure-policy-MyHome_BGP 
 proposal azure-proposal-MyHome_BGP
!
! IKEv2 Keyring 設定
crypto ikev2 keyring azure-keyring-MyHome_BGP
 peer (Azure仮想ネットワークゲートウェイのIPアドレス)
  address (Azure仮想ネットワークゲートウェイのIPアドレス)
  pre-shared-key (Pre-Shared Key)
 !
!
!
crypto ikev2 profile azure-profile-MyHome_BGP
 match address local interface FastEthernet0
 match identity remote address (Azure仮想ネットワークゲートウェイのIPアドレス) 255.255.255.255 
 authentication remote pre-share
 authentication local pre-share
 keyring local azure-keyring-MyHome_BGP
 lifetime 28800
 dpd 10 5 on-demand
!         
!         
!
ip ssh version 2
!         
!         
!         
crypto ipsec transform-set azure-ipsec-proposal-set esp-aes 256 esp-sha256-hmac 
 mode tunnel
!         
crypto ipsec profile azure-ipsec-profile-MyHome_BGP
 set security-association lifetime kilobytes 102400000
 set transform-set azure-ipsec-proposal-set 
 set ikev2-profile azure-profile-MyHome_BGP
!         
!
!         
! Tunnel インターフェース設定（192.168.11.254はルータのFastEthernet0）
interface Tunnel100
 ip address 10.16.254.1 255.255.255.254
 ip tcp adjust-mss 1350
 load-interval 30
 tunnel source 192.168.11.254
 tunnel mode ipsec ipv4
 tunnel destination (Azure仮想ネットワークゲートウェイのIPアドレス)
 tunnel protection ipsec profile azure-ipsec-profile-MyHome_BGP
!
!
interface FastEthernet0
 description *** To Internet ***
 ip address 192.168.11.254 255.255.255.0
 ip tcp adjust-mss 1350
 load-interval 30
 duplex auto
 speed auto
 no cdp enable
!
interface GigabitEthernet0
 description *** Home Hub ***
 switchport access vlan 11
 no ip address
 no cdp enable
 spanning-tree portfast
!
interface GigabitEthernet1
 description *** Home Hub ***
 switchport access vlan 11
 no ip address
 no cdp enable
! (以下省略）
!
! （オンプレ側vLANネットワーク）
interface Vlan11
 description *** VPN localside ***
 ip address 10.16.0.1 255.255.255.0
!
!
! (BGP設定 10.4.254.94はAzureのBGP広報先）
router bgp 65050
 bgp log-neighbor-changes
 neighbor 10.4.254.94 remote-as 65515
 neighbor 10.4.254.94 ebgp-multihop 255
 neighbor 10.4.254.94 update-source Tunnel100
 !        
 address-family ipv4
  network 10.16.0.0 mask 255.255.255.0
  neighbor 10.4.254.94 activate
 exit-address-family
!
!
! (BGP Peerをtunnnel先に向ける)
ip route 0.0.0.0 0.0.0.0 192.168.11.1
ip route 10.4.254.94 255.255.255.255 Tunnel100
! 
```

# 経路情報が交換されているかを確認する
- 設定が無事完了すると、Azure側、および Cisco ルータ側でBGPによる経路交換の情報が確認できます。
- Azure側
    - 仮想ネットワークゲートウェイより、「BGPピア」を見るとピア先と学習されたルートが確認できる
        - 今回の例だと、10.16.0.0/16 の経路情報が eBGP によって広報されたことがわかる
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/cd12136e-0181-ea1d-5725-18f2221ff5ae.png)
- Cisco側
    - show ip route

```
c891home#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.11.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 192.168.11.1
      10.0.0.0/8 is variably subnetted, 9 subnets, 4 masks
S        10.4.0.0/16 is directly connected, Tunnel100
B        10.4.1.0/24 [20/0] via 10.4.254.94, 01:17:58
B        10.4.2.0/24 [20/0] via 10.4.254.94, 01:17:58
B        10.4.254.0/24 [20/0] via 10.4.254.94, 01:17:58
S        10.4.254.94/32 is directly connected, Tunnel100
C        10.16.0.0/24 is directly connected, Vlan11
L        10.16.0.1/32 is directly connected, Vlan11
C        10.16.254.0/31 is directly connected, Tunnel100
L        10.16.254.1/32 is directly connected, Tunnel100
      192.168.11.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.11.0/24 is directly connected, FastEthernet0
L        192.168.11.254/32 is directly connected, FastEthernet0
c891home# 
```
 
- show ip bgp neighbor

```
c891home#show ip bgp neighbors 
BGP neighbor is 10.4.254.94,  remote AS 65515, external link
  BGP version 4, remote router ID 10.4.254.94
  BGP state = Established, up for 01:18:47
  Last read 00:00:37, last write 00:00:21, hold time is 180, keepalive interval is 60 seconds
  Neighbor sessions:
    1 active, is not multisession capable (disabled)
  Neighbor capabilities:
    Route refresh: advertised and received(new)
    Four-octets ASN Capability: advertised and received
    Address family IPv4 Unicast: advertised and received
    Address family IPv6 Unicast: received
    Graceful Restart Capability: received
      Remote Restart timer is 120 seconds
      Address families advertised by peer:
        IPv4 Unicast (was not preserved
    Enhanced Refresh Capability: advertised
    Multisession Capability: 
    Stateful switchover support enabled: NO for session 1
  Message statistics:
    InQ depth is 0
    OutQ depth is 0
    
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                2          1
    Keepalives:            89         91
    Route Refresh:          0          0
    Total:                 92         93
  Default minimum time between advertisement runs is 30 seconds

 For address family: IPv4 Unicast
  Session: 10.4.254.94
  BGP table version 11, neighbor version 11/0
  Output queue size : 0
  Index 5, Advertise bit 0
  5 update-group member
  Slow-peer detection is disabled
  Slow-peer split-update-group dynamic is disabled
                                 Sent       Rcvd
  Prefix activity:               ----       ----
    Prefixes Current:               1          3 (Consumes 240 bytes)
    Prefixes Total:                 1          3
    Implicit Withdraw:              0          0
    Explicit Withdraw:              0          0
    Used as bestpath:             n/a          3
    Used as multipath:            n/a          0
```

# まとめ
Azure へのVPN接続についてまとめてみました。VPNテストは環境を作るのが大変ですが、NATトラバーサルが普通に使えるので、事前接続試験などを検討されている方は何かの参考にしていただけたらと思います。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。