OpenVPN Access ServerでリモートアクセスVPNをブラウザで簡単設定してみた(Mac OSX編)

openvpn-logo

こんにちわ。
主題歌といえば、two-mixのJust Communicationが好きなガノタ市田です。
今回は、OpenVPN Access Server(以下、OpenVPN-ASと表記)についてです。

OpenVPN Access Serverとは

概要

一言で言うと、設定用のWebインタフェースがあるOpenVPN のことです。

OpenVPNでリモートアクセスVPNを設定する方法はよくある話ですが、証明書の作成やらユーザ管理やらと、結構めんどくさい作業が多いです。
そこで、ユーザ管理や各種設定をブラウザでできてしまうウェブインタフェースである「OpenVPN Access Server」 を試してみたというのが今回の内容になります。

OpenVPN-ASは様々な機能を持っていますが、今回はリモートアクセスVPNで、プライベートな環境のWebサーバにアクセスしてみたいと思います。

構成図

手順

  • AWS MarketplaceからOpenVPN-ASのインスタンスを作成
  • Elastic IPの設定
  • 初期設定
  • ユーザ設定
  • 管理画面ポート設定の変更
  • セキュリティグループ設定
  • ルートテーブル設定
  • 送信元/送信先の変更チェックを無効にする
  • ウェブサーバの設定
  • MacからVPN接続

それでは見ていきたいと思います。

OpenVPN-ASのインスタンスの作成

OpenVPN-ASは、Marketplaceでライセンス込みとBYOLの2種類が用意されています。
ライセンス込みのものは、最小で10デバイスのものになります。今回はこの「10デバイスライセンス」のものを使用します。

marketplace

インスタンスは「t2.micro」で作りました。
試しに使う分には、t2.microで十分軽快に動きました。

OpenVPN-ASのAMI一覧は下記で確認できます。

AWS Marketplace: OpenVPN Technologies, Inc. products for sale on AWS Marketplace._

Elastic IPの設定

OpenVPN-ASのインスタンスが作成できたらElastic IPを設定しておきます。

初期設定

初期設定の実施

初期設定のみコマンドラインで行います。
SSHでアクセスすると、自動的に対話的に設定するプログラムが起動して、質問に答えていくだけで完了します。
設定内容は後から、ブラウザで変更可能です。

SSHログインすると自動的に、下記のようなメッセージが流れます。

ssh -i [EC2の秘密鍵] openvpnas@[EC2のPublic DNS or EIP]
The authenticity of host 'X.X.X.X (X.X.X.X)' can't be established.
ECDSA key fingerprint is SHA256:8xvZPE62LT4oz6owjo0cjpZvciC6Gcqtqxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'X.X.X.X' (ECDSA) to the list of known hosts.
Welcome to OpenVPN Access Server Appliance 2.1.3

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

user-data not available: HTTP Error 404: Not Found: util/ec2:12,util/ec2:7,python2.7/urllib2:154,python2.7/urllib2:437,python2.7/urllib2:550,python2.7/urllib2:475,python2.7/urllib2:409,python2.7/urllib2:558 (urllib2.HTTPError)

          OpenVPN Access Server
          Initial Configuration Tool
------------------------------------------------------
OpenVPN Access Server End User License Agreement (OpenVPN-AS EULA)

    1. Copyright Notice: OpenVPN Access Server License;
       Copyright (c) 2009-2013 OpenVPN Technologies, Inc.. All rights reserved.
       "OpenVPN" is a trademark of OpenVPN Technologies, Inc.
    2. Redistribution of OpenVPN Access Server binary forms and related documents,
       are permitted provided that redistributions of OpenVPN Access Server binary
       forms and related documents reproduce the above copyright notice as well as
       a complete copy of this EULA.

   (中略)

   credits or price adjustments toward any licenses that have already been
   issued. Furthermore, no discounts will be given for license maintenance
   renewals unless this is specified in your contract with OpenVPN
   Technologies, Inc.

Please enter 'yes' to indicate your agreement [no]:

最初の質問は、利用規約の同意に関するものなので、yes を入力します。

