Oracle Cloud InfrastructureのSite-to-Site VPNをCisco 891FJで使う
Oracle Cloud InfrastructureのSite-to-Site VPN機能をCisco 891FJで使ってみた記録です。
はじめに
- 公式のサンプルは Cisco IOS のIKEv2 Configuration Templateにある通り
- ただ手元で試した限り891FJでは動かなかった
- ベンダに依存しないパラメータ一覧は Supported IPSec Parameters の通り
- configではこの一覧のrecommendedに極力沿う
前提条件
- OCIではIKEv1とIKEv2が選べるがv2を使う
- ルーティングのやりとりはBGPと静的ルーティングが選べるがBGPを使う
- ローカル側のas番号は適当に
65534
- ローカル側のas番号は適当に
- IPSecトンネル内のIPアドレスは以下の通り
- トンネル1
- OCI側
172.31.1.1/30
- ローカル側
172.31.1.2/30
- OCI側
- トンネル2
- OCI側
172.31.2.1/30
- ローカル側
172.31.2.2/30
- OCI側
- いずれもOCI側で指定する必要あり
- ネットワーキング->顧客接続性->サイト間VPN (IPSec)->(作ったVPN名)
- トンネル1/2の右側の三点リーダーから設定
- BGPのas番号もここで指定する
- トンネル1
- CPE IKE識別子タイプはfqdnを使う
- 値は
891fj.hoge.example
- これもOCI側で指定
- ネットワーキング->顧客接続性->サイト間VPN (IPSec)
- 作ったVPNの右側の三点リーダーから設定
- デフォルト値だとIPアドレスで、ローカル側はIPアドレス固定されてないため避けたかった
- 値は
IKEv2系
- Supported IPSec Parameters のPhase 1の部分
# プロポーザルの作成
crypto ikev2 proposal OCI_PROPOSAL
# 公式の Encryption algorithm
encryption aes-cbc-256
# 公式の Authentication algorithm
integrity sha384
# 公式の Diffie-Hellman group
group 20
# ポリシーの作成
crypto ikev2 policy OCI_POLICY
# 他にIKEv2を使うような通信していないのでany
match fvrf any
# プロポーザル紐づけ
proposal OCI_PROPOSAL
# IKEv2プロファイル(トンネル1本目)
crypto ikev2 profile OCI_PROFILE_TUN1
# OCI側識別子はIPアドレスを使っている
match identity remote address <VPNトンネル1のOCI側グローバルIPアドレス> 255.255.255.255
# ローカル側識別子はfqdnでやる
identity local fqdn 891fj.hoge.example
# 事前共有鍵 公式サンプルでは別途KeyRing作っていたが面倒なのでここで指定
authentication remote pre-share key <VPNトンネル1の共有シークレット>
authentication local pre-share key <VPNトンネル1の共有シークレット>
# 公式の IKE session key lifetime
lifetime 28800
# IKEv2プロファイル(トンネル2本目)
crypto ikev2 profile OCI_PROFILE_TUN2
match identity remote address <VPNトンネル2のOCI側グローバルIPアドレス> 255.255.255.255
identity local fqdn 891fj.hoge.example
authentication remote pre-share key <VPNトンネル2の共有シークレット>
authentication local pre-share key <VPNトンネル2の共有シークレット>
lifetime 28800
IPSec系
- Supported IPSec Parameters のPhase 2の部分
# 公式の Encryption algorithm
crypto ipsec transform-set OCI_IPSEC_TS esp-gcm 256
# 公式の IPSec protocol
mode tunnel
# IPSecプロファイル(トンネル1と2で同じもの使う)
crypto ipsec profile OCI_IPSEC_PROFILE
# トランスフォームセット紐づけ
set transform-set OCI_IPSEC_TS
# 公式の Perfect Forward Secrecy (PFS)
set pfs group5
# 公式の IPSec session key lifetime デフォルト値が3600なのでshow runには出ない
set security-association lifetime seconds 3600
# サンプルにあったオススメ設定達
crypto ipsec security-association replay window-size 128
crypto ipsec df-bit clear
トンネル作成
- IPSecはDialer1から繋ぐ前提
- まずはACL準備
# ACLは好みに応じて isakmpが500番 non500-isakmpが4500番のこと
# NATデバイス挟んでいないならnon500-isakmpは要らないかもしれない
ip access-list extended v4WanIn
permit esp host <VPNトンネル1のOCI側グローバルIPアドレス> any
permit udp host <VPNトンネル1のOCI側グローバルIPアドレス> eq isakmp non500-isakmp any
permit esp host <VPNトンネル2のOCI側グローバルIPアドレス> any
permit udp host <VPNトンネル2のOCI側グローバルIPアドレス> eq isakmp non500-isakmp any
# インターフェイスにACL適用
interface Dialer1
ip access-group v4WanIn in
- トンネル作成
- GREは使わずIPSec VTI(Virtual Tunnel Interface)というものを作るらしい
# トンネル作成(1本目)
interface Tunnel1
# ローカル側トンネル内IPアドレス
ip address 172.31.1.2 255.255.255.252
# どのインターフェイスからIPSec張るか
tunnel source Dialer1
# IPSec VTIを作る
tunnel mode ipsec ipv4
# IPSec対向先指定
tunnel destination <VPNトンネル1のOCI側グローバルIPアドレス>
# IKEv2プロファイルとIPSecプロファイルの指定
tunnel protection ipsec profile OCI_IPSEC_PROFILE ikev2-profile OCI_PROFILE_TUN1
# トンネル作成(2本目)
interface Tunnel2
ip address 172.31.2.2 255.255.255.252
tunnel source Dialer1
tunnel mode ipsec ipv4
tunnel destination <VPNトンネル2のOCI側グローバルIPアドレス>
tunnel protection ipsec profile OCI_IPSEC_PROFILE ikev2-profile OCI_PROFILE_TUN2
show crypto ikev2 sa
やshow crypto ipsec sa
などでいい感じになっているか見る
BGP系
- ローカル側のクライアントPCやら何やらがつながっているセグメントは
192.168.10.0/24
とする
# BGP設定
router bgp 65534
# ローカル側にある、OCIへ伝えるルート情報(maskの部分はshow runで消えているかもしれない)
network 192.168.10.0 mask 255.255.255.0
# ルート情報を伝える先 as番号は固定
neighbor 172.31.1.1 remote-as 31898
neighbor 172.31.2.1 remote-as 31898
show ip bgp
とかでいい感じになっているか見る
おわりに
- 中身を理解せず公式サンプルconfigコピペしたら全力でハマったので辛さあった