見出し画像

ラズパイを使って創作環境(VPNサーバ兼ファイルサーバ)を構築した話

■事のはじまり

最近AIお絵かきにハマっています。単にイラストを生成するだけでなく、iPadとApple Pencilを使って生成した絵に加筆修正をしたり、逆に下絵を描いてAIに渡したり、そういったコトをしたくなりました。

ですが、PCのブラウザからAIにお絵かきをさせる以上、上記欲求のためには iPad - PC 間でデータのやり取りができなければいけません。これを自宅内で行うだけならPCのフォルダにファイル共有をかけるだけでよいのですが、折角iPadを使うのだから外出先でも絵を生成したり修正したりできると素敵ですよね。

Google Driveなどのクラウドストレージサービスを使えば一発解決なのですが、以前、小説をクラウドに保管していたときに同期がイマイチ遅いことは判っています。先祖返りリスクを負ってまで、課金して使いたいとは思えませんでした。今は改善してるのかもしれませんが。

よって、自前でファイルサーバを構築するしかない(?)、となったわけです。

《外部からアクセス可能なファイルサーバ》と聞いて連想するのは会社のファイルサーバではないでしょうか。在宅勤務制度が浸透した昨今、会社から貸与された端末で会社のサーバにVPN接続を張って、社内のファイルサーバを弄って仕事をしている方は多いのでは。

もしVPN接続用のサーバを自宅に構築できれば、暗号化されておらず盗聴し放題のフリーWi-Fiの恐怖に怯えることがなくなります。前述のファイルサーバにも、外出先からアクセスできそうです。というわけで今回の目標が固まりました。

・目標①:VPNサーバを構築する
・目標②:外出先からアクセス可能なファイルサーバを構築する

上記目標達成のために、昨今の半導体不足のせいかかなり値の張るRaspberry Piを購入(20,000円弱)してサーバを構築しました。以下にはその手順を簡単にですが記載したいと思います。備忘も兼ねて。

※筆者は初心者エンジニアなので内容の信憑性は薄いです。自宅の機器に外部からアクセスできるようにすることのリスクを理解している方のみ真似するようにしましょう。仮に真似する場合も 自己責任 でお願いします!

※また、これはコストパフォーマンスの悪い遊びです。前述の通りラズパイが高いので……。あくまでホビーの範疇でやってることなので、ラズパイを弄るコトをホビーと思えない方も真似しないように。

■筆者の環境

  • Windows10 PC

  • iPad Pro11インチ

  • ZenFone 9(Androidスマフォ)

  • Raspberry Pi 400 キーボード一体型

    • ElecomのポータブルSSD

  • Aterm(NEC)のルータ

  • WAKWAK(ISP)

    • IPv6 IPoE transix IPv4接続 (DS-Lite方式)

最後に述べますが、DS-Lite方式が一番のネックになりました。

■Raspberry Piの初期設定

PCのカードスロットにMicroSDを挿し込みます。挿し込んだらフォーマットしましょう。方式はFAT32でよいかと。

Raspberry Pi用のOS Imager(※下記リンク)を使い、MicroSDにOSを書き込みしましょう。今回書き込んだOSはRaspberry Pi OS 32bit 2022-09-22版です。けっこう時間がかかります。

OSを書き込んだMicroSDカードをRaspberry Piの本体に挿しましょう。マウスやディスプレイも一緒に接続します。TypeCの電源だけは最後にしましょう。給電すれば自動で起動します(今回は自宅のルータに無線接続するため、LANケーブルは挿しません)。

ウィザードに従って初期設定を進めましょう。最近のPi OSのVer.だと、デフォルトユーザ名は「pi」ではなく自分で指定できるようです。というか「pi」以外にしたほうがセキュリティ的に安心です。

ウィザードの最後にソフトウェアアップデートが入ります。けっこう時間がかかります。

・rootユーザのパスワード変更

全権限を持つrootユーザのパスワードは初期のままだと設定されていません。何かあったときに復帰できるよう、rootユーザにパスワードを付与しましょう。下記記事を参考にします。

ターミナルを起動し、下記コマンドを実行します。

sudo passwd root

「新しいパスワードを入力せよ」と言われますので、入力します。入力したパスワードは*とも表示されませんので、ゆっくりと、間違えないように。確認用にもう一度パスワードを入力し、間違っていなければ「updated successfully」と表示されます。