Please enter 'yes' to indicate your agreement [no]:yes

2つ目の質問は、このOpenVPN-ASがプライマリーノードかどうかを聞いてきます。
OpenVPN-ASは冗長化させて異常時にフェイルオーバーさせることもできるようで、その為の設定になります。

今回は、シングル構成なのでデフォルトのままEnterで構いません。

Will this be the primary Access Server node?
(enter 'no' to configure as a backup or standby node)
> Press ENTER for default [yes]:Enter

後は基本的にデフォルト設定で構わないと思いますので、全てEnterで答えます。 すると、次のようなログインに関する情報が出力されます。

https://[Elastic IP]:943/admin
Login as "openvpn" with the same password used to authenticate
to this UNIX host.

During normal operation, OpenVPN AS can be accessed via these URLs:
Admin  UI: https://[Elastic IP]:943/admin
Client UI: https://[Elastic IP]:943/

上記の意味は、次の通りです。

  • admin権限である「openvpn」 ユーザのパスワードはUNIXホストと同様の方法で設定します。
  • admin用のページのURLは「https://[Elastic IP]:943/admin」 です。
  • クライアント用のページのURLは「https://[Elastic IP]:943」 です。

Admin権限のパスワード設定

Admin権限の「openvpn」 のパスワードはpasswdコマンドで設定します。先程ログインしたのと同じようにSSHログインして作業します。

$ sudo passwd openvpn

タイムゾーン設定

タイムゾーン設定はオプション設定です。
デフォルトではUTCになっているので、日本時間に変更しておきます。

これもコマンドラインからの設定になります。

$ sudo dpkg-reconfigure tzdata

実行すると下記のようなダイアログ画面になるので、上下キーでAsiaを選択します。
選択できたら「tabキー」でカーソルを「OK」に合わせてEnterします。

タイムゾーン1

次に「Tokyo」を選択して同じようにOKを押して完了です。

タイムゾーン2

すると下記のようにもとに戻るので、タイムゾーンの変更を確認できます。

Current default time zone: 'Asia/Tokyo'
Local time is now:      Mon Sep 26 16:34:30 JST 2016.
Universal Time is now:  Mon Sep 26 07:34:30 UTC 2016.

$ date
Mon Sep 26 16:34:38 JST 2016

OSアップデート

OpenVPN-ASはUbuntuをベースにしているので、インストールされている各種パッケージを最新状態にしておきます。

$ sudo apt-get update && sudo apt-get upgrade

コマンドラインでの作業は以上になります。 以後の作業はブラウザで管理ページから行います。

Admin用画面へのログイン

いよいよ管理画面にアクセスしてみます。 URLは初期設定の時に出た「https://[Elastic IP]:943/admin」 になります。

URLはHTTPSですが証明書がインストールされていないので下記のような警告が出ます。問題ないので「xxxxxにアクセスする」をクリックします。
下記はchromeの場合の画面です。firefoxなど他のブラウザを利用の場合は、ブラウザ毎に異なる表示になります。

警告

次の画面で先程設定した、openvpnユーザのパスワードを入力してログインします。

Adminログイン

初回アクセス時は下記のような利用許諾契約の画面がでるので「Agree」 をクリックしてログインします。

agree

ユーザ設定

ログインできたら「User Management」 メニューの「User Permissions」 をクリックします。

User1

次に「More Settings」の「Show」 をクリックして設定の詳細画面を表示します。

Usershow

詳細画面でユーザ名とパスワードを設定します。今回は「cm-user1」 というユーザを作成します。
ここまでできたら下部の「Save Settings」 をクリックして保存します。

usersave

次の画面で「Update Running Server」 をクリックして、サーバに設定を反映します。

User3

管理画面ポート番号の変更

初期設定で見たようにOpenVPN-ASは、デフォルトで943ポートでAdmin用とClient用の管理画面の両方を提供しています。 また、443ポートでもAdmin用とClient用の管理画面にアクセスすることができます。
その為、セキュリティ上の観点からそれぞれのポートを分けておくことにします。

