OpenVPN Access Server (OpenVPN AS)とはどういうものか?というと OpenVPN が用意する OpenVPN 用のサーバです。Azure, AWS, GCP などですでに VM が用意されており私は Azure で利用しました。慣れた人ならあっという間にデプロイできるはず(私は時間がかかりましたが)。

普通の OpenVPN とどう違う?
通常の OpenVPN との大きな違いは、設定を Web ベースでできる点にあります。そしてそれらの設定ファイルは /usr/local/openvpn_as にまとめられていて重要な情報は sqlite3 で管理されています。内部的には Python2.7 でコントロールしているようです。easy-rsa も必要ありません。
その代わり、同時に接続可能なクライアント数はライセンスがない場合2 つに制限されます。2つで足りない場合は必要な分だけライセンスを買うことになるでしょう。
使ってみて何が便利?
一番便利な部分は Azure の諸設定までデプロイ時に自動で処理してくれる点でしょう。立ち上がればすぐにつかえます。
クライアントの設定も簡単です。特に使用者がネットワークに詳しくなくてもウェブページからクライアントをダウンロードしてインストールし諸設定をすればすぐに使えます。
インストール
Azure の場合は上の図のように OpenVPN を検索して作成ボタンをクリックしていくつか Azure 特有の質問に答えていけば完成してしまいます。ここでは Azure での実際のデプロイの様子は割愛します。あえて付け加えるなら Azure では VM の Linux に ssh でログインするのでssh の public key が必要です。(パスワードによる login も設定可能)
Azure のインスタンス
デプロイ時に標準設定になっていた "Standard B1s (1 vcpu 数、1 GiB メモリ)"を使っています。リージョンは東日本で 2020年4月の従量課金制の値段は 3,482.976 円。まめにシャットダウンすればもっと安くなることでしょう。そして、意外と高い Azure の VPN ゲートウェイの代金がいらなくなることも大きいと思います。
ssh で login
インストール後には ssh で一度 login する必要があります。login すると初期化が始まります。その過程で表示される EULA を読んで(納得して) YES に agreement します。
その他設定諸々
あとは公式の Quick Startにしたがって処理を進めます。私の場合は openvpn にパスワードを与える必要があったらしく(うう) sudo passwd openvpn が必要でした。これに気が付かなかったのでWeb UI にしばらくログインすることが出来ませんでしたよ。
更に次の作業をこなすことで Web UI にログインできるようになりました。
さらに作業があったとは!
これで終わりかと思ったら、本当は Web UI にログインしてからやるべきことがありました。本家のAccess Server Admin Web UI First Login を読みましょう。
Web UI は最初 openvpn のパスワードを /etc/passwd に依存します。セキュリティ上の穴にならないように openvpn のパスワードを /etc/passwd から消して、アクセスコントロールを db のみで動くようにしようということみたいです。
関係なかったこと
ウェブサイトには様々な OpenVPN のインストールやら設定やらの話が書いてあります。それらはほぼほぼ無視して構いません。公式ドキュメントだけを読みましょう。例えば、easy-rsa は OpenVPN AS では必要ありません。クライアントの設定もユーザで login すれば必要な設定ファイルやドキュメントはそこからたどれるようになっています。
あーつながらない
IP アドレスの設定のせいでした。設定をしくじるとつながりません(当たり前)。特に Web UI で折角だからサーバに名前を付けてやろうとIP アドレスから名称に変えると、以後、ダウンロード可能な設定がサーバ名称になってしまいます。
ちゃんと DNS で解決してあげないとつながらなくなります。特に Azure ではサーバのシャットダウンとかしちゃうとIP アドレス変わったりします。
Azure 内で DNS で名称を付けれられるようなのでそこを参照するように自分のところの DNS に書けばよさそうです(未確認)。
OpenVPN 以外のネットワークが切れました
セキュリティの観点から OpenVPN でつなぐとデフォルトの動作はそれ以外のネットワークを切ってしまいます。最初 Azure の別の Linux から OpenVPN でつないだのですが、繋がった瞬間に ssh が切れました。そして、二度とlogin できなくなりました。(Web UI から強制切断することで元に戻した)
あと、公式の資料通りに /etc/resolv.conf も up と down で書き換えるようにしないとね。
よくわかっていないこと
- Web UI をがちゃがちゃいじって最初に自分の ID を追加したりしているとなぜか /etc/passwd にパスワードが設定されてしまいました。これではせっかく ssh の public key を設定した意味がありません。vipw などを屈指してそれらのパスワードを削除しました。
- Web UI で Local といっているのがどうやら db への登録をして /etc/passwd に登録しないことを指しているようです。PEM は /etc/passwd に登録されている人をカバーする方式のようです。通常は標準設定の Local でよいでしょう。
- ca.crt などがあるものの、正式に認証局のサインをもらっているわけではないので結局、おれおれ SSL になってしまっています。正式に SSL に対応するにはInstalling a valid SSL Web certificate in Access Serverを読みながら対応すればよさそうです。
普通の OpenVPN を使うには?
OpenVPN Access Server では2つまでの接続はライセンス料が必要ありません。それ以上になるとライセンスを購入しなくてはいけません。最低で 10 User から購入可能で年間 $180 です。まぁ買ってもいいかな。正直、OpenVPN の普及促進を Unix の技術に詳しくない人に教える手間を考えたら年間 $180 は高くない気がします。
根性のある人や学生は OpenVPN を素で入れればいいでしょう。OpenVPN の設定方法は