AWS Client VPN に Android 端末から接続する

2019.05.29

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

こんにちは、菊池です。

AWS Client VPNを色々と触ってます。今回は、AndroidスマホのクライアントからのVPN接続を試してみました。

AndroidからのOpenVPN接続

Client VPNのエンドポイントは、以下の記事で設定したActive Directory認証の環境を利用しました。

[AWS] Windows から Active Directory 認証を使って AWS Client VPN に接続する

クライアント側は、Android向けのOpenVPNクライアントアプリである、OpenVPN Connectを利用しました。Google Playからインストール可能です。

インストールしたらアプリを起動します。あらかじめダウンロードしておいたプロファイルを使って接続したいので、[OVPN Prifile] を選択します。

ファイルへのアクセス許可を求められますので、許可します。

プロファイルを選択して、[IMPORT]します。

ユーザー名、パスワードを入力します。Active Directory認証なので、ADのユーザーの情報を入れ、[ADD]。

準備ができたら接続します。

許可を求められるので、OKを選択しました。

クライアント証明書がないと表示されますが、今回はAD認証なのでそのまま続行します。

ここで問題なければVPN接続が確立するはずですが、いつまでも接続できない問題が発生しました

ログを確認したところ、DNS resolve errorとありました。Client VPNの [エンドポイント名].prod.clientvpn.ap-northeast-1.amazonaws.com に接続しようとして名前解決ができていないようです。AWS Client VPNのドキュメントによると、以下のようにあります。

デフォルトでは、OpenVPN クライアント設定の -remote-random-hostname オプションは、ワイルドカード DNS を有効にします。ワイルドカード DNS が有効なため、クライアントは、エンドポイントの IP アドレスをキャッシュしません。そのため、エンドポイントの DNS 名を ping することはできません。

接続先のエンドポイントとしては、*.[エンドポイント名].prod.clientvpn.ap-northeast-1.amazonaws.comでIPを取得できますが、一方でダウンロードしたクライアント設定プロファイルは以下のようになっていました。

client
dev tun
proto udp
remote cvpn-endpoint-xxxxxxxxxxxxxxxxx.prod.clientvpn.ap-northeast-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----

</ca>
auth-user-pass
reneg-sec 0

remote-random-hostnameのオプションがあるにも関わらず、そのままremoteに記載のFQDNに接続しようとして名前解決できていないようです。そこで、プロファイルを修正して、接続先に適当なホスト部を追記しました。

client
dev tun
proto udp
remote foo.cvpn-endpoint-xxxxxxxxxxxxxxxxx.prod.clientvpn.ap-northeast-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----

</ca>
auth-user-pass
reneg-sec 0

これで再度インポートして試したところ、接続することができました!

接続ログはこんな感じに出ています。

コンソールからも、接続状態が確認できます。

最後に

ちょっとハマりましたが、AndroidからのClientVPNを試すことができました。スマホやタブレットからもVPC内のリソースにアクセスが可能になります。接続トラブルについては、クライアントの挙動による部分だとは思いますが、解決方法が微妙な気がしますので引き続き調査していきたいと思います。