高速VPNを最速3分でスタート ConoHaで月額630円

世の中リモートワークが増えてきましたが、固定IPからの接続が必要な作業もあります。
そんなときに便利なのがVPNです。

[インターリンクさんのマイIP](https://www.interlink.or.jp/service/myip/)は安くて簡単です。ただ、自分が契約したときは通信速度が遅くて解約しちゃました…(中の人にはすみません！)

同じような低料金のソリューションとして、**低価格VPSでSoftEtherを稼働させる方法**がよく紹介されています。

マイIPの**最速3分でスタート**に対抗して、**最速3分でVPSにSoftEtherをセットアップするレシピ**を考えてみました。

こちらのステキなDockerイメージにより実現しました。

siomiz/softethervpn
https://hub.docker.com/r/siomiz/softethervpn

# 材料

* ConoHaのアカウント
* `事前共有鍵` 例: rRhM*HkHcX9U
* VPNに接続する`ユーザー名:パスワードの組み合わせ`(;区切りで複数可) 例: user01:pass01;user02:pass02;user03:pass03

# セットアップ

## スタートアップスクリプトの準備

任意のエディタなどで次のスタートアップスクリプトを用意します。
`PKS`='`事前共有鍵`'と、`USERS`='`ユーザー名:パスワードの組み合わせ`'の部分を先ほど用意した材料で置き換えてください。

```bash
#!/bin/bash

cat << EOS > /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker run --privileged --name vpnserver \
    -p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp \
    -e PSK='事前共有鍵' \
    -e USERS='ユーザー名:パスワードの組み合わせ' \
    siomiz/softethervpn:4.27-ubuntu
ExecStop=/usr/bin/docker stop -t 2 vpnserver
ExecStopPost=/usr/bin/docker rm -f vpnserver

[Install]
WantedBy=multi-user.target
EOS
systemctl daemon-reload
systemctl enable vpnserver
systemctl start vpnserver
```

内容としては、SoftEtherのDockerコンテナを起動する`systemd`向けのサービススクリプトを登録して、有効化・起動しているだけです。

ここでは公開ポートを`L2TP over IPSecのみ`としているので、OpenVPNやSoftEtherのポートも公開したい場合は[上記のDockerイメージの説明](https://hub.docker.com/r/siomiz/softethervpn)をご参考ください。

なお、説明では`--cap-add NET_ADMIN`で必要な特権を付与していますが、これだけでは`dmesg`のエラーが出てしまい起動せず、`--privileged`に置き換えています。

## スタートアップスクリプト付きでVPSを起動

ConoHaで`サーバーの追加`フォームを開き、`Docker`イメージを選択します。

<img width="1002" alt="ConoHaコントロールパネル.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/9d2b08c3-b4aa-058d-c477-e8208ac45459.png">

`オプションを見る`を開き、スタートアップスクリプトに上記のスクリプトを貼り付けます。

<img width="1270" alt="ConoHaコントロールパネル.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/d03c554e-c80b-fff3-7520-b6fd321c3518.png">

## 2分待つ

セットアップ作業はこれだけです！
あとはじっとサーバーの起動と、スクリプトの完了を待ちます。

初回はDockerイメージの`pull`があるので、それなりに時間がかかります。
自分の場合は追加ボタンを押してから実測1分40秒ほどでコンテナが起動しましたが、もちろん前後します。

## 起動の確認

VPSインスタンスの詳細画面でIPアドレスを確認します。

<img width="880" alt="vpn01___ConoHaコントロールパネル.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/dc5be10f-8cd7-0fad-2639-762295717e50.png">

次のコマンドを実行すると、VPNサーバーが起動されたか確認できます。
(ConoHaのrootログインって大胆だなといつも思いつつ…)

```bash
ssh root@IPアドレス docker ps
```

以下のように`siomiz/softethervpn`イメージのDockerコンテナ表示されたら起動済みです。

```bash
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                                                               NAMES
eb437b346cac        siomiz/softethervpn:ubuntu   "/entrypoint.sh /usr…"   5 seconds ago       Up 4 seconds        0.0.0.0:500->500/udp, 443/tcp, 5555/tcp, 0.0.0.0:4500->4500/udp, 1194/udp, 0.0.0.0:1701->1701/tcp   vpnserver
```

# スピードテストの結果

接続方法の前に気になるスピードテストの結果を紹介します。VPNを経由すると下りが半分くらいになりました。
当方、**札幌からの接続**で物理的な距離もあるのでこれで満足です。

## VPNなし

<img width="743" alt="Speedtest_by_Ookla_-_The_Global_Broadband_Speed_Test.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/81a7b600-ca23-2244-6cb4-791b79890823.png">

## VPNあり

<img width="744" alt="Speedtest_by_Ookla_-_The_Global_Broadband_Speed_Test.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/1af8a81d-dc53-2b04-a1ec-b7e20ac14986.png">

# クライアントからの接続

あとは起動したVPNサーバーをおいしくいただきましょう。macOSを例に説明します。
Windowsでも同じプロトコルがサポートされているので多分大丈夫です。

## ネットワークインターフェースの追加

環境設定のネットワークで`L2TP over IPSec`のVPNインターフェースを追加します。

<img width="683" alt="ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita_と_コンテナの自動起動_—_Docker-docs-ja_1_12_RC2_ドキュメント.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/99750cde-7c12-b4f4-263a-f909c7a75322.png">

## 接続先と認証情報

まずは`IPアドレス`と`ユーザ名`を入力します。

<img width="679" alt="ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita_と_コンテナの自動起動_—_Docker-docs-ja_1_12_RC2_ドキュメント.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/18884c8c-76bf-6935-19b1-8ba8c0907fcb.png">

続いて`認証設定`ボタンを押して`パスワード`と`事前共有鍵`を入力します。

`OK`ボタンを押して認証設定を閉じ、右下の`適用`ボタンを押します。

それから`接続`ボタンを押すと、VPN接続が開始されます。

<img width="671" alt="ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/2c948ed5-e7ab-84c3-447f-b18fc553c076.png">

ほどなく認証を経て、VPNに接続できます。やったー！

<img width="670" alt="ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/b8f158e9-eec7-afb1-ac8c-305a7fc74d1c.png">

VPNサーバーのIPアドレスで外に通信できてないなーという場合は、`詳細`ボタンを押して、`すべてのトラフィックをVPN接続経由で送信`にチェックを付いているか確認しましょう。

<img width="668" alt="ネットワーク_と___httpd_v3_lightfile-command_—_root_133-130-121-156____—_ssh_vpn01_—_114×92_と_vpn01___ConoHaコントロールパネル.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/f6096c9c-64d3-1376-be1c-5da4b27f3c57.png">

# ファイヤーウォール

ConoHaのDockerアプリケーションイメージはUbuntuベースなので`ufw`コマンドでよしなに！

```
# for cond in 22/tcp 500/udp 1701/tcp 4500/udp; do ufw allow $cond; done
# ufw enable
```

# ConoHa以外のホスティングの場合

Dockerとsystemdが使えるなら、スタートアップスクリプトを`root`権限で実行すれば同じことができると思います。