[AWS Client VPN] VPC を経由して固定のIPでインターネットへアクセスする

2019.05.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。

個人的にホットなAWS Client VPNを掘り下げるシリーズです。前回のエントリで、AWS Client VPNを使って、VPCを経由してインターネットへアクセスする方法を紹介しました。

AWS Client VPN で VPC を経由してインターネットへアクセスする

この検証で、Client VPNを接続すると、VPC内にパブリックIPを持ったネットワークインタフェース(ENI)が作成され、それがSource NATすることでVPC外にアクセスできることがわかりました。

ただ、この構成では、接続毎にENIが作成されるため、接続のたびにIPが動的に変わりますし、複数のクライアントがある場合にはそれぞれ異なるパブリックIPで外部にアクセスすることになります。

そこで今回は、常に固定のパブリックIPでインターネットにアクセスする方法を検証します。そうすることで、常に同じパブリックIPでアクセスしますので、IP制限された環境などにも対応が可能です。

接続構成

構成イメージは以下のようになります。

Client VPNエンドポイントには、プライベートサブネットを関連付けます。一方で、パブリックサブネットにはNAT Gatewayを作成しておき、プライベートサブネットのルートテーブルで、インターネットむけの通信がNAT Gatewayを経由するように制御します。そうすることで、インターネットに出て行く通信のSource IPは、接続クライアントに関わらず、常にNAT Gatewayに割り当てた Elasitc IP(EIP)に固定されます。

環境設定

大まかな手順は以下の通りです。

  1. パブリックサブネットにNAT Gatewayを作成
  2. プライベートサブネットのルートテーブルを設定
  3. Client VPN エンドポイントにプライベートサブネットを関連付け
  4. Client VPN エンドポイントのルートテーブル、認証ルールを設定

まずは、パブリックサブネットにNAT Gatewayを作成します。ここで割り当てられたElastic IPが、インターネットにアクセスするSource IPになります。

続いて、プライベートサブネットの作成です。プライベートサブネットとは、Internet Gatewayへの直接の経路を持たないサブネットのことを言います。専用のルートテーブルを作成し、宛先0.0.0.0/0へのターゲットを先ほど作成したNAT Gatewayに設定します。プライベートサブネットに設定するサブネットに、そのルートテーブルを割り当てます。

続いて、Client VPN エンドポイントの設定です。エンドポイントの作成そのものは割愛しますので、過去のエントリを参照してください。関連づけるサブネットに、先ほどのプライベートサブネットを指定しています。

Client VPN エンドポイントのルートテーブルに、宛先0.0.0.0/0を設定し、ターゲットサブネットには同様にプライベートサブネットを選びます。

認証ルールの設定です。ルートテーブルと同様に、宛先0.0.0.0/0を追加して許可してあげます。

以上で環境の準備は完了です。

接続確認

それではVPNに接続してみます。接続はこれまでの検証と同様、WindowsのOpenVPNクライアントで実施しています。接続できたら念のため、VPNのネットワークインタフェースを確認しておきます。

それでは、接続元のIPアドレスがどうなっているか、CMANでアクセスしてるIPアドレスを確認します。

NAT Gatewayに割り当てのElastic IPと一致していることが確認できました。

まとめ

AWS Client VPNを使って、固定のパブリックIPでインターネットにアクセスすることができました。IP制限された環境を利用するために、VPNサーバや踏み台を利用している場合には、このサービス・構成を利用することでマネージドサービスに置き換えが可能になります。

AWS Client VPNには、まだまだ活用の幅がありそうなので、どんどん検証していきたいと思います。