今後、なにか取り返しのつかない失敗をしても、基本的にはこのユーザさえ生きていればどうにかなります。たぶん。

・IPアドレスの固定

IPアドレスは固定した方が色々と都合がよいかと思います。下記記事を参考にします。

ターミナルを起動し、下記コマンドを実行します。「いやいや、nanoとかアリエナイっしょ! Vim使えよ!」という方は nano を vi に置き換えてください。ナンノコッチャな方は nano でよいと思います。

sudo nano /etc/dhcpcd.conf

最下部に下記内容を追記します。内容はご家庭のLAN環境に合わせて読み替えてください。

interface wlan0 #有線接続ならeth0 
static ip_address=192.168.XXX.XXX/24
static routers=192.168.XXX.1
static domain_name_servers=XXX.XXX.XXX.XXX

Ctrl +O → Enter で修正内容を保存、Ctrl + Xでエディタを閉じます。

下記コマンドを実行して再起動します。

reboot

下記コマンドを実行して設定が反映されていることを確認します。

ifconfig

wlan0 や eth0 のセクションの inet が設定した値になっていれば完了です。

■ファイルサーバとしてラズパイを使う

・ポータブルSSDをマウント

下記記事を参考にします。

ファイルサーバ用のストレージとして使うポータブルSSDをラズパイに挿します。

dfコマンドでマウント状態を確認します。

sudo df -h

ここで挿したSSDの場所を確認します。dev/sda1といった名前のはず。これを①としましょう。

次に下記コマンドを実行し、ディスク情報(UUID)を確認します。UUIDは長い英数字の羅列で、①が書かれている行を見ればわかります。ここで確認したUUIDを②とします。

sudo ls /dev/disk/by-uuid/ -l

次に下記コマンドを実行し、mntフォルダ配下にマウント先のディレクトリを作ります。このディレクトリ名を③としましょう。できるだけ分かりやすく、英数字のみを使うのがベターかと思います。ちなみに、ここで作成したディレクトリがファイルサーバの共有ディレクトリとなります。

sudo mkdir /mnt/[任意の名前]

次に下記コマンドを実行し、自動マウント設定を入れます(/etc/fstabに下記を書き込む)。

sudo nano /etc/fstab

###最下部に以下を書き込む

/dev/disk/by-uuid/②   /mnt/③   ext4   defaults   0   0

一度再起動します。

reboot

再度、下記コマンドを実行してマウント状態を確認します。

sudo df -h

dev/sda1が先ほど作成した/mnt配下のディレクトリに割り当てられていれば成功です。

・sambaのインストール

まずはシステムを最新化します。

sudo apt-get update
sudo apt-get upgrade

sambaをインストールします。最初に「はい/いいえ」を聞かれるので、「Y」と入力してEnter。

sudo apt-get install samba

nanoで.confファイルを開きます。

sudo nano /etc/samba/smb.conf

最下部に下記内容を追記。[raspberry_pi]というのが共有名になります。お好みでなければ別の名前にしましょう。[username]のところはご自由に。

[raspberry_pi]
comment = Share
path = /mnt/③
public = yes
read only = no
browsable = yes
force user = [username]

samba用ユーザを作成します。

sudo smbpasswd -a [username]

パスワードと確認用パスワードを入力するように促されるので、入力しましょう。

※smbpasswdが実行できない、と怒られる場合は下記コマンドを実行

sudo apt-get install samba-common-bin

ユーザーが追加されたら、sambaを再起動します。

sudo systemctl restart smbd

・PCからテストアクセス

エクスプローラを開き、アドレス欄に下記を入力してEnter。

\\[固定したIPアドレス]\raspberry_pi

フォルダにアクセスできれば成功です。テキトーな.txtファイルなどを作成して保存して、ラズパイ側からも.txtファイルが見えればオーケィ。

■VPNサーバとしてラズパイを使う

ここまででラズパイがファイルサーバとしての機能を獲得しました。ここからはVPNサーバとしての機能も兼任させます。

今回はPiVPNを使わず、Tailscaleを利用します。このTailscaleの何がイイって、VPN構築までのハードルが異様に低いことです。企業が提供するサービスですが、端末100台までなら無料で使えるので、個人利用においては実質無料といっても過言ではありません。使う上での留意点や使い方については下記ブログが詳しいです。ご参照ください。

・Tailscaleのインストール

まずは下記リンクからTailscaleのアカウントを作成します。必要なのはGoogleアカウントやGitHubのアカウント。

