こんにちは。クレスコ・デジタルテクノロジーズのN.Oです。

 

今回の記事では、安価なRaspberry PiをVPN(Virtual Private Network)サーバーとして使う方法を紹介します。

ネットワークやサーバーに詳しくない方は「そんな技術があるんだ!」という新しい発見を得ることができ、ネットワークやサーバーに詳しい方は大まかな構築方法が理解できると幸いです。

  • システム概要

自宅にPCがある方は、次のような問題を経験したことが少なからずあるのではないでしょうか。

    1. PC専用のゲームをスマホで通勤中にプレイしたい
    2. WEBのログイン情報や商品の閲覧履歴がPCにしか保存されていない
    3. 外出先で使っているノートPCでもパワーを必要とする処理をしたい

常にゲーミングノートPCを持ち運べば解決できそうですが、大きいうえに重いため現実的ではないです。できれば手持ちのスマホやタブレットで解決したいですよね。そこで、この記事ではスマートフォンやタブレットから、自宅のPCをリモートデスクトップ(RDP: Remote Desktop Protocol)で遠隔操作するシステムを構築してみようと思います。
システムの概要と簡単な構成図は次の図の通りです。

システムの構成図を詳細に描くと次のようになります

本来であれば、自宅のネットワーク(LAN: Local Area Network)は外出先と隔離されているため外出先から自宅PCへ接続することはできません。しかし、自宅のルーターに適切な設定を行い、VPNという仮想的な専用回線を構築することで安全に自宅のLANに接続することができます。
では、システムを構築してみます。

  • LAN環境でのシステム構築

【RDPの準備】
まずは自宅LANからRDP接続ができるようにします。今回はMicrosoftが提供しているRDPを使用します。
自宅PCの設定でRDPを許可し、スマートフォンやタブレットにMicrosoftのRDPクライアントアプリをインストールします。
自宅PCのIPアドレスを入力し、自宅PCのログイン情報を入力するとスマホやタブレット(以下、これらを「クライアント端末」とします)に自宅PCの画面が表示されます。

これでRDPの準備ができました。
ここで、次の作業に向けて自宅PC搭載されたネットワークカード(NIC: Network Interface Card)のMACアドレスを控えておきます。

【Raspberry Piの準備と設置】
Raspberry PiをLANに接続したら、コマンド「ip address」でNIC(eth0)のMACアドレスを控えます。
(Raspberry PiはRaspberry Pi 4Bのメモリ2GB以上のものを使用すると動作が安定します。また、Raspberry Piの初期セットアップ方法は過去の記事を参考にしてください。)

user@Raspberry Pi:~ $ ip address
(省略)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether Raspberry PiのMACアドレス brd ff:ff:ff:ff:ff:ff
inet Raspberry PiのローカルIPアドレス/24 brd 同セグメントのブロードキャストアドレス scope global dynamic noprefixroute eth0

【IPアドレスの固定】
一般的な家庭用ルーターは、デフォルトの設定ではIPアドレスが変わってしまう可能性があります。これを回避するため、自宅PCとRaspberry Piに対してはIPを固定するよう設定します。今回はルーター側で設定を行います。
IPの固定はルーターの管理画面で行います。
※管理画面へのアクセス方法はメーカーにより異なるため各メーカーの取扱説明書を参考にしてください。「DHCP設定」「IPアドレス設定」のような項目で、自宅PCとRaspberry Pi用の任意のIPアドレスと先ほど控えたMACアドレスを紐づけます。

【WOL(Wake-On-Lan)の設定】
既にRDPの準備はできましたが、RDP接続するために自宅PCの電源をつけっぱなしにするのは環境にも経済的にもよくありません。このため、自宅PCの電源を遠隔でONにできるようにします。
今回はマジックパケットを使用したWOLでこれを実現します。クライアント端末から送信されたマジックパケットが自宅PCに到達すると、自宅PCの電源がONになります。

自宅PCでWOLを許可するために、UEFIとNICの両方で設定します。
※UEFIの表示方法は各PCメーカーの取扱説明書を参考にしてください。UEFIに表示される項目もメーカーごとに異なるため以下の写真を参考に該当する項目でWOLの許可をしてください。

UEFIでWOLを許可したら、NICでもWOLを許可します。

では、マジックパケットを送信してみます。

今回は、iOS、iPad OSからRaspberry Piを経由して送信してみます。
標準搭載のショートカットアプリを使い、次のようにショートカットを作成すると、ワンタッチでマジックパケットを送信できて便利です。

