最近宿泊が多いのと、海外出張があるかもしれないなということで、自宅の回線にVPN接続したいと思いました。家で使用しているTP-LinkのルータArcher C3150がOpenVPNサーバー機能を持っているので、これを利用しようと思ったのですが、うまくいかず、仕方なしにRaspberry Piで実装を試みたところ、有志のソフトウェアのおかげで、これが非常に簡単にできました。とても有難い。
外部から自宅の回線に繋ぎたい
最近、家にいないことが多いです。私は多くのファイルを家のNASに置いているので、アクセスできないとちょっと不便。sshで接続すればいいんですけれど、PCならともかくタブレットやスマートフォンからとなると、sshはちょっと扱いづらい。また、もしかするとそろそろ海外出張あるかもよということで、そうするとちょっとハマってしまったソシャゲなど、日本国外のサーバーからのアクセスって弾かれたりしないかしら、などという不安もあり、それらを一挙に解決すべく、外部から自宅の回線を使いたいものだなぁという欲求が高まってきました。
VPNの検討
となるとVPN(Virtual Private Network)ですが、私はこれまでVPNを使ったことがないので、まずどんな実装があるのか、から調べなくてはいけませんでした。
VPNの実装
メジャーなものとしては、PPTP、L2TP/IPSec、OpenVPNといったプロトコルがあるようです。「VPNプロトコル比較表 PPTP vs L2TP vs OpenVPN ™ vs Chameleon ™ | VyprVPN」や「Which is the Best VPN Protocol? PPTP vs. OpenVPN vs. L2TP/IPsec vs. SSTP」あたりの記事を見るに、ざっくりまとめると以下のような感じでしょうか。
- PPTP…昔からあるので色々なOSで標準で使えるけれど、脆弱性もあるから使わんほうがいいよ
- L2TP/IPSec…L2TPがトンネリング、IPSecが暗号化だよ。セキュアで対応しているOSも多いよ。でも重いよ。
- OpenVPN…セキュアで効率的だよ。でもOS標準で使えないから、サードパーティのアプリを入れないといけないよ。
一長一短という感じです。だいたいは、OpenVPNが推奨されているようです。
L2TP/IPSecはどうか
セキュリティのことを考えるとL2TP/IPSecかOpenVPNでしょうか。OpenVPNが推奨されているものの、最初は、OS標準で対応しているL2TP/IPSecに惹かれて、それが使えるか調べてみました。
うちはeo光なので、多機能ルータRT100の使用を強制されます。このルータの設定で、VPN関連のものがあった気がする、と思って見てみると、果たしてVPNパススルーというものがありました(「VPNパススルー機能【eo光多機能ルーター(eoRT100)】|eoユーザーサポート」)。
しかしVPNパススルーって何かなと思ったら、これは単にVPNプロトコルを通しますよというだけで、別にサーバー機能があるわけじゃないんですね。ははぁ、つまりホームネットワーク内部に別途L2TPサーバーをたてて、あれこれせなあかんのかー……となると、これは中々面倒です。
OpenVPNはどうか
もうひとつ、私が無線LANを飛ばすのに使っているTP-Linkのルータ、Archer C3150、これはどうかなと思って仕様を見ると、OpenVPNサーバーの機能を持っています。さすがそこそこいいお値段するだけあります(市場価格2万円くらい)。ふむふむ。
OpenVPNは、確かに各機器にクライアントソフトを入れなくてはいけませんが、私が主に使いたいiOSとAndroidについては、OpenVPNクライアントアプリが公式のもので簡単に導入できそうな感じ(実際、簡単でした)。やはり一番の鬼門はサーバーの構築で、それがボタンひとつでできるのであれば、これを使わない手はあるまい。
そう思って、いざ実行してみたのですが……サーバーの有効化と証明書の生成まではうまくいくものの、その証明書をローカルにエクスポートするところで止まってしまいます。うーん。TP-Linkのサポートに連絡して、やりとりしたところ、ブリッジモードにしていることが原因だとのこと。なるほど。しかしeo光なので、ルータは指定の多機能ルータを使わざるを得ません。多機能ルータのルータ機能を無効化することもできますが、そうすると今度は電話の子機が使えなくなってしまう…残念。
どうしたものかなぁなどと考えていたところに目についたのが、例によってRaspberry Pi。面倒臭そうだけれど、一つやってみるかなと重い腰を上げました。
Raspberry PiでOpenVPNサーバーの構築
以下、やり方の詳細については触れませんが、参考にした記事を適宜紹介します。
最初「RaspberryPiにOpenVPNサーバを立てる - Qiita」の記事を参考に、コマンドラインからインストールして構築しようと思いましたが、どうやら記事の頃と現在でディレクトリ構成が変わっているらしく、そのままではできない様子。やはり色々調べないとダメかな……と思っていたのですが、もう少し調べると、「Raspberry Piで安く手軽に自宅用VPNサーバーを作る方法 - WPJ」や「How to turn your Raspberry Pi into a Home VPN Server using PiVPN – Kamil's Lab」によれば、PiVPNなるRaspberry Pi用のインストーラーを作っている方がいて、それを使えば簡単に構築できる、と。
GitHubにソースコードがあり(「GitHub - pivpn/pivpn: Simple OpenVPN installer, designed for raspberry pi.」)、今も更新されているようなので、物は試しと、Installationにしたがってやってみました。すると、画面の指示にしたがうだけで、すんなりとインストールできてしまいました。あまりに簡単で拍子抜けしたほどです(但、前提として、Raspberry Piへの静的IPアドレスの割当、固定グローバルIPまたはDDNSの利用、ルータのポートフォワーディング設定があります。これらについては別途理解し、設定をする必要があります)。
reboot後、pivpn addコマンドを実行すると、ユーザー名とパスフレーズを指定するだけで、設定ファイルの.ovpnファイルが作成されます。後はそれを各デバイスに転送して、デバイスのOSに対応した公式のクライアントアプリでその設定ファイルをインポートするだけ(参考「AndroidのOpenVPN接続設定 ■セカイVPN■」参照)。
無事、Android端末とiOS端末で、ケータイ回線やWiMAX回線から、自宅のNASにアクセスしたり、自宅のIPアドレスでインターネットを楽しむことができました。さすがに回線速度については、NASで電子書籍のストリーミングなどすると、多少の遅さを感じますけれど、許容範囲です。問題ありません。
Raspberry Piがインフラ化
今までも、Raspberry PiはSSHの踏み台だったり、バックアップサーバーだったりと活躍していましたが、これでまた一つ、大切な役割が増えました。いまやすっかり我が家のインフラです。
eo光の多機能ルータの隣にRaspberry Piを無駄に2台、TP-Linkルータの上に鎮座させています。何も考えていないことがよくわかるゴチャゴチャした配置ですが、もうずっと安定して働いてくれています。コンピュータは働き者です。
特にRaspberyy Piは省電力なので、常時起動どんと来いです。5000円の汎用マシンであるRaspberry Piが、これだけ安定して、かつうまく動くのは素晴らしいと思います。色々な人の努力あってこそと思うと、感慨深い。有難いことです。
コメント
コメント一覧 (2件)
Thanks for the post! I like the clear raspberry pi case! For general use vpn, do you have any recommendations?
Thanks for the comment. When I posted this article three years ago, I was using VPN to access the SMB server in my LAN at home, and the PiVPN available on the Raspberry Pi was a very good one. However, I don’t use VPN now because I no longer need it.