今回はAzure Virtual WANとオンプレデバイスをVPN接続する手順について紹介します。本来であれば推奨パートナーデバイスを用いて自動デプロイなどを試してみたいところですが、ない袖は振れぬということでひとまず手近にあったSRX300で接続をしてみます。VPN接続したうえでAzureとBGPで経路情報の交換を行ってみたいと思います。



1.環境構成

今回構築する検証環境は以下の図の通りです。Azure Virtual WANでハブ&スポーク型ネットワークを実現します。

オンプレ拠点と東日本リージョンにデプロイしたVirtual WANの仮想ハブを接続し、同一リージョン内の仮想ネットワークをピアリングします。

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

2.Azure側構築

2-1.仮想ネットワークの作成

Virtual WANと接続するための仮想ネットワークを2つ作成します。各仮想ネットワーク内には通信用のVMを作成します。疎通確認のため、VMのセキュリティ設定は適宜変更しておきます。

設定項目 設定値
仮想ネットワーク名1 LAB-WAN-JE-VP
アドレス空間1 10.110.0.0/16
サブネット名 default
サブネットプレフィックス 10.110.0.0/24
仮想マシン名1 WAN-VM-JE-VP
仮想マシンIPアドレス1 10.110.0.4
仮想ネットワーク名2 LAB-WAN-JE-VP-2
アドレス空間2 10.120.0.0/16
サブネット名 default
サブネットプレフィックス 10.120.0.0/24
仮想マシン名2 WAN-VM-JE-VP-2
仮想マシンIPアドレス2 10.120.0.4

2-2.Virtual WANの作成

[リソースの作成]から「Virtual WAN」を選択し、作成します。

Virtual WANリソースは拠点間接続を実現するための複数のコンポーネントが統合されたサービスです。リソースの場所はVirtual WANリソースが紐づけられるロケーションであり、この段階ではインスタンスの実態は作成されません。

設定項目 設定値
名前 NE-LAB-WAN
サブスクリプション (デプロイするサブスクリプションを選択)
リソースグループ LAB-WAN-RG
リソースグループの場所 東日本

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

2-3.仮想ハブの作成

[Virtual WAN]のメニューから[仮想ハブ]を選択し、新規に仮想ハブを作成します。

設定項目 設定値
名前 NE-LAB-HUB-JE
ハブプライベートアドレス空間 10.255.0.0/24
VPNサイト用のVPNゲートウェイを含める 有効
AS番号 65515(既定値)
ゲートウェイスケールユニット 1 スケールユニット – 500Mbps

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

2-4.VPN接続情報

[Virtual WAN]のメニューから[VPNサイト]を選択し、新たにVPN接続するオンプレデバイスの情報を設定します。

VPNサイトの設定情報はS2S VPN接続の時のローカルネットワークゲートウェイに設定するものと同様の仕組みです。BGP接続の場合は[プライベートアドレス空間]にオンプレデバイスのループバックアドレスをプレフィックス付きで指定し、ピアリングアドレスには同様にループバックアドレスを指定します。
ピアの重みは同一拠点に複数のパス(VPNサイト)を作成する場合に経路を制御するための設定値です。

デバイスの情報は任意の設定項目です。オンプレデバイスを管理するための事務的な項目でしょうか。

設定項目 設定値
名前 NETFC
パブリックIPアドレス (環境に合わせて設定)
プライベートアドレス空間 1.1.1.1/32
Border Gateway Protocol設定を有効にします 有効
ピアリングアドレス 1.1.1.1
ASN 65010

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

仮想サイトを作成したら、仮想ハブとの関連付けをします。関連付けするサイトを選択し、[新しいハブの関連付け]から対象の仮想ハブを選択します。接続に用いる共有キーの設定も行います。

設定項目 設定値
名前 Connection-NETFC
共有キー (オンプレデバイスの共有キーと一致させる)

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

2-5.仮想ネットワーク接続

