Internet of Things(モノのインターネット)を使う難しさは、家にいないときに家にあるデバイスへの接続が難しいことです。私はいろいろな場所に出かけるので毎週この問題に直面します。というのは、IoTのテストをしたり、デモを作成したりする必要があるのに家にはいられないからです! そのため、家のネットワークに遠隔から接続できるようにRaspberry PiをVPNにしようと決めました。この記事ではPiVPNと呼ばれるOpenVPNインストーラーを使って、Raspberry PiをVPNにした方法を解説します。
記事を読めば、Raspberry Pi上のターミナルやSSHを使ってRaspberry Piに遠隔から接続できます。Raspberry PiへのSSHの設定方法が分からない人はここで簡単に説明していますので参照してください。Raspberry Piに静的IPアドレスを設定していない場合、Raspberry Piを直接操作することをおすすめします。そうしないと、IPアドレスは静的IPアドレスへ変換する過程で変わってしまい、SSHセッションから切断されてしまいます!
インストールプロセスを開始
Raspberry Piのターミナル上で以下のコマンドを実行します(SSHを介してRaspberry Piに直接です)。
curl -L https://install.pivpn.io | bash
注意点:このコマンドはWebからRaspberry Piのbashへ直接ダウンロードされた任意のスクリプトを構文解析します。インストール元が信頼できない場合は非常に危険です。入力したコードをすぐに実行してしまうからです。私はbashのコマンドラインを綿密に調べていませんが(信頼しているからです!)、心配ならGitHubアカウント(auto_installフォルダーの中のinstall.sh)を参考にすると良いでしょう。
このコマンドを実行するとシンプルなプロンプトよりは少し見栄えがいい、テキストベースのGUIが開きます。
Enterを押すと別画面が表示され、VPNサービスが適切に機能するには静的IPアドレスが重要だという主旨の文書が表示されます。Raspberry Pi用の静的IPがない場合、ルーターにVPN機能を利用するためのIPアドレスがないことになります。Raspberry Pi用の静的IPがありませんか? 安心してください。自動インストーラーがすぐに静的IPを設定してくれます。
Enterを押して次の画面に進みます。
この画面に注意してください。Enterを押すと2つのラジオボタンを選択せず次の画面に進んでしまいます。私はインストールの過程でこの間違いを犯してしまい、この設定を変更するためにインストールをやり直すはめになり面倒でした。
インターフェイスの選択で、イーサネット接続(eth0)かWi-Fi(wlan0)のどちらかを選べます。私はRaspberry Piがルーターの近くにないためWi-Fiを選択しました。イーサネットを介してRaspberry Piに接続できるなら、そのほうがスピードアップできます。オプションを選択するには、矢印キーで対象オプションを選択し、Spacebarで決定します。そしてEnterを押して次の画面に進みます。
この画面はRaspberry Pi用の現在のIPアドレスを確認します。Raspberry PiのIPをもっと覚えやすいものにしたかったため、矢印キーをクリックして<No>へ移動しました。Spacebarを押して選択し、Enterを押して設定画面に進みます。すると、Raspberry Piの静的IPを変更できました。
この画面ではRaspberry Piに設定したい静的IPアドレスを入力します。私は192.168.0.31を選びました。設定したいIPアドレスを決めたら、Enterを押します。
この画面では、ルーターかデフォルトゲートウェイのIPアドレスを入力する必要があります。ネットワーク設定次第ですが、たいていの場合、この値は192.168.0.1になります。どの値を入力すればいいのか分からない場合、ブラウザー上でルーターのコンフィグページに入るときに使うIPアドレスのどれでもいいので試しに入力してみるといいでしょう。入力できたらEnterを押します。
この画面ではEnterを押してIPアドレス設定が正しいかを確認します。ホームネットワークが通常のデフォルト設定になっている場合、上記のような画面になるはずです。デフォルト設定とは異なる場合、すでに自分でホームネットワークの設定を変更しているはずです。
GUIふうのインターフェイスが消えて、ターミナル上に設定が確認された旨のテキストが表示されます。静的IPなどが設定される間、少し待ちます。すでにSSHを設定している状態で、IPアドレスだけを変更してしまった場合、次の画面に進まなくなってしまいます。これは接続が切られたためです。こうなってしまった場合、もう一度、最初からやり直すことになりますが、やり直した場合は設定した静的IPアドレスに接続してください。
PiVPNのネットワーク設定が調整されたら、画面の見た目が戻ります。
上の画面は、すぐにVPNのローカルユーザーを選択するよう通知しているだけです。Enterを押して次の画面に進みます。
この画面では、Raspberry Piがデフォルト設定なら選択肢は1つしかなく、Raspberry Piユーザーのみが表示されます。その場合、Enterを押してください。ユーザー設定をカスタマイズしたいなら、矢印キーでユーザーを選択し、スペースキーで決定してください。ユーザーを選んだらEnterを押してください。
この画面は注意すべき非常に重要なことを表示しています。Raspberry PiをVPNに設定するということはつまり、ポートをインターネット上に広く公開するということを意味します。これには非常に大きな責任が伴います。セキュリティ上の問題、つまりが誰かにアクセスされる可能性があるかもしれないということです。VPNとして使っているRaspberry Piにアクセスされることはネットワークの設定次第では非常に危険なことです。つまり、ホームネットワークすべてにアクセスされる可能性があるのです。このような理由からPiVPNの自動アップグレードをおすすめしています。少なくともセキュリティパッケージの自動更新が重要です。また、発表されたセキュリティの脆弱性やネットワーク上での不審なアクティビティに注意しておくのも自己責任であり重要です。たいていの場合、ルーターの設定で接続の履歴を見られるので、注意してください。
セキュリティの理由からも「自動アップグレードを有効にしますか」という表示に対して「したい」と設定すると思います。ただし、Raspberry Piのアップグレードを管理したい場合は別ですね。一度設定しておけば、もうこのUI画面は表示されなくなります。
この画面ではapt-getを使ってアップデートがあるかどうかをチェックします。このプロセスを経て、インストール後にアップデートが必要かが通知されます。私のRaspberry Piは非常に古く、アップグレードしたものだったので143個ものアップデートが必要でした! VPNを使えるようにするため、すべてのプロセスのあとに今後のRaspberry Piの安全性を確保するためにsudoapt-get upgradeを実行しました。
sudoapt-get upgradeのあと、OpenVPNがRaspberry Piにインストールされているかもチェックします。されていなければ、インストールが開始されます! 以下のような画面になるはずです。
この画面はOpenVPNインストールプロセスの一部です。Raspberry Pi上のどのポートにVPNを適用するか選択できます。そのまま変更せず、ポート1194とし、Enterを押しました。
入力したポートが正しいかチェックして、もう一度Enterを押してください。
上の画面では希望する暗号化のレベルを選択します。暗号が長くなるに従って実行、設定にかかる時間が長くなりますが、その分安全性は高まります。ここではお勧めの2048-bitを選びEnterを押しました。1024-bitに下げることはおすすめしません。非常に安全性の高い暗号にしたいなら、4096-bitを使うと良いでしょう。
さて、上の画面では次の画面でセキュリティ認証情報のデフォルト値を通知すると表示しています。内容は「このサービスに接続する人とクライアントしか見ることができないため変更する必要はない」です。まさにそのとおりで、この値を変更しなくていいか心配する必要はありません。Enterを押して次の画面に進んでください。
これらの値の設定を変更する必要がないことに加えて、この画面では値を変更する方法も分かりません。目を通したらEnterをクリックしてください。
これらの値が正しいか聞いてきますので、もう一度Enterを押すだけです。
次に、暗号キーを作成しているところだと表示されます。Enterをクリックします。
分かりやすいUIはここまでで、ここからターミナルに戻ります。ターミナル上でキーの作成が始まります。作成には少し時間がかかります。4096-bitの暗号を選んでいた場合は通常より長くかかります。
非常に時間がかかっています…。
このプロセスの実行中はお茶やコーヒーを飲んで待つと良いでしょう。
完了したら使いたい公開DNSエントリーを入手できたか、IPアドレスを使用したいかを尋ねてきます。この部分は完全に使う人次第です。IPアドレスはWeb上でISPから入手した公開用IPアドレスです。www.whatismyip.comなどのサービスを利用する場合に表示されます。ISPには変更できない静的IPアドレスを提供してくれるプロバイダーと断続的に変わるIPアドレスを提供するプロバイダーがあります。
私の契約しているISPではIPアドレスが変わらないという保証はないため、No-IPに登録しています。No-IPはプロバイダーが提供する無料のWebアドレス(yourdomain.ddns.netなど)を公開IPにリンクすることを可能にするサービスです。
ISPが提供するIPアドレスを使いたい場合、そのままにして変更せずEnterを押します。別の方法として、キーボードを使って「DNSエントリー」に指示を与え、Spacebarを押したあとにEnterを押して次の画面に進みます。
「DNSエントリー」を選択した場合、上の画面が表示されます。画面のようにURLを追加します。「IPアドレス」を選択した場合、URLではなくIPアドレスを尋ねてきます。
次にVPNに使いたいDNSプロバイダーを選択するように促されます。プライバシーを守りつつVPNを利用したいと考えている場合、非常に重要なことです。どのDNSプロバイダーを選択してもVPNのリクエストを見られます。VPNを完全に個人利用したいなら、それに見合うDNSのソリューションが必要です。私はそのような目的では使っておらず、「Google」のままにしておきました。Enterを押して次の画面に進みます。
これでインストール完了です。Enterをクリックして完了を知らせる画面を閉じます。上の画面のようにpivpn addを実行する必要があることをお忘れなく。
「はい」を選んでRaspberry Piを再起動してください。これまでの選択と同様にキーボードで選ぶ必要があるかもしれません。
最後に細々とした動作をして、Raspberry Piが再起動します。
忘れず更新を!
VPNをインストールするプロセスは完了しましたが、今後のRaspberry Piのセキュリティを守るために以下のコマンドを実行することを忘れないでください。
sudo apt-get upgrade
アップデートがすべて完了したら、安心してVPNにアクセスするクライアントを設定できます。
最初のVPNクライアントの設定
これでPiVPNを介してRaspberry Pi上で実行されるOpenVPNインスタンスが用意できました。しかし、ネットワーク上のほかのコンピュータやデバイスからVPNにアクセスするには、これらのデバイスが媒介するクライアントが必要になります。このクライアントを加えるには、以下のコマンドを入力します。
pivpn add
クライアントの名前を尋ねてきますから、好きな呼び名を付けます。また、パスフレーズも尋ねてきます。このパスフレーズとはクライアントを介してVPNにアクセスするパスワードです。ここで1つ注意点があります。パスフレーズの質問に答えないと、そのクライアントを介してVPNに接続できなくなります。
この作業が完了したら、対象クライアント用に.ovpnファイルが生成されます。クライアントのデバイスにログインするときは毎回このファイルが必要になります。
OpenVPNクライアント
ダウンロードしてさまざまなプラットフォームで使える種々のOpenVPNクライアントがあり、openvpn.netで見つけられます。使えるのはこれだけではありません。私はMac上でTunnelblickを使っています。
ポート転送
人によって違うのは、ルーターを使ったポート転送です。VPN用に設定したポートへの転送をルーター上で設定する必要があります(デフォルトでは1194でした)。Raspberry PiのIPアドレスにたどり着くにはポートへの何らかのリクエストが必要になります。この設定はルーターによって異なりますが、ポート転送のプロセスをもっと詳しく知りたい人はこちらを参照してください。「ポート転送」とルーター名で検索すれば使用しているルーターのポート転送方法が分かります。ルーターの設定をアップデートする場合は注意してください!
キーをFTPで送信
SFTPを使ってRaspberry Piからファイル間コピーをするのがもっとも簡単です。FilezillaのようなFTPプログラムを使ってコピーできます。Raspberry Piと連携したFTPの使い方に関する公式ドキュメントがこちらにありますので参照してください。Raspberry Piに接続できたら、/home/pi/ovpnsからキーをコピーします。
Raspberry PiのFTPへの接続
すべての設定が完了したら、デバイス上でOpenVPNアプリを開きRaspberry Piからダウンロードした.ovpnファイルをロードしてください。ロードが完了すると、設定したパスフレーズを尋ねられますので、入力してください。入力後、通信によって接続が完了します。
最後に
これでVPNを介してホームネットワークに接続できました。ネットワーク上でデバイスに簡単にアクセスできるはずです。たとえばホームネットワーク上にローカルWebサーバーを持っている場合、ローカルネットワークアドレスを使ってサーバー上で動作しているWebページにアクセスできるはずです。同様に、ホームネットワークのIPアドレスを使って、VPNに接続されたデバイスからネットワーク上のIoTデバイスへの接続を試みれば、今度はうまくいくはずです!
(原文:Setting up a Home VPN Server Using Your Raspberry Pi)
[翻訳:中村文也]
[編集:Livit]