とくにコダワリがなければ、これを機会にGitHubのアカウントを作るのがよいかと思います。もしくはGoogleの捨て垢。

登録が完了したらラズパイにTailscaleのクライアントをインストールします。

sudo curl -fsSL https://tailscale.com/install.sh | sh

次に、ラズパイをTailscaleに登録します。オプションは後述するExit Nodeの設定を仕込んでいるだけです。

sudo tailscale up --advertise-exit-node

#表示されるURLをクリック
#リンクに飛んだあとは、登録したアカウントの情報を入力

Tailscaleのマイページに飛んで、Machinesタブを確認します。「raspberrypi」という名前で登録されているはずです。
※画像は諸々のセッティングが終わったあとの画像なので、あくまで参考まで

自分のマシン一覧

その他スマートデバイスにもTailscaleのクライアントをインストールします。こちらはもっと簡単で、Tailscaleのアカウント情報を入力してログインするだけで登録されます。

ただ、これだけだとVPNに自分の端末がぶら下がっているだけで何の旨味もありません。ラズパイをExit Nodeとして設定しないと、セキュアな通信が実現できないからです。このあたりは先に紹介したブログが詳しく記載しているので読んでおきましょう。

・ラズパイをExit Nodeとして利用

下記記事を参考にします。といっても仕込みはほとんど終わっているので、手順は少ないです。

フォワーディング設定のコメントアウトを外します(有効化します)

sudo nano /etc/sysctl.conf

(開いたconfファイルの#(コメントアウト)を外します)

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

Tailscaleのマイページに飛び、Machinesタブを開きます。ラズパイの欄に[Exit Node!]と表示されているはずです。ラズパイの欄の右側にある[…]から、[Edit route settings…]を選択し、Use as exit node を有効化します。

次にスマートデバイス側でExit Nodeを利用する設定を行います。Tailscaleのアプリを起動し、右上の[…]をタップ、Use exit node…をタップすると設定が有効になります。マシン一覧の上に緑色のオビが出てきて「Using exit node raspberry pi」みたいに表示されるはず。

こんな感じになる。IPアドレスは100始まりのはず
※隠す必要性はないけれど、いちおう黒塗りしている

・VPNサーバとして利用できていることを確認

IPアドレス確認サービスを利用します。たとえば下記サービス。

スマートデバイスをモバイルデータ通信、またはフリーWi-Fiなどに切り替えてIPアドレスを確認します。

某カフェのフリーWi-Fiサービスを利用中

スマートデバイスをVPN接続に切り替え、再度IPアドレスを確認する。

自宅で使用しているtransixに変わっていることを確認
※隠す必要性はないけれど、いちおう黒塗りしている

・外出先からファイルサーバにアクセス

ネットワーク上のデバイスにアクセスする機能のあるファイラ(Windowsでいうエクスプローラ)アプリを利用して、ラズパイにアクセスします。

ここで指定するIPアドレスは、TailscaleのMachinesタブに表示されている100始まりのIPアドレスなので注意。

外出先のフリーWi-Fiを利用して自宅のラズパイに向けてVPN接続を張ることで、ラズパイに接続している外部ストレージを外出先から触れるようになった

■雑記

ここまで辿りつくのにおよそ2週間かかりました。というのも、自宅で利用しているISP(インターネットサービスプロバイダ)がIPv6 IPoE transix IPv4接続 (DS-Lite方式)を採用しているからです。コイツはNATをVNE(Virtual Network Enabler)側で行う方式のため、ルータにいくらポート開放の設定を施そうとIPv4通信ではVPN接続できませんでした。

WireGuardやOpenVPNといったオープンソースのソフトウェアを使っても上記制限のせいでどうにもうまくいかず、何度も何度もポートを開放したり、ルータを買い替えたり(!)する羽目に。気付くのが遅れたので余計に時間がかかりました。

クソザコミジンコエンジニアですが、今回のサーバ構築を通じて少しだけ経験値を積めたので良かったです。惜しむべきは結局Tailscaleという外部サービスに依存した構成になってしまったこと。残る課題は外部ストレージのバックアップ設定でしょうか。後者については自宅のPCに接続している外付けHDDをもっと大容量のモノにして、Acronisで自動バックアップのスケジュールを組めばいいかな? また新たな知見が得られたら記事を書きます。

以上

この記事が気に入ったらサポートをしてみませんか?