皆さん、VPN(Virtual Private Network)ってご存知ですか?
インターネット上で通信を行うときの安全性を高める仕組みです。
VPNを使うと通信の内容が暗号化されるため盗聴の危険性が低くなります。
このため、自宅にVPNサーバーがあると、出先のスマホなどから自宅のPCにアクセスする際の安心感が増します。
以前、Raspberry Pi 2でVPNサーバーを構築したのですが、我が家のインターネット(メタル接続、100Mbps、上り・下り非対称)の上り速度が実測で7~8Mbpsしかなく、外出先で家にあるデータを参照する際、あまりにも時間がかかったのでほとんど使っていませんでした。
しかし、そのうち自宅のインターネットが光接続(1Gbps、上り・下り対称)になり、上り速度が速くなるに違いないため、もう一度使ってみることにしました。
以下に手順などをご紹介します。
VPNサーバーを導入するマシン
以前使ったRaspberry Pi 2は、有線LANが100BASE-TX(100Mbps)です。これでは1Gbpsを活かせないと考え、 Linuxが入っている古いPC(EPSON AT970)をVPNサーバーにすることにしました。
スペックは以下です。
CPU:Celeron E2200
メモリ:DDR2 2GB
HDD:160GB
LAN:1000BASE-T
OS:Debian 10(Buster)
また、VPNサーバーの設定用に別途Windows10のPCを使用しました。
(2019/10/22追記)
後日、Xubuntu 18.04 LTSにもほぼ同じ手順で導入しました。違うのは自動起動設定ソフトウェア(sysv-rc-conf)の導入部分のみです。Xubuntuでのsysv-rc-conf導入方法は以降でご紹介しています。
使用するVPNサーバーソフトウェア
SoftEther VPNを使います。
理由は以前Raspberry Pi2でVPNサーバーを構築したときもSoftEther VPNであり、比較的容易に設定できた記憶があったからです。
SoftEther VPNでVPNサーバーを構築する手順
VPNサーバーを構築するマシンのIPアドレスを固定する
まず、準備としてVPNサーバーとするマシンのIPアドレスを固定します。
家庭内LANの場合、ルーターが持つDHCPという機能を使ってIPアドレスを自動で割り当てることが多いと思います。しかし、これだと割り当てられるIPアドレスが変更になることがあります。
サーバーとして使うマシンはIPアドレスが固定になっていないと面倒なことが多いので、「DHCP固定割当設定」※をします。
※本機能の呼び方はメーカーによって異なり、NECは「DHCP固定割当設定」、バッファローは「DHCPリース」の「手動割当に変更」、ELECOMは「固定DHCP設定」と言います。
VPNサーバーソフトウェアの入手
以下のサイトからダウンロードします。
https://www.softether-download.com/ja.aspx
以下を選択すると「ダウンロード可能なファイル」が表示されるので好きなバージョンを選びます。
- ダウンロードするソフトウェアを選択:SoftEther VPN(Freeware)
- コンポーネントを選択:SoftEther VPN Server
- プラットフォームを選択:Linux
- CPU を選択:Intel x64 / AMD64 (64bit)
私はrtm(完成版)の最新バージョン(Ver 4.29, Build 9680, rtm)を選びました。
VPNサーバー管理ソフトウェアの入手
VPNサーバーと同様、下記から入手します。
https://www.softether-download.com/ja.aspx
以下を選択すると「ダウンロード可能なファイル」が表示されるので好きなバージョンを選びます。
- ダウンロードするソフトウェアを選択:SoftEther VPN(Freeware)
- コンポーネントを選択:SoftEther VPN Server Manager for Windows
- プラットフォームを選択:Windows
- CPU を選択:Intel (x86 and x64)
VPNサーバーと同じく、rtm(完成版)の最新バージョン(Ver 4.29, Build 9680, rtm)を選びました。
VPNサーバーのインストール
ダウンロードしたファイルをLinuxマシンの適当な場所に置き、以下の作業を行います。
- ファイルの展開
- 実行ファイルの作成
- VPNサーバーの配置
- 自動起動の設定
- VPNサーバーの起動
詳しい手順は公式ページ(https://ja.softether.org/4-docs/1-manual/7/7.3)に記載されていますので省略しますが、私の環境に合わせ、別途下記の作業を行いました。
実行ファイル作成用ソフトウェアのインストールと実行
私のDebianには、実行ファイルの作成に必要なgccやmakeがインストールされていなかったので、rootユーザーで下記を実行してインストールしました。
apt-get install gcc make
自動起動設定用ソフトウェアのインストールと実行
Debian 10ではchkconfigがaptでインストールできなかったので、代わりにsysv-rc-confを使いました。rootユーザーで以下を実行しました。
apt-get install sysv-rc-conf
sysv-rc-conf vpnserver on
(2019/10/22追記)
後日、Xubuntu 18.04 LTSにもSoft Ether VPN を導入したのですが、sysv-rc-confをapt-getでインストールできなかったので下記に記載いただいている方法でインストールしました。
VPNサーバー管理ソフトウェアのインストール
Windowsマシンでダウンロードした下記のファイルを実行します。(xxxはバージョンにより異なります)
softether-vpnserver_vpnbridge-vxxxx-rtm-xxxx-windows-x86_x64-intel.exe
私は「SoftEther VPNサーバー管理マネージャ(管理ツールのみ)」を選択し、あとはデフォルトのままにしてインストールしました。
VPNサーバーの設定
VPNサーバーとVPNサーバー管理マネージャのインストールができたら、Windowsマシンで「SE-VPN サーバー管理(ツール)」を起動し、以下の作業を行います。
VPNサーバーに接続するための設定
- 「新しい接続設定」を押下して「新しい接続設定の作成」を開く
- 「接続設定名」に適当な名前を入力する(例:MyVPNServer)
- 「ホスト名」にVPNサーバーをインストールしたマシンのIPアドレスを入力する ※LinuxマシンのIPアドレスは、Linuxマシンで"hostname -I"を実行すればわかります。
- 「OK」を押下して「新しい接続設定の作成」を閉じる
VPNサーバーに接続し、簡易セットアップを実行
- 上で作成した接続先(例:MyVPNServer)を選択して「接続」を押下する
- 「SoftEther VPN Server / Bridge 簡易セットアップ」が開くので「リモートアクセス VPN サーバー」にチェックを入れて「次へ」を押下する
- 「簡易セットアップ - 仮想HUB名の決定」が開くので「仮想HUB名」に適当な名前(例:MyVPN)を入れて「OK」を押下する
- 「ダイナミックDNS機能」が開くので、そのまま「閉じる」を押下する
- 「IPsec / L2TP / EtherIP / L2TPv3 サーバー機能の設定」が開くので、「L2TPサーバー機能を有効にする(L2TP over IPsec)」にチェックを入れ、「IPsec事前共有鍵」に9文字以下の適当な文字列を入れて「OK」を押下する ※ここで設定したIPsec事前共有鍵は、クライアントから接続するときに使うのでメモしておきます。
- 「VPN Azureサービスの設定」が開くので、「VPN Azureを無効にする」を選んで「OK」を押下する
- 「簡易セットアップの実行」が開くので、「ユーザーを作成する」を押下する
- 「ユーザーの新規作成」が開くので、「ユーザー名」に適当な名前を入れ、「パスワード認証」の「パスワード」と「パスワードの確認入力」に同じ文字列を入れて「OK」を押下する ※ここで設定したユーザー名とパスワードがクライアントから接続するときのユーザー名とパスワードになります。
- 「ユーザーの管理」が開くので、そのまま「閉じる」を押下する
- 「簡易セットアップの実行」が開くので「3. ローカルブリッジの設定」でブリッジ接続するEthernetデバイスを選択し「閉じる」を押下する ※有線LANポートが1個しかなければ一つしか選べないはずです。複数ある場合は、Linuxマシンで"ip addr"を実行し、inetに意図したIPアドレスが表示されるデバイスを選択します。
これで設定は完了です。
VPNサーバーの接続確認
いよいよスマホなどのクライアントから接続できるか確認します。私はAndroidスマホを使いました。
Androidの場合の設定方法は 以下に記載されています。
まずローカルのVPNサーバーのIPアドレスに接続したところ、うまくいきました!
インターネットからの接続確認
最後にインターネット(家の外にあるネットワーク)から家の中にあるVPNサーバーに接続します。これをするには、以下の2点をクリアする必要があります。
- インターネットからVPNサーバーのアドレスがわかるようにする
- インターネットからVPNサーバーにアクセスできるようにする
1に関係するのが、上のVPNサーバーの設定に出てきた「ダイナミックDNS」です。
これがない場合、自宅のルーターでWAN側IPアドレスを調べ、そのIPアドレスに対して接続することになります。しかし、このIPアドレスは変更になる可能性があるため、変更のたびにクライアント側の設定も行わなければならず面倒です。
そこで、「ダイナミックDNS」を使ってWAN側IPアドレスに対応するDNS名を割り振り、クライアントからはDNS名に対して接続するようにします。すると、WAN側IPアドレスが変わってもクライアントの設定を変えることなしに接続ができるというわけです。
「SoftEther VPNサーバー管理マネージャ」画面の画面下部に表示されている「現在のDDNSホスト名」がDNS名ですので、クライアントの接続先にこれを指定すればOKです。
2に関連するのは、ルーターの「ポートマッピング」※の設定です。
インターネットから来た通信をルーターが受け取り、VPNサーバーに転送するために必要です。LAN側ホストにVPNサーバーのIPアドレスを指定し、以下のポートを転送対象とします。
- プロトコルTCPのポート番号5555
- プロトコルUDPのポート番号500
- プロトコルUDPのポート番号4500
※メーカーによって呼び方が違い、NECは「ポートマッピング」、バッファローは「ポート変換」、ELECOMは「ポートフォワーディング」と言います。
AndroidスマホのWifiを切って携帯回線につなぎ、クライアントの接続先をDNS名にすることで無事VPN接続ができました!
今後やりたいこと
無事VPN接続ができましたので、Windowsのリモートデスクトップを使って出先から自宅のサーバーを操作したり、ファイルサーバーにあるデータにアクセスしたりしてみたいと思います。インターネットが光接続になってから、ですが。。
あと、VPNサーバーのスペックによってどれくらい通信速度に差が出るのか気になるので今度調べてみたいと思います。
(2019/09/15追記)
その後、VPNサーバーの性能を測定してみました。下記の記事を書きましたので、よろしければご覧ください。
(2019/12/12追記)
さらにその後、SoftEtherVPN経由だとWindowsファイル共有が遅い事象が発生し、対処してみました。↓の記事を書きましたのでよろしければご覧ください。