「▶」をタッチしてショートカットを実行し、Raspberry Piのパスワードを入力すると、マジックパケットが送信されます。

自宅PCがマジックパケットを受信するとPCの電源が入ります。これでWOLの設定は完了です。

【VPNサーバーの構築】
WOLとRDPの準備ができたので、いよいよ今回の山場であるVPNサーバーの構築をしていきます。
VPNのプロトコルや技術には様々な種類があります。例えば

    • L2TP/IPsec
    • OpenVPN
    • WireGuard
    • SoftEtherVPN

などがあります。今回は、ウィザードに従って簡単に構築できるOpenVPNでVPNサーバーを構築します。
まず、以下のコマンドでRaspberry PiにPiVPNをインストールします。

curl -L https://install.pivpn.io | bash

すると次のようなウィザードが表示され、サーバーのセットアップが始まります。

まずは自宅LANでの接続テストをしたいので、以下のパラメータでセットアップします。

    [パラメータ一覧]

        • IPアドレス: Raspberry PiのローカルIPアドレス
        • VPN技術: OpenVPN
        • プロトコル: UDP
        • ポート: 1194

VPNサーバーのセットアップが完了すると、Raspberry Pi内にクライアント端末用プロファイルが作成されます。これをクライアント端末にインポートします。今回は、iPhoneにインポートしました。

では、さっそく接続テストをしてみましょう。

「Connected」と表示され、無事VPN接続できました!

自宅LANでの接続テストは終了です。次はいよいよ構築したVPNサーバーをインターネット上に公開します。

  • WAN環境の構築とテスト

家庭用ルーターのデフォルトの設定では、インターネットから自宅LANへの接続はファイアウォールで拒否されてしまいます。

そこで、ルーターの設定で「インターネットからポート1194への接続は、Raspberry Piのポート1194宛に転送してください」と設定します。
※自宅のインターネット回線のIPv6技術がDS-liteでない場合に限ります。

※ルーターの設定画面はメーカーや品番によって様々ですが、以下にセットアップの一例を挙げます。

設定を適用すると、インターネットからルーターのポート1194宛の接続が許可され、パケットの宛先がRaspberry Piのポート1194宛に変換されてRaspberry Piに渡されます。これでインターネットからRaspberry Piに接続できるようになりました。

しかしこのままでは問題があります。プロバイダーからルーターに割り振られているグローバルIPアドレス(インターネット上でのIPアドレス)は固定ではない可能性があります。インターネットからの宛先が変わってしまうことが考えられるため厄介です。ここで、DDNS(Dynamic DNS)という技術を使います。定期的にグローバルIPアドレスとFQDN(Fully Qualified Domain Name)を紐づけて、FQDNでグローバルIPアドレスを調べれば、グローバルIPアドレスが変わっても安心です。
今回は、MyDNSというDDNSサービスを使用します。MyDNSで好きなFQDNを作成します。次に、Raspberry PiからMyDNSのIPアドレス通知サーバーにFQDNとグローバルIPアドレスを定期的に送信します。これによって、FQDNを使えば常に最新の自宅のグローバルIPアドレスがわかるようになります。

先ほどのローカル環境構築の際に作成されたOpenVPNのプロファイルには宛先がRaspberry PiのローカルIPアドレスに設定されているため、DDNSに設定したFQDNに書き換えておきます。

ではいよいよスマートフォンの無線LAN機能をOFFにして、外出先から自宅のRaspberry PiにOpenVPNで接続してみましょう!

「CONNECTED」と表示され、接続できました!

次に、WOLで外出先から自宅のPCの電源をつけて、RDPで遠隔操作してみましょう!

できました!

これでシステムの構築が完了しました!

  • さいごに

今回構築したシステムはネットワークとサーバーの両方を扱ったため、多くの技術や知識を得ることができました。業務にも生かせる知識もあり、構築した甲斐があったと思います。DS-lite環境下におけるサーバー公開の方法については最適な方法を模索中です。
今回は自宅PCにRDP接続しましたが、録画サーバーに接続して外出先から録画予約や録画視聴をしたり、VPNサーバーとプロキシサーバーを連携させてネットワークのセキュリティを高めたりとVPNの使い方は無限大にあります。海外旅行をする際は、VPNが日本のエンタメコンテンツにアクセス可能な貴重なルートになります。また、OpenVPNの代わりにSoftEther VPNを使うと、OpenVPNでは難しかったNATやファイアウォールの通過が簡単にできるようになります。また、OpenVPNの最適化をしてスループットを向上させるのもおもしろそうだと思いました。

最後までお読みいただきありがとうございました。