VPN
docker
Conoha
SoftEther

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

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

インターリンクさんのマイIPは安くて簡単です。ただ、自分が契約したときは通信速度が遅くて解約しちゃました…(中の人にはすみません!)

同じような低料金のソリューションとして、低価格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='ユーザー名:パスワードの組み合わせ'の部分を先ほど用意した材料で置き換えてください。

#!/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イメージの説明をご参考ください。

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

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

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

ConoHaコントロールパネル.png

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

ConoHaコントロールパネル.png

2分待つ

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

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

起動の確認

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

vpn01___ConoHaコントロールパネル.png

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

ssh root@IPアドレス docker ps

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

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なし

Speedtest_by_Ookla_-_The_Global_Broadband_Speed_Test.png

VPNあり

Speedtest_by_Ookla_-_The_Global_Broadband_Speed_Test.png

クライアントからの接続

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

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

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

ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita_と_コンテナの自動起動_—_Docker-docs-ja_1_12_RC2_ドキュメント.png

接続先と認証情報

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

ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita_と_コンテナの自動起動_—_Docker-docs-ja_1_12_RC2_ドキュメント.png

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

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

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

ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita.png

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

ネットワーク_と_「最速3分でスタート_ConoHaで高速VPNサーバー構築_月額630円」を編集_-_Qiita.png

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

ネットワーク_と___httpd_v3_lightfile-command_—_root_133-130-121-156____—_ssh_vpn01_—_114×92_と_vpn01___ConoHaコントロールパネル.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権限で実行すれば同じことができると思います。