今回は、943ポートをAdminの管理画面用にして、10443ポートをClientの管理画面用に設定しようと思います。 設定は、管理画面の「Server Network Settings」 から行います。

changeport

画面の下側にある「Client Web Server」 の箇所で「Use a different IP address or port」 にチェックを入れます。
そして、「Port number」を「943」から「10443」 に変更して「Save Settings」 をクリックして保存します。 changeclientport

保存できたらサーバに設定を反映させます。

saveclientweb

これでポート番号が別れたので、それぞれのポートに対してセキュリティグループの許可IPを変えることができるようになりました。

セキュリティグループ設定

OpenVPN-ASインスタンスのセキュリティグループを下記のように設定します。
今回は「openvpn-as-sg」 という名称で作りました。

許可ポート 内容
tcp/22 初期設定のためにSSHでアクセスする為に必要です。接続元IPは環境に合わせて設定してください。
tcp/943 Admin用の管理画面用のポートです。接続元IPは環境に合わせて設定してください。
tcp/10443 Client用の管理画面のポートです。リモートアクセスVPNになるのでAnywhereでアクセスを許可しています。
udp/1194 OpenVPN用のポートです。

先程、Admin用とClient用で管理画面のポートを変えたので、下記のようにAdmin用の管理画面には特定IPのアクセスのみ許可します。 またSSHも同様のIPからのアクセスのみ許可しています。
Client用の管理画面は、リモートアクセスVPNという性質からAnywhereアクセスを許可しています。

SecurityGroup

送信元/送信先の変更チェックを無効にする

「送信元/送信先の変更チェック」が有効のままだと、OpenVPN-ASは自分宛てではないパケットを無視するので、プライベート環境のインスタンスにアクセスできません。
その為、これを無効にします。OpenVPN-ASがNATインスタンスとして動く為です。

sourcedist-check

VPNアクセスするインスタンスのセキュリティグループ設定

プライベート環境にあるウェブサーバのセキュリティグループを下記のように設定します。

今回はデフォルトのNAT設定になっているので、先程作成したOpenVPN-ASのセキュリティグループ「openvpn-as-sg」 からのアクセスを許可しておきます。

private-sg

MacからVPN接続

これでAWS側の設定は完了しました。次にMacから接続するようにしてみます。

コンフィグのダウンロード

最初にユーザ用のページにアクセスします。ユーザ用のページのURLは「https://[Elastic IP]:943」 です。

userlogin

確認の画面が出るので「Yes」 をクリックします。

wantallow

Macでは次の警告が出ますがこれも「Yes」 を選択します。

warning

次のような画面が出たら、クライアント用のアプリかコンフィグをダウンロードします。 今回は既にMacにTunnelblickをインストール済みでしたので、一番下にあるcm-user1用のプロフィールファイルをダウンロードします。
ダウンロードしたファイル名は「client.ovpn」 として保存しました

formac

コンフィグをダウンロードしてダブルクリックでインストールします。 tunnelblick-install

コンフィグがインストールできたらtunnelblickでVPN接続してみます。
バーにあるTunnelblickのアイコンを右クリックして、保存したファイル名のclientを選択して接続します。

tunnel-blick-start

OpenVPN-ASで設定した「cm-user1」のユーザ名、パスワードを入力します。 tunnelblick-login

接続が完了していたら、下記のような表示になります。 tunnelblick-connect

プライベート環境にアクセス

この状態でウェブサーバのプライベートIPにアクセスして下記のようなページが見えたらOKです。 (ウェブサーバの設定は事前に終わっているものとします。)

private-web

最後に

OpenVPN Access Serverは最初に少しコマンドライン操作が必要ですが、非常に簡単にリモートアクセスVPNができました。 インスタンスタイプも比較的小さめでよさそうなので、リモートアクセスVPNの選択肢の一つとしていかがでしょうか?

参考:

公式サイトの導入マニュアルは以下です。本エントリの初期設定までの手順が記載されています。

Amazon Web Services EC2 Community Appliance Quick Start Guide_

以上になります。