僕のリモートワークその② 〜ラズパイで自宅LANにVPN接続する〜

僕のリモートワークその② 〜ラズパイで自宅LANにVPN接続する〜

こんにちは!

たくです。

リモートワーク・オンライン授業が定着し、多くの人が、「VPN」はどういうもであるかを知るようになったとのではないかと思います。

VPNは、PC・スマホ・タブレットなどのマルチデバイスを連携させるのに非常に役立ちます。
ラズベリーパイを使って自宅でVPNを構築しましたので紹介します。

LANとインターネットとVPNと

まずはネットワークの種類について少しだけ整理します。

LAN

コンピュータをネットワークでつなぐ単純な方法は、LANケーブルでコンピュータ同士をつなぐことです。

このように接続することによって、PC①とPC②がIPでデータのやり取りをすることができます。
図中の数字はIPアドレス/サブネットマスクです。

※かなり古いPCの場合、LANケーブルの種類(ストレートorクロス)を選ぶ必要がありますが、たいていのPCではこれで通信できます。

これがLAN(Local Area Network)の基本形です。

「ハブ」を使うと、2台以上のPCで通信ができるようになります。
ハブは、信号を横流しする役割を担います。

また、LANケーブルの代わりに無線(Wifi)を使っても、LANを作ることができます。

LANの中には自分の機器しか接続されていないので、セキュリティのことは気にせずに通信をしても問題ありません。

インターネット

インターネットは、世界中の機器が集まってできた大きなネットワークです。
インターネットもLANも、「ネットワーク」であるという点では同じです。

巨大なネットワークであるインターネットにPCやスマホを接続することによって、インターネットの先にあるコンピュータと通信をすることができます。

NTTなどでインターネット回線を契約すると、部屋にインターネットへの入り口ができます。

ここに直接PCをつなぐと、このPC はインターネットに接続されます。

通常、このようなつなぎ方はせず、「ルーター」を使います。
ルーターを使うと、LANに繋がっている機器全てをインターネットに接続することができます。
また、ルーターはインターネット側からLANに対する通信を遮断する機能を持っていることが多く、セキュリティ対策にもなります。

インターネットにPCを繋げると世界中のサイトを見られるようになります。つまり、世界中の機器が自分のPCに繋がります。
ここがLANと違う点です。

インターネットを利用する人の中には悪い人もいます。
したがって、インターネットに接続するときにはセキュリティに気をつけないといけません。

インターネットを介してパスワードなどの重要な情報をやり取りするときなどには、通信内容を暗号化するべきです。

送信する情報を暗号化しないと、インターネット上で情報を盗み見られてしまう
暗号化しておけば、途中でその情報を盗まれても、盗んだ人は情報を解読することができない

VPN

Virtual Private Networkの略です。

VPNを使うと、インターネットを経由して、安全に、LANに接続することができます。
VPNで使われるプロトコルはいくつかあるようです。
PPTP, L2TP/IPSec, IKEv2, OpenVPNなど。

VPN通信では、情報の送信者は情報を暗号化して送信し、受信者は暗号化された情報を復元して元の情報を理解します。

PCとiPad Proを繋いででできること

PCとiPad Proを連携させることで、iPadでできることの幅が広がります。

ファイル共有

一つ目はファイル共有です。

ファイル共有機能を使うと、PCに置いてあるファイルを、iPadに保存しなくてもiPadで読み書きできます。
もちろん文書ファイルだけでなく、画像や音楽や動画も見ることができます。

画像・動画、音楽ファイルはデータ量が大きいので、iPad内に保存すると容量がいっぱいになってしまいます。
ファイル共有を使用すれば、PCの大容量のストレージをiPadで使うことができるようになるので、データ容量の小さいiPadでもたくさんの音楽や動画を楽しめます。

iPad OSでは、標準機能として、SMBというプロトコルによるファイル共有ができます。
新しいSMBプロトコルは暗号化の機能がついているので、VPNを使わなくても盗聴の危険性は低いと思います。しかし、PCのファイル共有機能をインターネットに公開するよりは、VPNでLANにアクセスして使用する方が安全だと思います。

リモートデスクトップ

リモートデスクトップは、PCの画面をiPadから操作することができる機能です。
パソコンでしかできない作業もiPad Proでできるようになるので、非常に便利です。

こちらの記事でリモートデスクトップについて書いています。

リモートデスクトップサービスをインターネットに公開するのは危険です。
ユーザー名とパスワードがバレると、自分のPCをインターネットの向こう側にいる人に自由に使われてしまいます。

ファイル共有と同様に、VPNでLANに接続して使う方がいいと思います。

ラズベリーパイを用意する

前置きが長くなりましたが、ここまで、VPNが何かということとVPNを使うメリットを説明しました。

PPTP, L2TP/IPSecなどのプロトコルがある中で、僕は「Wire Guard」を使うことにしました。
初めはOpenVPNにしようかと思ったのですが、Wire Guardの方がパフォーマンスが高いという評価をみて、こちらにしました。

Wire Guardを使うには、サーバーとクライアントを準備します。
サーバー・クライアントそれぞれで鍵を用意し、その鍵を使って情報の暗号化と暗号化された情報の開封をします。
(サーバーが情報を暗号化するための「秘密鍵」・復号するための「公開鍵」、クライアントが情報を暗号化するための「秘密鍵」・復号するための「公開鍵」、計4つの鍵が登場します。)

僕は、サーバーとしてラズベリーパイを使用しています。

ラズベリーパイは、とても小さなPCで、OSがオープンソース・必要最小限の装備などの特徴から、一般的な家庭用PCよりも安く手に入ります。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ラズベリーパイ3 B +コンピュータボード
価格:5712円(税込、送料別) (2021/2/16時点)


