さくらのVPSにSoftEtherをインストールして、VPNサーバーを構築してみました。これにより月額700円程度で固定IPアドレスが使えるようになり、またフリーWi-Fi利用時でも安全にインターネットを利用することが可能になります。
わざわざVPSを借りて自力で構築しなくても、インターリンクのマイIPを利用すれば簡単に同じものが手に入ります。しかしマイIPは通常版でも月額1,100円かかる上に、通信速度が最大でも6Mbps程度しか出ません。これは公式にアナウンスされていますし、筆者も検証してみましたがマイIPの通信速度は上下ともに6Mbpsが限界です。。
一方でさくらのVPSなら最安プランだと月額料金は700円程度で済みますし、通信速度も実測で80Mbpsを超えることを観測しました。構築に手間はかかりますし、セキュリティー周りの知識も身につけておく必要はありますが、コストパフォーマンスは抜群です。
というわけで備忘録も兼ねて、さくらのVPSとSoftEtherでVPNサーバーを構築する方法についてまとめておきます。
VPNサーバーを構築した環境
VPS | さくらのVPS |
---|---|
OS | Ubuntu 20.04 (amd64) |
VPNソフトウェア | SoftEther VPN Server (Intel x64/AMD64(64bit)) |
VPNプロトコル | SoftEther VPNプロトコル |
まずVPNサーバーを構築した環境について簡単にまとめておきます。
VPS
VPSサービスはさくらのVPSを選択しました。
他にもいくつか選択肢はありましたし、例えばConoHa VPSも一定期間無料で試用することが可能ですが、さくらのVPSはサポートページのマニュアルが充実していそうだったのでこれを選択しました。
料金については最安の512MBプランで石狩リージョンだと月額643円です。リージョンは他に大阪と東京を選択することが可能ですが、地理的距離が遠くてもこの程度なら有意な差はないようなので1番安価な石狩にしました。
またプランを上げるとメモリ以外のスペックも高くなりますが、結果的に仮想シングルコアな512MBプランでも十分なパフォーマンスを発揮できたので、こちらもとりあえず最安プランで問題ないでしょう。
共通のスペックとして、データ転送量に制限はありません。ローカルネットワークは1Gbps、インターネット側は100Mbpsで通信可能です。
ただし2週間のお試し期間中はいくつかの制限事項があり、特に回線帯域についてはサーバーからの発信が10Mbpsに制限されます。お試し期間中であっても本申込を完了させればすぐに制限が解除されますが、無料でフルスペックを試すことはできないので注意してください。
OS
VPSにインストールするOSはUbuntuの最新版にしました。
SoftEtherを利用するためにUbuntuなんてリッチなディストリビューションを選択することもないかと思いましたが、さくらのVPSでは標準OSの1つとして提供されていますし、インターネット上の情報量も多そうなこれが無難だと考えた次第です。
ただLinuxディストリビューションなら大概どれでも動くとは思うので、VPSサービスと併せてお好みで選べば良いのかなと思います。
VPNソフトウェア
上述の環境に対応するSoftEther VPN Serverを以下のページからDLして利用します。
後ほど必要になるのでPCのOSに対応するServer Managerや、そのPCをクライアントとしてVPN接続するならClientもDLしておきましょう。
最初Raspberry Pi用に保存してあったArm向けSoftEtherをインストールしようとして躓いたのは秘密です。
VPNプロトコル
デフォルトのポート番号 | |
---|---|
IPsec/L2TP | 500、4500 |
OpenVPN | 1194 |
MS-SSTP | 443 |
SoftEther VPN | 443 |
これは後からいくらでも追加や変更が可能ですが、VPNプロトコルに対応するポートの開放が必要なので、とりあえずでも先に1つ決めておいたほうが構築作業をスムーズに進められます。参考までに各VPNプロトコルに対応するデフォルトのポート番号を表にまとめておきました。
SoftEtherでは一般的なIPsec/L2TPやOpenVPN、あるいはMS-SSTPも利用可能ですが、独自のSoftEther VPNプロトコルが高速で安定性も高いと思います。
デメリットを挙げるとすれば、独自規格故にOS標準のクライアントソフトでは接続できないということでしょうか。しかもWindowsやMacといったPC向けには公式クライアントが提供されていますが、スマートフォン向けには提供されていないのでサードパーティーのアプリを利用することになります。
私はAndroidでは有料アプリのVPN Client Proを利用しています。有料なだけあって多機能で対応プロトコルも豊富です。購入方法は利用したいプロトコルを選択してサブスクリプション形式で課金するか、買い切ることも可能です。
構築環境について確認したところで、実際に手を動かしていきましょう。
さくらのVPSを申し込んでUbuntuをインストールする
https://vps.sakura.ad.jp/からさくらのVPSを申し込みます。
ちなみに年払いだと割安になりますが、とりあえず構築完了するまでは月額プランを無料で試用すれば良いでしょう。動作確認が取れた時点で本契約すればOKです。
サーバー選択
ゾーン、リージョンについて筆者は先述の通り石狩にしました。少しでも遅延を少なくしたいなら大阪や東京を選択したほうが良いのかもしれませんが、一般論としてそこまで有意な差はないようです。
石狩だと512MBプランの月額料金は643円です。無料試用する場合は、試用期間が終わってから課金開始となります。ちなみに試用期間中に本契約手続きを行ってもしっかり2週間分は無料で利用できるので、本契約するつもりなら早めに手続きしたほうがフルスペックで利用できてお得です。
ストレージ変更オプションは一定の手数料を支払うことでストレージ量を倍増させられるオプションですが、SoftEtherを動かすだけなら25GBでも十分過ぎるでしょう。
申込内容の選択を終えたらログインを求められます。会員でない方はここで新規会員登録を行いましょう。
サーバー設定
ログインするとサーバーの設定画面が表示されます。任意で設定する項目が多いですがこちらも一応まとめておきました。
サーバー名 | 任意 |
---|---|
サーバー説明 | 任意 |
インストールするOS | Ubuntu |
OSバージョン | 20.04 amd64 |
管理ユーザー名 | 既定(ubuntu) |
管理ユーザーのパスワード | 任意 |
スタートアップスクリプト | 利用しない |
パケットフィルター設定 | 既定 |
サーバーへのSSHキー登録 | 利用しない |
管理ユーザー名と管理ユーザーのパスワードは、OSインストール後にSSHでログインする際に必要となるので忘れないようしましょう。
パケットフィルターについてはインストール後、コントロールパネルから開放するポートの設定を行います。
支払い方法
サーバーの設定を終えたら、最後に決済方法の登録を行いましょう。無料試用するかどうかもここで選択できます。
クレジットカード決済の場合、申込完了後30分~1時間程度でVPSが利用可能になり、コントロールパネルのサーバー一覧がこのような表示になります。
サーバーの準備が整ったら、一覧から選択して起動させましょう。
SSH接続とUbuntuの初期設定
筆者のPCはWindowsなのでSSHクライアントとしてTeraTermを使用しています。
TeraTermを起動すると以下のようなウインドウが表示されるので、ホストにVPSのIPアドレスを入力してOK、ログイン情報を入力する画面まで進めます。
ログインに使用するユーザ名とパスフレーズとは、さくらのVPS申込時に設定した管理ユーザー名と管理ユーザーのパスワードのことです。Ubuntuの場合、ユーザー名はデフォルトでubuntuとなっています。
正しく入力してログインが完了すると以下のような画面が表示されるはずです。
ログインに成功したら、とりあえずパッケージを更新しておきましょう。先にこれを済ませておかないと、次のgccをインストールしようとした際にエラーが返ってきて失敗しました。
$ sudo apt update $ sudo apt upgrade
筆者の環境だとSoftEtherのインストールに必要なgccとmakeが入っていなかったのでインストールしておきます。ディストリビューションによっては他にも必要かもしれないので、上手くいかない場合は随時インストールされているか確認してください。
$ sudo apt install gcc $ sudo apt install make
これでSoftEtherのインストール準備は完了ですが、その前にポート周りの設定を済ませておきます。
パケットフィルターの設定
コントロールパネルのサーバー一覧からサーバーを選択した後、グローバルネットワークタブからパケットフィルターの設定が可能です。
不正アクセスを防ぐためにパケットフィルターは有効化しておくべきですが、最低でもVPNを通すためのポートを開放しておかなければVPNサーバーとして機能しません。
SoftEther VPNプロトコルを利用する場合は、WebのTCP 80/443番を開放しておけばOKです。他のプロトコルを利用する場合は、必要に応じて開放するポートをカスタムで追加してください。
SSHのポートをTCP 22番から他のポートへ変更する
ついでにデフォルトではSSH用にTCP 22番が開放されていますが、これは他のポートに変更しておくことが推奨されます。TCP 22番がSSHで利用されているというのは周知の事実で、デフォルトのまま運用するのはセキュリティ的に好ましくありません。
まあポート番号を変えたところで、開放していれば攻撃に晒されることには変わりないので、やらないよりはマシというレベルのレガシーなセキュリティ対策ですけどね。。
また、いきなりTCP 22番を閉じてしまうと自分自身がSSHで接続できなくなってしまうので、新しく設定したポートでも接続できることを確認してから22番を閉じると良いでしょう。
開放するポートは1-32767の範囲で選択可能ですが、念のためそのポートが既に使用されていないか以下の要領でコマンドを打って確認しておきます。何も反応が返ってこなければ使用可能です。
$ sudo lsof -i:10022 #10022番が使用可能か確認する
使用可能だったら、パケットフィルターの設定からそのポートをカスタムで追加しましょう。
そして以下のコマンドでsshdの設定ファイルを編集します。
$ sudo nano /etc/ssh/sshd_config
15行目あたりにポートを指定する記述があるので、この数字を書き換えます。編集が完了したら以下のコマンドでsshdを再起動しましょう。
$ sudo systemctl restart sshd
これで次からは新たに設定したポートからのみSSH接続が可能となるので、そのポートで接続可能になっているか確認してみてください。成功したなら22番はもう開放しておく必要がないので、コントロールパネルのパケットフィルターから設定を削除しておきましょう。
他にもSSH接続の認証方法をパスワード方式から公開鍵暗号方式に変更しておけばより安心です。設定の仕方はさくらのVPSのマニュアルを参照してください。CentOS向けに書かれていますがUbuntuでもそのまま適用できます。
UbuntuにSoftEtherをインストールしてVPNサーバーを構築する
ここからようやくSoftEtherをインストールしていきます。
SoftEther VPN Serverをインストールする
SoftEther公式サイトからDLしたインストールパッケージは、TeraTermのウインドウにドラッグアンドドロップで転送することで可能です。とりあえずホームディレクトリに保存しておいて、以下のように展開します。ファイル名は異なるかもしれないのでその都度確認してください。
$ tar xzvf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz
展開したことろでvpnserverディレクトリが作成されているはずなので、ここに移動してmakeコマンドを実行します。
$ cd vpnserver $ make
makeによってビルドが完了したら、ここからはrootユーザーとして作業する必要があるそうです。またvpnserverディレクトリを/usr/local/に移動することが推奨されているので、そのようにしておきましょう。
rootパスワードをまだ設定していない場合は、以下のコマンドでパスワードを設定してからsuコマンドでrootユーザーに切り替えます。
$ sudo passwd root $ su #
1つ上の階層に戻ってvpnserverディレクトリを移動させます。
# cd .. # mv vpnserver /usr/local/
そしてrootユーザー以外に読み書きすることができないように、パーミッションを変更します。
# cd /usr/local/vpnserver/ # chmod 600 * # chmod 700 vpncmd # chmod 700 vpnserver
ここでSoftEther VPN Serverが正常に動作するか確認を行います。まずはvpncmd コマンドライン管理ユーティリティを起動しましょう。
# ./vpncmd
3つの選択肢が表示されるので、3. VPN Tools コマンドの使用(証明書作成や通信速度測定)を選択して、checkコマンドを実効してください。
VPN Tools>check
実行した結果、すべてのチェックに合格した旨が表示されればインストール成功です。
ここで一旦VPSを再起動させておきましょう。
# reboot
SoftEther VPN Serverが自動起動するように設定する
不意に電源が落ちるなどのトラブルが発生したとしても自動的にVPNサーバーが起動するように、Systemdで自動起動の設定を施しておきます。
$ sudo nano /etc/systemd/system/vpnserver.service
[Unit] Description = SoftEther VPN Server After = network.target [Service] Type = forking User = root ExecStart = /usr/local/vpnserver/vpnserver start ExecStop = /usr/local/vpnserver/vpnserver stop Restart = on-failure RestartSec = 3s [Install] WantedBy = multi-user.target
ユニットファイルを作成したらリロード、有効化して正常に実行されるか確認してみましょう。
$ sudo systemctl daemon-reload $ sudo systemctl enable vpnserver $ sudo systemctl start vpnserver $ sudo systemctl status vpnserver
正常に起動していたらTeraTermの出番は終了です。この先もCLIでやろうと思えばできますが、公式から管理マネージャーソフトが提供されているのでここからはGUIで説明します。
SoftEther VPN Server Managerで設定する
WindowsやMacを持っているなら、SoftEther VPN Server Managerを利用することでGUIでSoftEther VPNを管理することができます。
VPNサーバー管理マネージャーをインストールして立ち上げたら、新しい接続設定を追加します。
接続設定名 | 任意 |
---|---|
ホスト名 | VPSのIPアドレス |
ポート番号 | 443 |
管理パスワード | 任意 |
次に構築しようとしているVPNサーバーの種類を尋ねられます。
今回は普通に単体で動作するリモートアクセスVPNサーバーを構築するので、これにチェックを入れて次に進みます。現在の設定内容が初期化されるとの警告が表示されますが、初めてセットアップするのですから無視して進めてOK。
最低でも1つの仮想HUBを作成する必要があるので、任意の仮想HUB名を入力してください。デフォルトのVPNでも問題ないです。
さくらのVPSでは固定IPアドレスを使えるためダイナミックDNS機能、DDNSの利用は必須ではありません。IPアドレスの代わりに固有のホスト名、つまり好きな文字列でアクセスできるようになりますが、IPアドレスのほうが文字数が少なく済むのでほんとにどちらでも良いです。
DDNSを利用するならホスト名を任意の文字列に変更してください。IPアドレスの代わりにこのホスト名でアクセスすることが可能になります。
IPsec/L2TPで利用するならL2TPサーバー機能を有効にしてください。広く普及しているプロトコルなのでAndroidやiPhoneでもOS標準のVPNクライアントで接続することが可能です。
その際、IPsec事前共有鍵はデフォルトのvpnから任意の文字列に変更しておきましょう。
固定IPアドレスが使えるさくらのVPSに構築する場合、VPN Azureクラウドは不要なので無効にしておきます。
最後にVPNサーバーに接続するためのユーザーの作成を行います。なお今回の構築方法においてローカルブリッジの作成は不要です。
ユーザーの作成については特に説明は要らないでしょう。パスワード認証の場合、ユーザー名とパスワードさえ設定すればOKです。
これで簡易セットアップは終わります。
次に仮想NATおよび仮想DHCPサーバー機能を有効化します。この時、物理ネットワークインターフェースとローカルブリッジを作成していると、L2ループが発生して大変なことになってしまうので注意してください。大変なことになった人からの忠告です。
仮想HUBの管理から、仮想NATおよび仮想DHCPサーバー機能を開きます。
このようなウインドウが表示されるので、さらにSecureNATの設定を開いて内容を確認しておきます。
今回は仮想NATと仮想DHCPサーバーの両方を有効化、利用します。
機能を有効化する以外に特に必須の設定項目はありません。もしかしたらMTU値を適切な値に変更しないといけないケースもあるかもしれませんが、筆者の場合は1500バイトのままで問題ありませんでした。
設定を終えたら1つ前のウインドウに戻ってSecureNAT機能を有効化しましょう。
ちなみにリスナーはTCP 443番以外のポートは不要なので削除してOKです。
以上でVPNサーバー側の設定は完了です。
AndroidスマートフォンからSoftEther VPNプロトコルで接続してみる
WindowsやMacからのVPN接続については公式クライアントが提供されていますし、解説記事も溢れ返っていますので割愛します。
ここではAndroidスマートフォンでVPN Client Proを使用する方法と、その際にどれくらいの通信速度が出るのか紹介しておきます。
VPN Client Proの設定
VPN Client ProはGoogle Playで配信されているAndroid向けの有料アプリです。それほど多くのクライアントアプリを使ったことがあるわけではありませんが、多機能で便利なアプリだと思います。
サブスクリプションで契約する場合、料金の支払いは1年単位です。利用可能なサービスを1つずつ選択して、その内容によって料金が変動します。元の価格設定も変動する可能性があるかと思いますが、筆者が最初に契約した時点ではプロトコル1つだけの利用なら年額250円でした。
SoftEther Client(Lifetime license)の買い切りは1,250円です。
いずれの場合も購入後7日以内はキャンセル、返金を受け付けてくれるので、7日間は無料で試用することが可能です。
VPN接続プロファイルの設定
ライセンスを有効化したら、接続プロファイルを設定していきましょう。
初めにプロトコルを尋ねられるのでSoftEther profileを選択します。
New profileを選択するといきなりたくさんの設定項目が表示されますが、最低限以下の項目を設定しておけば大丈夫です。
- Remote host
- Set tunnel MTU
Remote hostはVPSのIPアドレス、もしくはDDNSのホスト名を入力します。MTUはSecureNATで設定した値と同じで良いはず。
次の画面でも設定項目が多いですが、デフォルトのままでも動くことは動きます。私は以下の2項目にチェックを入れました。
- Enabled IPv6
- Ignore IPv6 RA message
Virtual HUBには設定した仮想HUB名を入力しましょう。認証方法がパスワードなら、ユーザー名とパスワードを入力して保存します。
最後に任意のVPN Nameを入力したら基本的な設定は完了。保存後VPN接続を有効化してConnectedに切り替わったら成功です。
タブを切り替えることで通信速度やログを確認することが可能です。
ちなみにプロファイルはまだまだカスタマイズすることが可能です。編集画面に切り替えるとさらに多くの設定項目が表示されます。
例えば特定のアプリの起動やWi-Fiスポットの接続と連動してON/OFFさせたり、特定のアプリのみVPNで通信させる、あるいはその逆も可能ですし。ウィジェットはもちろんのこと、クイック設定パネルにも最大4つのプロファイルを登録しておいて切り替えるなんてことも可能です。
スピードテストで通信速度を測定した結果
肝心の通信速度については冒頭でも述べたように、十分なスピードが出ていると思います。
VPNの特性上、通信速度が低下することはどうしても避けられませんが、下りについては概ね40Mbpsから最高80Mbps超まで出ているのでどんな使い方をしていてもストレスを感じることはありません。上りは下りよりも遅めですが、こちらも十分なスピードです。
遅延もそれほど酷くなく、他の携帯電話会社と比較すると遅めだと言われがちなdocomo回線でも概ね80ms前後で、今のところ2桁に収まっています。
ぶっちゃけオンラインゲームで遊ぶのでもなければ、普通にインターネットに繋ぐのとほとんど違いを感じないレベル。SoftEtherは本当に凄過ぎて恐ろしいですね。。
まあ同じSoftEtherを利用していてもVPSなど環境が異なればパフォーマンスも変わってくるかもしれませんが、とりあえず筆者は満足しています。
まとめ
さくらのVPSとSoftEtherを利用してVPNサーバーを構築し、固定IPアドレスを使えるようにしてみました。
マイIPよりも遥かに手間はかかりますが、費用は抑えらえます。何よりもパフォーマンスを重視する方にはこちらのほうが圧倒的におすすめです。
格安で固定IPアドレスを手に入れたい、あるいはVPNを利用できる環境を構築したいという方は、VPSを借りて構築してみてはいかがでしょうか。さくらのVPSなら2週間は無料でお試し利用が可能です。
コメント