はじめに
閲覧ありがとうございます、NTTデータ先端技術の@S-takahashi1129です。
ClientVPNエンドポイントにプロキシサーバ経由で接続しようとした際、自分が詰まってしまった部分について、書き留めておきます。
なお、環境によっては必ずしも今回記載した設定が必要とは限りませんのでご了承ください。
クライアントソフトとしてAWS VPN Clientの利用はしない
クライアント側がClientVPNエンドポイントにアクセスする際の選択肢はいくつかありますが、AWS公式が提供しているAWS VPN Clientはプロキシを経由する際は避けるのが無難です。プロキシ用の設定をした際に設定ファイルがエラーで弾かれる場合があります。
公式ドキュメントでも案内されている、OpenVPNのクライアントアプリを利用することをオススメします。
easy-rsaによる証明書発行はFQDNを指定する
AWSの公式ドキュメントや、ネット上のClientVPNの利用方法を解説している記事の通りに手順を進めると、認証局を作成したあとにサーバー証明書及びクライアント証明書を作成するのが一般的かと思います。
$ ./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
しかし、このように証明書を作成しACMに登録した場合、ClientVPNエンドポイント作成の際にACMから証明書を選択するドロップダウンに、作成した証明書が表示されないこと場合があります。
その際は、証明書を発行する際に、FQDNを指定することで解決する可能性があります。
./easyrsa build-server-full vpn.example.com nopass
./easyrsa build-client-full client.example.com nopass
ClientVPNエンドポイントのプロトコルをTCPにする
プロキシを利用する際は、ClientVPNエンドポイントを作成する際のトランスポートプロトコルの設定で、TCPを設定する必要があります。
こちらの設定はエンドポイント作成後の変更ができないため、ご注意ください。
設定ファイルにプロキシの設定を追記する
ClientVPNのコンソール画面からダウンロードしたクライアント設定ファイルは、プロキシ経由でVPN接続する場合追記を行う必要があります。
ダウンロードした設定ファイルの冒頭に、次のようにプロキシの設定を追加します。
http-proxy <Proxy-ip> <port> stdin basic
client
dev tun
proto TCP
http-proxy 123.123.123.123 555 stdin basic
remote cvpn-endpoint-0011abcabcabcabc1.prod.clientvpn.eu-west-2.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3
設定ファイルでDNS名を変更し、名前解決のエラーを解決する
ClientVPNのコンソール画面からダウンロードしたクライアント設定ファイルは、デフォルトのまま使うと名前解決が成功しない場合があります。
DNS名を指定する行を以下のように修正します。
remote cvpn-endpoint-0011abcabcabcabc1.prod.clientvpn.eu-west-2.amazonaws.com 443
DNS名の前に"asdfa."(ランダムな文字列)という文字列を追加します。
remote asdfa.cvpn-endpoint-0011abcabcabcabc1.prod.clientvpn.eu-west-2.amazonaws.com 443
こちらは利用しているクライアントソフトによって対応要否が分かれます。
DNS名の解決ができない要因としては、ClientVPN設定ファイルには、DNS キャッシュを防止するためにクライアントがDNS名の前にランダム文字列を追加するよう強制するプロパティが存在しますが、一部のクライアントではこれが適用されず、必要なランダム文字列がDNS名の前に追加されないことで、結果的にDNS名の解決がエラーとなってしまうようです。
そこで、手動でランダムな文字列を追加することで名前解決可能にする必要があります。
公式ドキュメントの記載が参考になります。
AWS公式ドキュメント(トラブルシューティング AWS Client VPN: クライアント VPN エンドポイント DNS 名を解決できません)
おわりに
DNS名解決の部分は公式ドキュメントでもなかなか気づきにくい部分に記載がありますので特によく詰まるポイントになるかと思います。
以上、閲覧ありがとうございました。