1. はじめに
- 先日、「DirectConnectに直結していないVPCからオンプレサーバへアクセスする」という記事にて、VPCからオンプレサーバ方向の通信(VPC-A内のOriginサーバ -> VPC-B -> DirectConnect -> オンプレのTargetサーバ)を実現する検証を行った。
- 追加の要件として、逆方向となるオンプレサーバからVPCへの通信(オンプレのOriginサーバ -> DirectConnect -> VPC1 -> VPC2(Targetサーバ)が発生したため、改めて構成を検証した。
- 検討した構成は全て実機検証しているが、今回の記事は考え方をまとめるもので、具体的な手順のキャプチャなどは記載しない。
- もしかしたらよりよい接続方法などあるかもしれない。。
2. 今回のネットワーク要件
- VPC-Aに接続されているVGWがDXGWに接続されている。
- オンプレに存在するOriginサーバから、DX及びVPC-Aを経由し、VPC-B内のTargetサーバにhttpアクセスしたい。(DXGWと直結しているVPC-AはCIDRが小さく、そこにはTargetサーバを立てられない、という制約あり)
- VPC-BのCIDRをDX網側に広報できない。(VPC-Bと重複するCIDRがDX網に接続されている別拠点に既に存在する、という制約あり)
- DXはホスト型であるため、TransitVifなどは使用できない。
3. 構成検討
- NLB及びPrivateLinkを用いて上記の要件を実現した(他の構成は思いつかず)。
設定内容
- VPC-B内にInternal NLBを作成。
- NLBのIPは10.20.0.218。
- TARGETのnginxインスタンス(10.20.0.196)のみを含むTargetGroupを作成しNLBに設定。
- Privatelinkを作成。
- VPC-B内にInternal NLBに紐づくEndpoint Serviceを作成。
- VPC-A内に上記のEndpoint Serviceと接続するEndpointを作成。EndpointのIPは10.10.0.11。
- VPC-AのSubnet(10.10.0.0/24)には dst: 10.0.0.0/24 target: VGW のRouteTableがある状態。
確認内容
- オンプレにあるOriginサーバから「curl 10.10.0.11」で、VPC Endpointを宛先とし、Privatelink及びNLBを経由して、Target(10.20.0.196)のnginxにhttpアクセスできることを確認。
- Targetのnginxのaccesslogで、アクセス元IPがNLBのIP(10.20.0.218)になっていることを確認。
- 留意点として、Privatelink経由でのNLBへのアクセスの場合、TargetGroupにおける「クライアントIPアドレスの保持」設定のON/OFFに関わらず、全てTargetサーバから見るとアクセス元IPはNLBのIPになり、OriginサーバのIPを判別することはできない。詳しくはこちらの記事「Network Load Balancer (NLB) のソースIPアドレスに思いを馳せてみた」を参照。