[Virtual WAN]のメニューから[仮想ネットワーク接続]を選択し、仮想ハブと仮想ネットワークを接続します。設定を行うと、対象の仮想ネットワーク側に自動でピアリングの設定が作成されます。

設定項目 設定値
接続名 LAB-WAN-JE-VP-Peering
ハブ NE-LAB-HUB-JE
サブスクリプション (仮想ネットワークのサブスクリプションを選択)
仮想ネットワーク LAB-WAN-JE-VP

仮想ハブと接続できる仮想ネットワークは同一リージョン内に作成されているもののみです。異なるリージョンに作成されている仮想ネットワークと接続しようとするとエラーとなります。また、仮想ネットワーク内にVPNゲートウェイが含まれている場合も失敗します。

左下の画像はVPNゲートウェイが含まれる仮想ネットワークとの接続をしたとき、右下の画像は異なるリージョンの仮想ネットワークとの接続をしたときのエラーです。

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

3.オンプレ側構築

皆大好きJUNOSコンフィグレーションの時間です。Juniper SRX300の設定項目を一部抜粋して紹介します。

3-1.Interfaces設定

このほかのインタフェースで有効になっている経路情報を広報します。(192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24)
show configuration interfaces
ge-0/0/0 {
unit 0 {
family inet {
address XXX.XXX.XXX.XXX/XX;
}
}
}
lo0 {
unit 0 {
family inet {
address 1.1.1.1/32;
}
}
}
st0 {
unit 0 {
family inet;
}
unit 1 {
family inet;
}
}

3-2.IKE設定

S2S VPN接続時と変わらないパラメータです。VPN接続の既定のポリシーは以下の公式サイトに情報があります。

IPsec 接続の既定のポリシー
> show configuration security ike
proposal azure-proposal {
authentication-method pre-shared-keys;
dh-group group2;
authentication-algorithm sha1;
encryption-algorithm aes-256-cbc;
lifetime-seconds 28800;
}
policy azure-policy {
mode main;
proposals azure-proposal;
pre-shared-key ascii-text “$9$lrLvL7ws4GDkvW4ZUDq.cylKX-bs4UDksYn/ApB1s2goaZ”; ## SECRET-DATA
}
gateway azure-gateway {
ike-policy azure-policy;
address 40.81.216.55;
external-interface ge-0/0/0.0;
version v2-only;
}
gateway azure-gateway-2 {
ike-policy azure-policy;
address 40.81.216.18;
external-interface ge-0/0/0.0;
version v2-only;
}

3-3.IPsec設定

> show configuration security ipsec
proposal azure-ipsec-proposal {
protocol esp;
authentication-algorithm hmac-sha1-96;
encryption-algorithm aes-256-cbc;
lifetime-seconds 27000;
}
policy azure-vpn-policy {
proposals azure-ipsec-proposal;
}
vpn azure-ipsec-vpn {
bind-interface st0.0;
ike {
gateway azure-gateway;
ipsec-policy azure-vpn-policy;
}
}
vpn azure-ipsec-vpn-2 {
bind-interface st0.1;
ike {
gateway azure-gateway-2;
ipsec-policy azure-vpn-policy;
}
}

3-4.Security-zone設定

