OpenVPN AccessServerの構築

# OpenVPN Access Server

OpenVPNにGUIベースの管理画面が追加されたソフトウェアです。VPNに関する各種設定やユーザ管理をWebから操作できるため非常に便利。Docker版もあるのでインストールも簡単です。

* https://openvpn.net/
* https://github.com/linuxserver/docker-openvpn-as

# 画面イメージ

久しぶりに触ってみたらUIがかなり洗練されていました。

<img width="1538" alt="Screen_Shot_2020-02-29_at_17_31_33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/193f8e0f-357a-6a0a-d76a-bb53b64c4f91.png">
<img width="1538" alt="Screen_Shot_2020-02-29_at_17_29_47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/413f0923-d6df-e9a1-eddf-1f0e197e63d0.png">
<img width="1538" alt="Screen_Shot_2020-02-29_at_17_29_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/ff31654f-17bc-fbad-9a2a-7f728a15932c.png">

# 費用

使用量は1クライアント辺り年間$18、最大2接続まで無料で使うことができます。ライセンスはBYOL形式で、購入した認証キーは管理画面から追加することができます。

* [License Pricing](https://openvpn.net/pricing/?p=software-packages3)
* AWSが提供する [Client VPN](https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/what-is.html) との比較 (10クライアント)
    * OpenVPN Access Server
        * a. 10クライアント: $180/year
        * b. EC2インスタンス: t3.small
            * \$0.0272/hour * 730hours * 12months = $238/year
        * a + b = $418/year
    * AWS Client VPN
        * a. 1つのVPC関連付けで$0.15/hour
            * 年間で\$0.15/hour * 730hours * 12months = $1,314/year
        * b. VPN接続単位で$0.05/hour
            * 1日に一人辺り1時間接続: 0.05/hour * 10client = \$0.5/day
            * 年間で\$0.5/day * 30days * 12months = $180/year
        * a + b = $1,494/year
            * 日辺り1時間接続の試算のため、接続時間が長ければ長いほど料金は上がる

# ネットワーク構成

EC2自体はpublicサブネット下に配置し、OpenVPNが使うTCP/UDPポートを開放。管理画面はSSLが必須のため、ALB配下にACMと紐付けてアクセスする形を取りました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/925594ed-3aac-ccc5-38ec-88a0b45cd99c.png" width="60%">

# セットアップ

## インストール手順 

```
$ sudo yum install -y docker
$ sudo service docker start
$ sudo usermod -a -G docker developer
$ sudo systemctl enable docker
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ cd ~
$ mkdir openvpn-as
$ cd openvpn-as
```

`docker-compose.yml` を作成。

```
version: "2"
services:
  openvpn-as:
    image: linuxserver/openvpn-as
    container_name: openvpn-as
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - /home/developer/openvpn-as:/config
    ports:
      - 943:943
      - 9443:9443
      - 1194:1194/udp
    restart: unless-stopped
```

`docker-compose up` でコンテナを起動する。

## 管理画面の設定

1. `https://{DOMAIN}/` 形式で管理画面にアクセス
    * Docker単体で起動する場合は `https://localhost:943/`
    * デフォルトユーザのIDは `admin`、パスワードは `password`
2. CONFIGURATION
    * Network Settings
        * Hostname or IP Address: EC2にアタッチしたEIPを指定
    * VPN Settings
        * DNS Settings
            * `Have clients use specific DNS servers`を`Yes`に指定
            * Primary DNS Server: `8.8.8.8` (Google Public DNS)
            * Secondary DNS Server: `8.8.8.4`
3. OpenVPNを再起動
4. `https://{DOMAIN}/` にログインすると最新のプロファイルがインストールされたクライアントツールをダウンロードすることができる
5. クライアントツールをインストールしてVPNに接続
6. http://checkip.dyndns.org/ などで接続元IPがEIPに書き換わってることを確認

# 利用者向けマニュアル

# VPN接続方法

## クライアントのダウンロード

1. `https://{DOMAIN}:943/` にアクセス。OpenVPNのログイン画面が表示されるので、管理者から発行されたOpenVPNアカウントでログインする
    <br><img width="40%" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/901fcd89-41a8-d0fb-3fc4-5a680beb8953.png">
2. VPNクライアントソフトウェアをダウンロード。`Recommended for your device` に表示されているアイコンをクリック
    <br><img width="40%" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/b8791f15-322e-3647-8d4d-a6c569923bd6.png">

## クライアントのセットアップ

### Windows

1. ダウンロードしたインストーラを開いて`Next`をクリック
    <br><img width="60%" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/fafa1929-7fca-e2af-533e-009bf5cc65bf.png">
2. ライセンスに同意して`Next`をクリック
    <br><img width="60%" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/418f04b8-40a2-b6d7-1b55-ea9f6ef4c023.png">
3. インストール準備が整ったら`Install`をクリック
    <br><img width="60%" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/66f96052-2647-5375-d209-87baa9f0d0aa.png">
4. インストールが完了したら`Finish`をクリック
    <br><img width="60%" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/072e7b38-3e5c-a551-5edc-a17919d90ff7.png">
5. デスクトップに`OpenVPN Connect`アイコンが追加されているのでクリック
    <br><img width="20%" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/85de0c1e-7c30-1118-821b-4bc11f8edfff.png">

### Mac

1. ダウンロードしたインストーラを開いて`Continue`をクリック
    <br><img width="60%" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/ae4f5750-7187-6a25-e8a2-7ae50ff9b381.png">
2. ライセンスに同意して`Continue`をクリック
    <br><img width="60%" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/6a444be2-78a0-9ad9-db4c-cfa77f0414df.png">
3. インストール準備が整ったら`Install`をクリック
    <br><img width="60%" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/f69a92fc-e3aa-637a-9d40-e1e15016d71e.png">
4. インストールが完了したら`Close`をクリック
    <br><img width="60%" alt="12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/a115fa88-d546-27c9-1b64-a31c83552beb.png">
5. アプリケーションから`OpenVPN Connect`を開く
    <br><img width="20%" alt="13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/3a5161a7-e3e1-ee6c-9578-7bcc5fd79ead.png">

## クライアントの起動

1. OpenVPNの規約に同意して`AGREE`をクリック
  <br><img width="40%" alt="14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/099a7c62-2b3c-e89c-7458-f647e77e540a.png">
2. Profileウィンドウが開くので、プロファイルのトグルをクリック
  <br><img width="40%" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/3cdfc6e7-677f-c1f1-85d9-33916765f1b0.png">
3. 認証を求められるので、事前に共有したOpenVPNアカウントでログインする
  <br><img width="40%" alt="45c5c459-1aad-7df4-147f-ed8e19c91567.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/1f8acce7-059d-fb95-e868-32b2c34ef199.png">
4. `CONNECTED`の表示が出たら接続成功
  <br><img width="40%" alt="17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27454/b4d10e19-ee81-e079-c685-abba8615681f.png">