はじめに
Juniper SSGシリーズはAzure Site to Site VPNの動作確認済みルータであり、設定ファイルもAzureポータルからダウンロード可能ですが、VPN接続時のBGPによるルート交換の設定までは含まれていません。
そこで、多少試行錯誤ではありましたが、VPN接続+BGPによるルート交換を含めて接続設定が行えたので記します。
前提条件
今回の検証では以下の構成・条件で行いました。
- インターネット接続はフレッツにPPPoEで任意のインターネットプロバイダに接続済
- オンプレミス側のWAN側IPアドレスは固定
構成
ざっくりとした構成図は以下のとおりです。
オンプレミス側とAzure側のセグメント情報(192.168.127.0/24, 192.168.10.0/24, 192.168.12.0/24)は直接ローカルネットワークゲートウェイ等の設定には記述しないで、BGPによる経路交換を実現させます。
Azure側の設定
必要な仮想ネットワーク、仮想マシンは事前に作成します。本記事では具体的な作成方法は割愛します。
仮想ネットワークゲートウェイ リソース
前述した構成上、AzureVNET内にGatewaySubnetを作成してそこに配置します。
本記事ではGatewaySubnetのアドレス空間は192.168.10.128/28を設定しています。
BGPを利用する為にはSKUはBasic以外を選択する必要があります。今回はVpnGw1を使用しました。
参考 : BGP はすべての Azure VPN Gateway SKU でサポートされていますか
作成後に「概要」のパブリックIPアドレスと、「構成」の自律システム番号(ASN)及びBGPピアのIPアドレスを控えておきます。
ローカルネットワークゲートウェイ リソース
- IPアドレス : オンプレミスのWAN側IPアドレスを設定します。
- アドレス空間 : 後述しますが、オンプレミス側のtunnelインタフェースのIPアドレスを指定します。このアドレスはBGPのピア用のアドレスとなっていて、オンプレミス側のプライベートネットワーク内のアドレスとは異なります。後から修正もできるので、とりあえず下記画面通りの値をいれておいても良いと思います。
- BGP設定の構成 : 必ずチェックを入れます
- 自律システム番号 : こちらも後述しますが、プライベートASNの範囲からAzureが予約していない番号をオンプレミス側に指定するため、そのASNを設定します。
- BGPピアのIPアドレス : アドレス空間に設定したピア用のIPアドレスと同じものを指定します(こちらは末尾に/32は付けない)
接続 リソース
先に作成した仮想ネットワークゲートウェイと、ローカルネットワークゲートウェイを指定して作成します。
共有キーはオンプレミス側のルータ設定時にも必要ですので、設定した内容を控えておきます。
接続リソース上でもBGPが有効になっているか確認します。
Juniper追加設定
既にインターネットへはWebインタフェースのウイザードなどを使い、PPPoE等で契約済みのプロバイダに接続されているのが前提となります。
Azure Site to Site VPN接続を行う場合にはオンプレミス側のWAN側IPアドレスは固定化されていることが必要です。
また、ScreenOSは6.2.x以降のファームウェアバージョンが対象となります(それ以前のバージョンではルートベースのVPN接続が不可)。
tunnelの設定
オンプレミス側のWAN側アドレスに対してAzure VPN GWからBGPのピアを直接張ることはできないため、オンプレミス、Azure VNET共に重複しないアドレス空間でtunnelを作成します。
今回は192.168.130.1/30をBGPピアIPアドレスに指定します。
参考 : VPN デバイスの BGP ピア IP アドレスに関する要件はどんなものですか。
set zone "Trust" asymmetric-vpn
set interface "tunnel.1" zone "Trust"
set interface tunnel.1 ip <Edit>192.168.130.1/30</Edit>
※「<Edit>~</Edit>」は適宜環境に合わせて修正してください
MTU/MSSの値設定
BフレッツでAzureとVPN接続する場合には以下のMTU/MSSが良いそうです。
ethernet0/0とtunnel.1の両方に設定が必要か判断できなかったので両方設定しました。
(どなたか正解をコメントして頂ければ幸いです)
参考 : Azureなう : IPsec VPN利用時の、最適なMTU
set interface ethernet0/0 mtu 1374
set interface tunnel.1 mtu 1374
set flow vpn-tcp-mss 1334
Site to Site VPNの設定
基本的にはAzure側にて「接続」リソース作成後に「構成のダウンロード」で取得できるオンプレミス側の設定ファイルをベースとしています。
しかし、こちらの内容はBGP非対応のものであるほか、インターネットと直接(PPPoE経由とかではなく)接続されている前提のconfigファイルとなるため、必要な箇所だけ抜粋・修正しました。
注意点・要修正点は以下のとおりです。
- set ike gateway ikev2 "Azure-GW"
- address : Azure側の仮想ネットワークゲートウェイに割り当てられたパブリックIPアドレスを設定
- local-id : オンプレミスのWAN側に割り当てられたパブリックIPアドレスを設定
- preshare : Azure側の接続リソース作成時に設定した共有キーと同じものを設定
set ike p1-proposal "AZURE-P1_Proposal" preshare group2 esp aes256 sha2-256 hour 8
set ike p2-proposal "AZURE-P2_Proposal" group2 esp aes256 sha2-256 hour 3
set ike gateway ikev2 "Azure-GW" address <Edit>XXX.XXX.XXX.XXX</Edit> local-id "<Edit>XXX.XXX.XXX.XXX<Edit>" outgoing-interface "ethernet0/0" preshare "<Edit>Preshareword</Edit>" sec-level compatible
set ike gateway "Azure-GW" dpd-liveness interval 10
set ike respond-bad-spi 1
set ike gateway ikev2 "Azure-GW" auth-method self preshare peer preshare
set ike ikev2 ike-sa-soft-lifetime 60
unset ike ikeid-enumeration
unset ike dos-protection
unset ipsec access-session enable
set ipsec access-session maximum 5000
set ipsec access-session upper-threshold 0
set ipsec access-session lower-threshold 0
set ipsec access-session dead-p2-sa-timeout 0
unset ipsec access-session log-error
unset ipsec access-session info-exch-connected
unset ipsec access-session use-error-log
set vpn "Azure" gateway "Azure-GW" no-replay tunnel idletime 0 sec-level compatible
set vpn "Azure" monitor optimized rekey
set vpn "Azure" id 0x1 bind interface tunnel.1
set url protocol websense
exit
※「<Edit>~</Edit>」は適宜環境に合わせて修正してください
BGPの設定
注意点・要修正点は以下のとおりです。
- set protocol
- bgp : オンプレミス側のプライベートASを指定。64512~65534の範囲の内、65515, 65517, 65518, 65519, 65520はAzure側で予約されているので、それ以外を指定します。今回の例では65521を使用しました。
参考 : Azure によって予約済みの ASN はありますか
- set neighbor全体
- IPアドレス(例では192.168.10.142)に、Azure側の仮想ネットワークゲートウェイ作成後に「構成」から確認できる「BGPピアのIPアドレス」を設定します。
- set neighbor
- remote-as : Azure側の仮想ネットワークゲートウェイ作成後に「構成」から確認できる「自律システム番号(ASN)」を設定します(例では65516)。
- set neighbor ... ebgp-multihop 2
- こちらを設定しないとtunnel経由でBGP交換を行う場合にデフォルトでは次ホップ(1)までしか広告されないので、必ず設定します
- set ipv4 network
- オンプレミス側からAzure VNETに広告が必要なセグメント情報をCIDRで指定します(複数行指定可能)。今回の例ではオンプレミス側は 192.168.127.0/24 のみであるため、1行指定しています。
- set route
- Azure側のBGPピアのIPアドレスを設定します。こちらについては静的登録しないとBGPによるルート交換ができませんので。
set vrouter "trust-vr"
set max-ecmp-routes 2
set protocol bgp <Edit>65521</Edit>
set enable
set hold-time 30
set neighbor <Edit>192.168.10.142</Edit> remote-as <Edit>65516</Edit>
set neighbor <Edit>192.168.10.142</Edit> enable
set neighbor <Edit>192.168.10.142</Edit> hold-time 30
set neighbor <Edit>192.168.10.142</Edit> ebgp-multihop 2
set ipv4 neighbor <Edit>192.168.10.142</Edit> activate
set ipv4 network <Edit>192.168.127.0/24</Edit> weight 100
exit
unset add-default-route
set route <Edit>192.168.10.142/32</Edit> interface tunnel.1
exit
set interface tunnel.1 protocol bgp
※「<Edit>~</Edit>」は適宜環境に合わせて修正してください
接続確認
JuniperのCLIからget routeコマンドを実行して、ルーティングテーブルにBGP経由でAzure側のルーティング情報が広告されているか確認します。
ssg5-isdn-> get route
IPv4 Dest-Routes for <untrust-vr> (0 entries)
--------------------------------------------------------------------------------------
H: Host C: Connected S: Static A: Auto-Exported
I: Imported R: RIP/RIPng P: Permanent D: Auto-Discovered
N: NHRP
iB: IBGP eB: EBGP O: OSPF/OSPFv3 E1: OSPF external type 1
E2: OSPF/OSPFv3 external type 2 trailing B: backup route
IPv4 Dest-Routes for <trust-vr> (12 entries)
--------------------------------------------------------------------------------------
ID IP-Prefix Interface Gateway P Pref Mtr Vsys
--------------------------------------------------------------------------------------
* 8 0.0.0.0/0 eth0/0 203.180.20.89 C 0 1 Root
* 4 192.168.127.20/32 bgroup0 0.0.0.0 H 0 0 Root
* 1 124.41.88.34/32 eth0/0 0.0.0.0 C 0 0 Root
* 2 124.41.88.34/32 eth0/0 0.0.0.0 H 0 0 Root
* 11 192.168.12.0/24 tun.1 192.168.10.142 eB 40 0 Root
* 10 192.168.10.0/24 tun.1 192.168.10.142 eB 40 0 Root
* 3 192.168.127.0/24 bgroup0 0.0.0.0 C 0 0 Root
* 6 192.168.130.0/30 tun.1 0.0.0.0 C 0 0 Root
* 7 192.168.130.1/32 tun.1 0.0.0.0 H 0 0 Root
12 192.168.130.1/32 tun.1 192.168.10.142 eB 40 0 Root
* 9 192.168.10.142/32 tun.1 0.0.0.0 S 20 1 Root
Pref欄に「eB」と表記されている行がAzureからBGPで受け取ったVNETのルーティング情報です。
オンプレミス上のLinuxからtracerouteとpingした結果です。
うまく繋がりました。
pi@raspberrypi:~ $ traceroute 192.168.12.4
traceroute to 192.168.12.4 (192.168.12.4), 30 hops max, 60 byte packets
1 192.168.127.20 (192.168.127.20) 0.701 ms 0.697 ms 0.712 ms
2 169.254.0.29 (169.254.0.29) 5.260 ms 6.261 ms 6.801 ms
3 192.168.12.4 (192.168.12.4) 9.585 ms 9.323 ms 9.059 ms
pi@raspberrypi:~ $ ping -c 3 192.168.12.4
PING 192.168.12.4 (192.168.12.4) 56(84) bytes of data.
64 bytes from 192.168.12.4: icmp_seq=1 ttl=62 time=6.23 ms
64 bytes from 192.168.12.4: icmp_seq=2 ttl=62 time=6.69 ms
64 bytes from 192.168.12.4: icmp_seq=3 ttl=62 time=6.23 ms
--- 192.168.12.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 6.232/6.388/6.697/0.218 ms
おわりに
とりあえず感はありますが、無事オンプレミスのJuniper SSG5とAzure VPN GW間でSite to Site接続がBGP有りで接続できました。
参考になれば幸いです。