オンプレミスとVPCのSiteToSiteVPN(BGP)
AWSとオンプレミスの「サイト間VPNの設定」です。証明書無しのやり方ですが・・・。オンプレ側ルーターは、シスコのASA5500 Series、手順は次の通りです。IPアドレスは、すべてIPv4アドレスです。上記画像は、VPN接続が成功している状態です。うまくいかないと上記の緑文字の2つのトンネルステータス「アップ」が赤文字で「ダウン」と表示されます。
- カスタマーゲートウェイの作成
- 仮想プライベートゲートウェイの作成
- 仮想プライベートゲートウェイのVPCアタッチ
- サイト間のVPN接続の作成
- 仮想プライベートゲートウェイのルート伝搬を有効化
- (シスコVPNルーターの)設定のダウンロード
オンプレミスとVPCのSiteToSiteVPN(BGP)について、シスコのドキュメントは 設定 ASA IPsec VTI 接続アマゾン Web サービス となります。AWSがAWと書かれていたり誤字脱字があります。
AWSの公式ドキュメントは AWS Site-to-Site VPN ユーザーガイド や 開始方法 – AWS Site-to-Site VPN となります。
事前に準備が必要な情報
- オンプレミス先のルーターのパブリックIPアドレス
- オンプレミス先のVPNルーターの正式な機種名
- オンプレミス先のVPNルーターのファームウェアバージョン
- オンプレミス先のネットワークのCIDR(Local)※0.0.0.0/0で出来ます。
- AWS VPCのネットワークのCIDR(Remote)※0.0.0.0/0で出来ます。
それでは、早速、はじめていきます。
カスタマーゲートウェイの作成
- VPCへ
- 左サードバーで「カスタマーゲートウェイ」へ
- 「カスタマーゲートウェイの作成」をクリック
- 名前を入力 EX)プロジェクト名-customer-gw
- 「ルーティング」は、「動的」を選択
- 「BGP ASN」は65000とした
- IPアドレスには、オンプレミス先のルーターのパブリックIPアドレス を入力
- 「カスタマーゲートウェイの作成」をクリック
Certificate ARN無しでやってます。
ASNは重複しない様に気を付けてください。ASN(AS番号:Autonomous System Number)は、
- グローバルASN 1~64511 (インターネット上で利用)
- プライベートASN 64512~65535 (内部で利用)
となっています。
仮想プライベートゲートウェイの作成
- VPCヘ
- 仮想プライベートゲートウェイヘ
- 「仮想プライベートゲートウェイの作成」をクリック
- 名前タグを入力 EX)プロジェクト名-vpn-gw
- 「仮想プライベートゲートウェイの作成」をクリック
仮想プライベートゲートウェイにVPCをアタッチ
- VPCヘ
- 仮想プライベートゲートウェイヘ
- 「アクション」へ
- 「VPCにアタッチ」をクリック
- アタッチするVPCを選ぶ
- 「はい、アタッチします」をクリック
サイト間のVPN接続設定
- VPCヘ
- 「サイト間のVPN接続」へ
- 「VPN接続の作成」をクリック
- 名前タグを入力 EX)プロジェクト名-sts-vpn-connection
- 「Target Gateway Type」は、「Virtual Private Gateway」を選択
- 「仮想プライベートゲートウェイ」で、「プロジェクト名-vpn-gw」を選択
- 「カスタマーゲートウェイ」は既存を選択
- 「Customer Gateway ID」は、「プロジェクト名-customer-gw」を選択
- 「ルーティングオプション」は「動的」を選択
- 「Tunnel Inside Ip Version」は「IPv4」を選択
- 「Local IPv4 Network Cidr」は、オンプレのネットワークCIDRに0.0.0.0/0を入力
- 「Remote IPv4 Network Cidr」はAWSのVPCのネットワークCIDRに0.0.0.0/0を入力
- 「VPN接続の作成」をクリック
ルートテーブルのルート伝搬設定
パブリックサブネット用とプライベートサブネット用のルートテーブルがある場合など、通信経路を考えて設定してください
- VPCへ
- ルートテーブルへ
- AWSのVPCに適用しているルートテーブルをチェック
- タブの「ルート伝搬」をクリック
- 「ルート伝達の編集」をクリック
- 「仮想プライベートゲートウェイ」の伝播にチェックを入れる
- 「保存」をクリック
セキュリティグループ設定
- VPCへ
- セキュリティグループへ
- WEBサーバーなど、該当するセキュリティグループを選ぶ
- 「インバウンドルール」⇒「インバウンドルールの編集」へ
- シスコ側ネットワークからAWSのセキュリティグループへのインバウンド HTTP、HTTPS、SSH、RDP、ICMP、DNSなど、必要に応じてプロトコル別にアクセスを許可するルール追加
- 「ルールを保存」をクリック
※プロジェクトや環境ごとに差があると思いますが、プライベートサブネットのセキュリティグループ設定を「サイト間のVPN接続」ネットワーク内のローカルなIPv4 CIDRの範囲内で必要なプロトコルによる設定などを意識するといいと思います。
設定のダウンロード
オンプレミスのシスコのルーターへの設定をダウンロードします。
- VPCへ
- 「サイト間のVPN接続」へ
- プロジェクト名-sts-vpn-connection をチェック
- 「設定のダウンロード」へ
- 「ベンダー」でCisco Systems Incを選ぶ
- 「プラットフォーム」で「ASA5500 Series」を選ぶ
- 「ソフトウェア」は、「ASA 9.7+ VTI」を選ぶ(1択になっている)
- 「ダウンロード」をクリック
ベンダー、プラットフォーム、ソフトウェアは利用するVPNルータに応じて変えてください。
ダウンロードした.txtファイルをシスコのルーターに読み込ませたり、その他にシスコにPPPoEなどの設定をしたりして「サイト間のVPN接続」を開始します。
※吐きだした設定ファイルの記載内容がすべて正しいと決めつけない様にご注意ください。
サイト間のVPN接続をVPCの画面で確認
- VPCヘ
- 「サイト間のVPN接続」ヘ
- 確認したい「サイト間のVPN接続」をチェック
- タブで「Tunnel Details」をクリック
この状態で(2つのトンネル)ステータスが緑色文字で以下の様に「アップ」になっていればVPNは成功です。
SiteToSite VPNが一定時間で切断される場合
シスコのログを見て何がおきているか?など確認してみてください。
Cisco ASA5500での自動切断回避方法ということで、原則としてAWSのVPNエンドポイント側からVPNを切断することは御座いませんとのことです。
サイト間のVPN接続できるが、名前解決できない
AWSのサイト間VPN接続について、名前解決のわかりやすい回答が、日本語でググってもあまり見当たらなかったです。名前解決のやり方について、現在、正しい方法の記事を作成中です。
ネットワークACLでVPN用の設定を以下を参考にして行ってください。CISベンチマークでは非推奨デスガ、基本的にNetwork ACLはデフォルトでいけます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Scenario3.html#nacl-rules-scenario-3
シスコからAWSへの片道通行プライベートゲートウェイではなく双方向通信のトランジットゲートウェイを使えば解消されるのか?という論点ではないです。
さらに以下のファイヤーウォール設定も確認をしてください。
Configuring a firewall between the internet and your customer gateway device
その他には、VPN接続していないときに、ルートテーブルで該当するものを確認し、送信先とターゲットが以下と同じようになっているか、確認してください。念のためにルート伝搬も有効になっているか確認してください。なお、この2つはパブリックサブネット向けのルートテーブルという想定です。
- 送信先:VPCのネットワークCIDR ターゲット:local
- 送信先:0.0.0.0/0 ターゲット:インターネットゲートウェイ(igw-)
2のインターネットゲートウェイは基本的にDMZのELB(ALB)だけパブリックサブネットにするようにしてください。他のインスタンスやELBのリソースは1だけでプライベートサブネットにしましょう。
ウェブシステムでをVPN配下で管理画面をSSLで見る/操作したいなどの場合、キャッシュなどが残りやすいので、必ず、ブラウザのシークレットウィンドウで検証する様にしてください。
サイト間のVPN接続は検証作業に時間がかかりすぎる
「サイト間のVPN接続」はデフォルト設定だと60分くらいでタイムアウトします。そのため、検証に死ぬほど時間がかかります。複数の業者さんが連携してテストして、サイト間のVPN接続がうまくいかないと、関係者全員にとって最悪の時間泥棒になります。うまくVPN接続出来ない時は、時短を強くお勧めします。
AWSの「サイト間のVPN接続」は、主に
- Phase 1 Lifetime デフォルトで28,800秒・・・IKE上のやり取りを行いお互いのIKE-SAを構築して、IPSec-SAを作成する手前までの手続きを実施
- Phase 2 Lifetime デフォルトで3,600秒・・・IPSec-SAを確立を実施して、実際の暗号化トンネルを構築
となっています。検証作業の待ち時間を短くするには、Phase 2を最小設定値15分(900秒)に変えます。Modify VPN Tunnel OptionsのSaveはmodifyに5~10分くらいかかります。トンネル2つ分なので2倍の時間をmodifyに要します。
- VPCへ
- サイト間のVPN接続へ
- 該当するVPN接続にチェック
- アクション
- Modify VPN Tunnel Options
- VPN Tunnel Outside IP AddressでTunnel1を選ぶ(このUI何とかしてほしい、最初は表示されないのでとても困った)
- Phase 2 Lifetime (seconds)に900(秒)(15分)を入力。
- Save
※操作しにくい画面ですが、2つのトンネル(Tunnel1/Tunnel2)に別々で同じ設定を行う必要があり、この作業自体にもトンネル1個につき5~10分くらいの待ち時間がかかります。
Cisco Internetwork Operating System(IOS)を使う場合
Cisco Internetwork Operating System(IOS)を使う場合は気を付けましょう。
AWSへのVPN接続におけるサンプルコンフィグの注意点:Cisco IOS編
アップの接続中にルートテーブルで、ダウンの切断時にルートテーブルで、それぞれルート伝搬が正しく行われているか?確認してください。