オンプレ(自宅)からAWS Site-to-Site VPN! NAT越え、双方向名前解決、フェイルオーバーまで

2.9K Views

February 28, 25

スライド概要

2025年2月28日に開催した社内イベント「AWSランチセッション第3回」の発表資料です。

AWS Site-to-Site VPNの基本から、よく用いられる構成まで分かりやすく解説しています。
実機で検証を行い、最終的にルーターの電源プラグを抜いてフェイルオーバー時の経路切替を観察します。

profile-image

SFとコンピュータが好き

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2025-02-28 AWSランチセッション 第3回 オンプレ(自宅)からAWS Site-to-Site VPN! NAT越え、双方向名前解決、フェイルオーバーまで 山崎 拓也

2.

山崎 拓也 所属: SIer 仕事: • システム開発など • アプリとAWSインフラ両方 好き: 低レイヤ、SF、AWS AWS関連: • 2024 Japan AWS Top Engineer • 2022~2024 Japan AWS All Certifications Engineer

3.

仕事では触らないけどネットワークも大好き • 国家資格 IPA ネットワークスペシャリスト保有 • パケットアナライザやルーターのプログラム作成 • 本も結構読む • 手を動かすのが好き 思い出の本 HA構成の Kubernetesクラスタ 初任給で買った思い出の Ciscoルーターとスイッチ SFP+の10Gルーター

4.

今回使用するもの • Cisco 1812J ルーター 2個 • L2スイッチ 2個 • ルーター 2個 +

5.

完成図

6.

完成図 VPNトンネル

7.

アジェンダ • NAT越えAWS Site-to-Site VPNのポイント • オンプレとAWSの双方向名前解決のポイント • フェイルオーバーのポイント ルーターの電源プラグを抜きます!

8.

NAT越えAWS Site-to-Site VPNのポイント

9.

AWS Site-to-Site VPNとは • データセンターやオフィスをAWSとVPN接続するサービス • 1つのVPN接続でIPsecトンネルが2つ作成される(青い太線)

10.

オンプレ(自宅)側ネットワーク • VPNゲートウェイ 1812Jの前にNATがある • サーバーとDNSサーバーがひとつずつ

11.

(補足) VPN接続前のルートテーブル(1812J)

12.

(補足)作業用ネットワークは192.168.88.0/24 作業用PC ルーターやAWSの 操作はここから

13.

AWS側ネットワーク • VPCが1つ。以下有効化済み • DNS解決 • DNSホスト名 • Private subnetが2つ • EC2が2つ

14.

今回はNATを越えてVPN接続を行う 経路上にNAT

15.

AWS Site-to-Site VPNに必要なリソース リソース 説明 ❶ カスタマーゲートウェイ(CGW) CGWデバイスの情報をVPN接続に伝える論理的なリソース ❷ 仮想プライベートゲートウェイ(VGW) VPCの出入り口となる ❸ VPN接続 VPNトンネルを作る ❹ CGWデバイス VPNに使用するオンプレのルーター ❶ ❸ ❹ ❷

16.

AWS Site-to-Site VPN構築の流れ AWSリソース作成 設定ファイル ダウンロード CGWデバイス設定 • CGW • VGW • VPN接続 AWSからCGWデバ イスの設定ファイ ルをダウンロード 設定ファイルをも とにCGWデバイス を設定 AWS側 ルート伝播設定 VPCでルート伝播 を有効化

17.

NAT越えのポイント: CGWの設定 • CGWデバイスのIPアドレスではなく、NATの外側IPアドレスを使用する • 経路上のUDP4500番ポート(NAT-T)が開いていることを確認する UDP 4500 開ける https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/cgw-options.html

18.

(補足) VGWの作成 • 通常通り作成 • VPCへのアタッチは作成後に行える デフォルトANSは64512

19.

(補足) VPN接続の作成 • 通常通り作成 • 作成したCGWとVGWを選択

20.

(補足) CGWデバイス設定前なのでトンネルはダウンしている

21.

VPN接続からCGWデバイス用の設定ファイルをダウンロード CGWデバイスに近いものを選択 あくまでもサンプル設定

22.

ダウンロードした設定ファイルの構成 • 前後半でトンネル2つ分の設定 • 環境やデバイスによって手動で設定変更が必要 IPSec設定 トンネル1 の設定 I/F設定 BGP設定 … トンネル2 の設定

23.

NAT越えのポイント: CGWデバイス設定 • 設定ファイルはCGWをもとに作成されているため、VPN用のI/Fアドレス がNATの外側IPアドレスになっている • CGWデバイスの外側IPアドレスに変更する CGWデバイスのIP 「192.168.1.40」へ変更 …

24.

他の設定部分もデバイスや環境に応じて変更 シンタックスの違いを修正 crypto isakmp keepalive 10 10 デフォルトルートは伝えない オンプレのアドレスをアドバタイズ network 10.1.0.0 mask 255.255.0.0 network 10.2.0.0 mask 255.255.0.0 へ変更

25.

CGWデバイスの設定が完了するとVPNトンネルが開通する 10.1.0.0/16 10.2.0.0/16

26.

VPN接続後のルートテーブルとBGP経路(1812J) • 優先パスが静的に定義されてる 下が優先パス VPCへのルート VPNトンネル

27.

VPCサブネットのルートテーブルでルート伝播を有効化する オンプレのルートが伝播する

28.

NAT越えAWS Site-to-Site VPN 完成

29.

オンプレサーバーからEC2へping

30.

EC2からオンプレへping

31.

(補足)残りの経路に関するping オンプレDNSサーバーからEC2 もうひとつのEC2からオンプレ

32.

