AWS Client VPN に Android 端末から接続する
こんにちは、菊池です。
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内のリソースにアクセスが可能になります。接続トラブルについては、クライアントの挙動による部分だとは思いますが、解決方法が微妙な気がしますので引き続き調査していきたいと思います。