> show configuration security zones
security-zone trust {
host-inbound-traffic {
system-services {
ping;
}
}
interfaces {
ge-0/0/1.0;
ge-0/0/2.0;
ge-0/0/3.0;
}
security-zone untrust {
host-inbound-traffic {
protocols {
bgp;
}
}
interfaces {
ge-0/0/0.0 {
host-inbound-traffic {
system-services {
ike;
}
}
}
st0.0;
st0.1;
}

3-5.Address-book設定

> show configuration security addless-book
address onprem-local-1 192.168.1.0/24;
address onprem-local-2 192.168.2.0/24;
address onprem-local-3 192.168.3.0/24;
address azure_vnet_vwan_1 10.255.0.0/24;
address azure_vnet_vwan_2 10.110.0.0/16;
address azure_vnet_vwan_3 10.120.0.0/16;
address onprem-local-bgp 1.1.1.1/32;
address-set onprem-localnw-addr {
address onprem-local-1;
address onprem-local-2;
address onprem-local-3;
address onprem-local-bgp;
}
address-set azure_vnet_vwan_set {
address azure_vnet_vwan_1;
address azure_vnet_vwan_2;
address azure_vnet_vwan_3;
}

3-6.Flow設定

show configuration security flow
tcp-mss {
ipsec-vpn {
mss 1320;
}
}

3-7.Security-policy設定

> show configuration security policies
from-zone trust to-zone untrust {
policy Onprem-to-AzureVWAN {
match {
source-address onprem-localnw-addr;
destination-address azure_vnet_vwan_set;
application any;
}
then {
permit;
}
}
}
from-zone untrust to-zone trust {
policy AzureVWAN-to-Onprem {
match {
source-address azure_vnet_vwan_set;
destination-address onprem-localnw-addr;
application any;
}
then {
permit;
}
}
}

3-8.Routing-options設定

> show configuration routing-options
static {
route 0.0.0.0/0 next-hop XXX.XXX.XXX.XXX;
route 10.255.0.4/32 next-hop st0.0;
route 10.255.0.5/32 next-hop st0.1;
}
autonomous-system 65010;

3-9.BGP設定

AzureのゲートウェイインスタンスとはeBGPで接続する必要があります。VPN経由で対向の仮想ハブ内のアドレスに対してネゴシエーションを張りに行くので、マルチホップ設定を行います。ローカルアドレスにはループバックアドレスを指定します。
> show configuration protocols bgp
group azure-virtualwan {
type external;
multihop {
ttl 255;
}
local-address 1.1.1.1;
export EXPORT-BGP-AZURE;
local-as 65010;
neighbor 10.255.0.4 {
peer-as 65515;
}
neighbor 10.255.0.5 {
peer-as 65515;
}
}

3-10.Policy-options設定

> show configuration policy-options
policy-statement EXPORT-BGP-AZURE {
term 1 {
from {
protocol direct;
route-filter 192.168.0.0/16 orlonger;
}
then accept;
}
}

4.状態確認

4-1.IKE/IPsec状態確認

# 通信先のアドレスに対してIKEのネゴシエーションが確立していること
> show security ike security-associations
Index State Initiator cookie Responder cookie Mode Remote Address
4850712 UP f053aad522cd541e d627d0a09b8f51e9 IKEv2 40.81.216.18
4850713 UP e0ffcc8d6d615eb1 a25a8130d6464078 IKEv2 40.81.216.55

# 通信先のIPアドレスに対して双方向にトンネルが確立していること
> show security ipsec security-associations
Total active tunnels: 2
ID Algorithm SPI Life:sec/kb Mon lsys Port Gateway
<131073 ESP:aes-cbc-256/sha1 e4e62261 11125/unlim – root 500 40.81.216.55
>131073 ESP:aes-cbc-256/sha1 ddf80762 11125/unlim – root 500 40.81.216.55
<131074 ESP:aes-cbc-256/sha1 4eb49505 11116/unlim – root 500 40.81.216.18
>131074 ESP:aes-cbc-256/sha1 abc572ee 11116/unlim – root 500 40.81.216.18

4-2.BGP状態確認

> show bgp summary
Groups: 1 Peers: 2 Down peers: 0
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet.0
8 3 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped…
10.255.0.4 65515 1818 1761 0 8 4:24:07 3/4/4/0 0/0/0/0
10.255.0.5 65515 17 16 0 0 6:10 0/4/4/0 0/0/0/0

4-3.経路情報確認

SRXにおいてBGPで受信した経路を確認します。‘show route advertising-protocol bgp X.X.X.X’コマンドでネイバーごとに広報している経路を確認できます。
> show route protocol bgp

inet.0: 27 destinations, 32 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, – = Last Active, * = Both

1.1.1.1/32 [BGP/170] 04:25:06, localpref 100, from 10.255.0.4
AS path: 65515 I, validation-state: unverified
> via st0.0
[BGP/170] 00:07:09, MED 200, localpref 100, from 10.255.0.5
AS path: 65515 I, validation-state: unverified
> via st0.1
10.110.0.0/16 *[BGP/170] 04:25:06, localpref 100, from 10.255.0.4
AS path: 65515 I, validation-state: unverified
> via st0.0
[BGP/170] 00:07:09, MED 200, localpref 100, from 10.255.0.5
AS path: 65515 I, validation-state: unverified
> via st0.1
10.120.0.0/16 *[BGP/170] 00:21:36, localpref 100, from 10.255.0.4
AS path: 65515 I, validation-state: unverified
> via st0.0
[BGP/170] 00:07:09, MED 200, localpref 100, from 10.255.0.5
AS path: 65515 I, validation-state: unverified
> via st0.1
10.255.0.0/24 *[BGP/170] 04:25:06, localpref 100, from 10.255.0.4
AS path: 65515 I, validation-state: unverified
> via st0.0
[BGP/170] 00:07:09, MED 200, localpref 100, from 10.255.0.5
AS path: 65515 I, validation-state: unverified
> via st0.1

>show route advertising-protocol bgp 10.255.0.4
 

Azure側では、ピアリングした仮想ネットワークに配置したVMのNICを参照し、[有効なルート情報]からVMが保持している経路情報を確認します。オンプレデバイスへの経路が冗長されているため、オンプレネットワーク宛経路のネクストホップには、ゲートウェイインスタンスのIPアドレスが2つ表示されています。

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

5.経路制御

5-1.AS-Prepend

アクティブ/アクティブ構成のVPNゲートウェイは、両経路が等コストなのでそのままではAzureからオンプレへの通信はどちらか一方のパスを選択することになります。Azure→オンプレへの通信経路を制御するにはいくつか方法がありますが、オーソドックスな方法はAS-Prependであると思います。

ASパス長を長くして広報することにより、対向ルータからの経路を制御する。以下のようにセカンダリーインスタンス向けのみパス属性に自ASを余分に付与することでコストを高く見せます。
policy-statement EXPORT-BGP-SECONDARY {
term 1 {
from {
protocol direct;
route-filter 192.168.0.0/16 orlonger;
}
then {
as-path-prepend “65010 65010 65010”;
accept;
}
}
}

>show configuration protocols bgp group azure-virtualwan neighbor 10.255.0.5
export EXPORT-BGP-SECONDARY;
peer-as 65515;
Azure側で経路を確認すると、対象の経路のネクストホップが片方になっているのが確認できます。

Azure Virtual WANとJuniper SRXでBGP over IPsec VPNを動かす

6.さいごに

今回はAzure Virtual WANとJuniper SRXでBGP over IPsec接続をしてみました。S2S VPNと手順は変わらずに行えることがお分かりいただけたかと思います。Virtual WANを利用するならば大規模な拠点間接続の利用シーンが想定されますので、静的に経路制御を行っていては管理の手間が膨れ上がることは明白です。推奨パートナーデバイスの利用が最善解かもしれませんが、せめて動的経路制御を行うのは必須でしょう。

この記事を書いた人

Azure導入支援デスク 編集部
Azure導入支援デスク 編集部
こんにちは!日商エレクトロニクスでは、Microsoft Azure活用に関する有益な情報を皆様にお届けしていきます。Azure移行、データ活用、セキュリティなどに関するお困りごとや、Microsoft Azureに関する疑問点などお気軽にご相談ください。

ブログにしてほしいネタなどのリクエストもお待ちしております。