Direct Connect 未接続のVPCからオンプレターゲットへの通信を行う(NLB 活用パターン)

Direct Connect 未接続のVPCから、オンプレミスの特定ターゲットへの接続を実現する方法を書きます。今回は Network Load Balancer を活用します。
2022.03.09

DX未接続のVPCからオンプレへの通信を行いたい

共有型 Direct Connect(DX) を使っている環境で、 source(オンプレへの経路無し) から target(オンプレ) へ接続したいケースを考えます。

img

※ このようなケースを考える理由は「共有型DXの制約」です。 共有型DXで利用できる仮想インターフェイスは Private VIF のみです。 Private VIF と Direct Connect Gateway(DXGW) を利用した場合、 「接続できるVPCの数」は 10個まで です (参考: AWS再入門ブログリレー AWS Direct Connect 編 #Private VIF | DevelopersIO)。 マルチアカウント環境など、VPCが増え続ける環境では この制約がネックになってきます。 この制約を守りながらオンプレとの通信を行う工夫が必要になってきます。

Network Load Balancer を活用する

img

今回は Network Load Balancer(NLB) を使ってこの要件を解決します。 NLBは TCP/UDP に対応しているロードバランサーです。 低いレイテンシーを維持しながら 大量のリクエストの処理を行うことができます。 また、「固定IPアドレス対応」や「AWS PrivateLink と連携した独自エンドポイント作成」なども特徴です。

ネットワーク構成図について、以下 2点がポイントです。

  • ① NLBと 通信できるようにします 。 図では VPC Peering を使っていますが、 ネットワーク到達可能であればOKです。Transit Gateway ※ でも構いません。
  • ② NLB のターゲット(IPアドレス)にオンプレサーバーを指定します 。 HTTP/HTTPS であれば Application Load Balancer(ALB) でも構いません。

※ 以下 Transit Gateway 環境の場合のイメージです

img

なお、本ブログは以下の素晴らしい AWSブログを大いに参考にしています。 詳細や他手段についてはこちらを参照ください。

構築してみる

DXGW接続の検証環境が無いので、以下のようにオンプレ環境を模した環境を想定します。 (この部分の構築は割愛します)

img

ここから NLBを作成して source から target へのアクセス (今回は HTTP) を実現します。

ターゲットグループを作成する

NLBのターゲットグループ を事前に作成します。 [EC2 > ターゲットグループ] から [ターゲットグループの作成] を選択します。

img

ターゲットタイプは [IPアドレス] とします。

img

以下基本的な設定のパラメータを埋めます。

  • ターゲットグループ名: 適当に入力(例 onprem-server-tg )
  • プロトコル: TCP
  • ポート: 80
  • IPアドレスタイプ: IPv4
  • VPC: DX用VPC

img

ヘルスチェックはデフォルトの設定で [次へ] を選択します。

「ターゲットの登録」 にて ネットワークを [その他のプライベートIPアドレス] 、 アベイラビリティーゾーンを [すべて] にします。 IPアドレスに ターゲットのIPアドレス を入力します。 [保留中として以下を含める] を選択します。

img

以下のように 「ターゲットの確認」に表示されていれば OKです。

img

[ターゲットグループの作成] を選択して完了です。

NLBを作成する

[EC2 > ロードバランサー] から [ロードバランサーの作成] を選択します。

img

ロードバランサーのタイプは [Network Load Balancer] を選択します。

img

以下基本的な設定のパラメータを埋めます。

  • ロードバランサー名: 適当に入力(例 onprem-server-nlb )
  • スキーム: 内部
  • IPアドレスタイプ: IPv4

img

ネットワークマッピング設定の 「VPC」は DX用VPC を選択します。 サブネットも指定します。

img

  • ※1: 今回は Single-AZ の設定です
  • ※2: プライベート IPv4アドレス の設定欄で固定IP化も可能です

リスナーとルーティングは以下のように設定します。

  • プロトコル: TCP
  • ポート: 80
  • デフォルトアクション > 転送先: 先ほど作成したターゲットグループ

img

設定を確認して [ロードバランサーの作成] を選択します。

img

状態が Active になれば完了です。

接続確認

img

source 用に立てたインスタンスから接続できるか確かめてみます。 事前に NLBのDNS名 (xxx).elb.ap-northeast-1.amazonaws.com をメモしておきましょう。

SSM Session Manager から curl http://${nlb_address}/index.html を実行。 ターゲットに配置していたWebサーバからの応答が返ってきました。

img

(補足) DNS周りの追加設定

アクセスしやすくするために、NLBをターゲットにした Route 53 エイリアスレコードを作成しておきましょう。

以下パブリックホストゾーンで対応したときのイメージです。

img

プライベートホストゾーンで対応する場合は VPCとの関連付け作業が必要です。

img

※VPCが別アカウントの場合は CLI/SDK を使って共有する必要がある点に注意

おわりに

NLBを使って DX未接続のVPCからオンプレターゲットへの通信を行ってみました。 本パターンは以下を満たす場合に活用できるでしょう。

  • (前提) 共有型 Direct Connect である
  • VPC間通信の環境(TGW もしくは VPC Peering)を実現する必要がある
  • オンプレ/VPC環境にて CIDR 重複を排除した設計/運用ができる

参考リンクにこのブログのベースになった AWSブログのリンクと、類似した DevelopersIOブログ を記載しています。

参考