USB接続のキーボードとマウス、HDMIで接続できるディスプレイ(テレビでもOK)があればセットアップ可能です。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

サンワサプライ USBスリムキーボード SKB−SL31BK
価格:2940円(税込、送料別) (2020/8/18時点)



上のラズパイの商品リンクではOSインストール済み商品なのですぐに使えます。
自分でインストールする場合は、ラズベリーパイの公式サイトからOSイメージをダウンロードしてSDカードに焼かないといけません。
僕はラズパイ公式のRaspbianというOSをインストールしました。

OSインストール
→キーボード・マウス・ディスプレイ接続
→LANケーブルをルーターに接続
→電源接続(micro-USB)
→初期設定

これで準備完了です。

Wire Guardサーバーを用意する

ラズベリーパイ(ラズパイ)が使用できるようになったところで、Wire Guardを使えるようにしていきます。

Wire Guardをインストールする

インストールは簡単で、ターミナルから

sudo apt update
sudo apt upgrade
sudo apt install wireguard

を実行するだけ。

サーバー側の鍵生成

インストールしたwireguardを使って鍵を作ります。

cd /etc/wireguard
unmask 077
wg genkey | tee server_private_key | wg pubkey > server_public_key

これでサーバー側の秘密鍵(server_private_key)と公開鍵(server_public_key)ができました。

サーバーの設定

まずは、Wire Guardの設定ファイルを作ります。
設定ファイルの中に、先ほど作成したサーバーの秘密鍵と、この後説明するクライアント側の公開鍵の中身をコピペする部分があります。

sudo emacs -nw /etc/wireguard/wg0.conf
- - - ここから下を記述 - - -
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
PrivateKey = hogehogehoge(server_private_keyの内容)
ListenPort = 51820(サーバー側のポートの番号を設定。好きに決めてOK)
 
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = fugafugafuga(client_public_keyの内容。クライアント側で作成した公開鍵の内容を記述)
AllowedIPs = 10.0.0.2/32

次に、ネットワークの設定をします。
ラズパイで、IPフォワーディングの有効化とリンクアップをして、サービスの再起動です。

・IPフォワーディング
sudo emacs -nw /etc/sysctl.conf
(net.ipv4.ip_forwarding=1 をアンコメントする。)

・リンクアップ
sudo wg-quick up wg0

・再起動
sudo systemctl enable wg-quick@wg0
chown -R root:root /etc/wireguard/
chmod -R og-rwx /etc/wireguard/
sudo reboot -h

最後に、ルーターでポート転送の設定をします。
インターネット側から接続するポート番号と、ラズパイのIPアドレス・ポート番号(先ほど設定ファイルに書いた番号)をつなぎます。通信はUDP。

僕が使っているルーターはこちら;


僕はIPv4 over IPv6(DS-Lite)を使っています。そのままではポート転送ができないので、ちょっと工夫が必要です。こちらの記事に書きました。

Wire Guardクライアントを用意する

僕はiPad ProとAndroidのスマホにクライアントアプリをインストールしました。

インストールしたら、設定をします。
QRコードで設定を読み込むことができるようなのですが、僕にはやり方がわからなかったので、設定を直接編集しました。

アプリのプラスボタンをタップして、”create from scratch”を選択。
“Generate key pair”で、クライアント側の秘密鍵と公開鍵を生成。
“Address”には、先ほどラズパイの設定ファイルに書いたアドレス(10.0.0.2/32)を入力。
“DNS servers”には 8.8.8.8を入力。
“Add peer”をタップ。
“Public key”には、ラズパイで作った公開鍵(server_public_key)の内容を記入。
“Endpoint”には、「自宅のIPアドレス:ポート番号」を記入。(固定IPを使っていないのであればDDNSのドメイン:ポート番号にする。)ポート番号は、インターネット側のポート。
“Allowed IPs”には 0.0.0.0/0を入力。

以上です。
Interfaceがどっちなのか?、Peerがどっちなのか?が最初分からずに、何度か失敗しました。。。

結果:スマホの4G回線から自宅PCに繋がった!

ラズパイは電源をつけっぱなしにしておけばOKです。

スマホ、iPad Pro側でWireguardのアプリを起動し、先ほど登録した接続先をONにします。

何度か設定が間違っていて接続できませんでしたが、最終的には、見事、スマホの回線から自宅のLANに接続することができました!!

自宅の外のネットワークから自宅PCのファイルを見られるなんて、感動しましたよ。。。

通信速度について、うちのネットワーク回線の通信速度がそれほど速くないこともあり、リモートデスクトップをすると少しラグがありますが、出先で少しパソコンを操作する分には全く問題ありませんでした!!
WireGuardは高速に動いているのだと思います。

まとめ

かなり長くなってしまいましたが、まとめます。

LANにiPad ProとPCを接続することで、ファイル共有やリモートデスクトップなどの便利な機能を使うことができます。リモートワークでも必須の機能です。
ただし、これらのサービスをインターネットに公開するのはセキュリティ的に良くありません。

そこで、VPNを使います!!

VPNを構築する方法はいくつかありますが、僕はラズベリーパイ+「Wire Guard」を選びました。

ラズパイを購入しWire Guardサーバーをインストールし、自宅LANに、スマホとiPad Proから接続できるようになりました!!
VPNが使えるようになると、できることがグッと広がります〜〜
今回はリモートデスクトップとファイル共有だけでしたが、他にもいいことはあります。

長い記事になりましたが、最後まで読んでいただき、ありがとうございました!

ではでは〜

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ラズベリーパイ3 B +コンピュータボード
価格:5712円(税込、送料別) (2021/2/16時点)