AWS側の理由でトンネルが片方切れるとメールが来る “このメッセージは、2 つのトンネル エンドポイントのうちの 1 つ (トンネル外部 IP: 52.197.233.127) が置き換えられたため、ap-northeast-1 リージョンの VPN 接続 vpn-xxx の冗長性が一時的に失われたために表示されています。この間、2 番目のトンネルの接続 は影響を受けませんでした。現在、両方のトンネルは正常に動作しています。”

33.

NAT越えAWS Site-to-Site VPNのポイントまとめ • CGWの作成にはNATの外側IPアドレスを使用する • 経路上のUDP4500番ポート (NAT-T) が開いていることを確認する • ダウンロードしたCGW用設定ファイルについて、local-addressをCGWデ バイスのVPN用I/FのIPアドレスに変更する

34.

オンプレとAWSの双方向名前解決のポイント

35.

どんなときに必要なのか(例) • EC2をオンプレのADにドメイン参加させる • オンプレからAWS上のプライベートドメインのサービスにアクセスする

36.

今回のホストゾーンとレコード A A jitaku.internal vpc.private 10.0.137.130 10.1.0.3

37.

双方向名前解決のポイント • Route53 Resolverエンドポイントを作成 • 条件付きフォワードの設定 オンプレ → AWS は インバウンドエンドポイント AWS → オンプレ は アウトバウンドエンドポイント

38.

AWSからオンプレへ条件付きフォワード • Resolverルールを作成 オンプレのドメイン オンプレのDNSリゾルバへ転送

39.

EC2からオンプレ側ドメインを名前解決 Route53 Resolver

40.

オンプレからAWSへ条件付きフォワード • オンプレ側DNSサーバーで設定 BINDの設定 ドメイン「vpc.private」は インバウンドエンドポイントへフォワード

41.

オンプレサーバーからAWS側ドメインを名前解決 オンプレDNSサーバー

42.

Site-to-Site VPNと双方向名前解決の全体図

43.

オンプレとAWSの双方向名前解決のポイントまとめ • Route53 Resolverエンドポイントを使用する • 条件付きフォワードを設定する

44.

フェイルオーバーのポイント

45.

CGWデバイスの障害に備えてバックアップ用VPN接続を作る

46.

全く同じCGWは作ることができない点に注意 • 本来は同じASN、異なるパブリックIPの組で構成する • 今回はパブリックIPが1つしかないため、ASNを変更して検証を行う • パブリックIPが2つある場合とフェイルオーバーの動作は変わらない 本来はIPが2つ 今回はASNが2つ

47.

CGWとVPN接続を追加作成し、既存VGWに関連付ける • オンプレ側のルーターも追加する VGWは1つ

48.

トンネルは4本になる

49.

BGPで使用可能なパスを選択するようにルーティングを設定する • 今回は緑の経路を優先し、青をバックアップとする • 非対称ルーティングにならないようオンプレとAWSの両方で経路制御する

50.

オンプレの経路制御にはHSRPを使う(Hot Standby Router Protocol) • HSRPはCiscoルーターを冗長化するための独自プロトコル 障害時に自動的に別のルーターに切り替わる 仮想IPは通常Router1 に割り当てられてる Router1がダウンすると仮想IPが Router2に割り当てられる

51.

HSRPの設定

52.

デフォルト設定のためHSRPは最短13秒でフェイルオーバー

53.

(補足)バックアップ用VPN接続の作成

54.

AWS側ルーターは直接設定変更できないためAS Pathを使用する • 青のAS Pathを長く設定することで緑を優先するようにする • AWS Direct Connectの場合はAWS側が用意しているBGPコミュニティで 優先度を設定できるが、Site-to-Site VPNではできない AS Pathを長く設定

55.

Router2でAS Pathを設定 今回は最短30秒で フェイルオーバー

56.

EC2からのトラフィックは緑を通る

57.

試しにRouter1のAS Pathを長くしてみる

58.

今度はEC2からのトラフィックが青を通る

59.

(補足) Router1, 2のBGP経路とルートテーブル

60.

全体図

61.

フェイルオーバーをテスト 1. オンプレとAWS双方からtracerouteを実行し続ける 2. ルーター1の電源プラグを抜く 3. ルーター2がHSRPのActiveになり、VPN接続がバックアップへ切り替わる

62.

フェイルオーバーをテスト 1. オンプレとAWS双方からtracerouteを実行し続ける 2. ルーター1の電源プラグを抜く 3. ルーター2がHSRPのActiveになり、VPN接続がバックアップへ切り替わる

63.

1. オンプレとAWS双方からtraceroute $ while :; do date; traceroute -m 4 jitaku.internal; sleep 1; done 無限ループ 日時表示 1回分の出力例 経路確認 1秒待機

64.

2. ルーター1の電源プラグを抜く !

65.

3. ルーター2がHSRPのActiveになり、VPN接続がバックアップへ切 り替わる ※ルーターの時計は間違ってます

66.

切り替わる瞬間: オンプレServer → EC2 への経路 ❶Router1を通っている ❷DNSサーバーに 繋がらなくなる ❸Router2に切り替わり 約28秒 ❹バックアップへ 切り替え完了

67.

切り替わる瞬間: EC2 → オンプレServer の経路 ❶VPN接続1を通ってる ❷オンプレServerに 繋がらなくなる ❸このあたりで オンプレがRouter2に 切り替わった ❹バックアップ接続へ 切り替え完了 約30秒

68.

(補足)残りの経路の切り替わる瞬間 オンプレDNS もうひとつのEC2

69.

フェイルオーバーのポイントまとめ • 全く同じCGWは作ることができない • バックアップ用のCGWとVPN接続を作成し、既存VGWに関連付ける • BGPで使用可能なパスを選択するようにルーティングを設定する

70.

ご清聴ありがとうございました。