自宅サーバーについてのお話

2022/12/30に公開

初めに

STECH/愛知工業大学 システム工学研究会 共同企画 Advent Calendar 2022 の10日目です。
20日ぐらい遅れてますが、せっかくなので一応...

自宅サーバーとは何か

自宅サーバーとはその何とおり、ご自宅でサーバーを運用することです。サーバーは何かしらのサービスを提供するソフトウェア、コンピュータのことなので自作サーバーといっても色々な目的があります。
また、ネット上を見ていると本格的に業務用機器を導入したいやゆる"逸般の誤家庭"も時々見かけられますが、別に最初はRaspberry piで簡単なサーバーを動かすという小さいところから始めるのも立派な自宅サーバーだと思っています。私自身もそこまでガチガチのサーバー運用をしているわけでもないので「自宅サーバー」と言っていいのか迷いますが、お手軽に始められるんだということを知ってもらえればと思います。

なぜ自宅サーバーが必要なのか

自宅サーバーが便利なところは、自由に触れるリソースを安価に手に入れられる+運用が楽しいというところかなと思います。

最近は、AWSやGCPやVercelはじめとして色々な便利なサービスが登場していています。もはや、オンプレでサーバーを管理するなんて時代遅れかもしれませんが、個人でこうしたクラウドを使うという場合に一番痛いのが 料金 です。サーバーレスの良いところでもあり個人にとって辛いのは、使用量に応じた従量課金なので、クラウド破産してしまう可能性があるのと、毎月料金がかかってくるところです。

例えば、私がAWSで運用したサービスでAWS IoTというサービスを使ったものがあったのですが、これを運用しているとなんと月々2,000円ぐらいかかりました。円安の影響もあって値上がりしているので、ちょっと毎月運用するには辛なぁと思いすぐにクラウドをやめました。

また、例えばハッカソンとかで一時的にサービスをリリースすることがあるともいますが、そうした場合に一時的にAWSにサービスをデプロイしたけど、このまま運用を続けるにはお金がと言うこともあると思います。また、クラウド周りで色々なエラーやトラブルが発生してデプロイできないということもあるかと思います。そんな時は、小規模なサービスなら慣れ親しんだ自宅サーバーの基盤で運用してあげると良い感じです。

システム構成

こんな感じの構成で行っています。マンションに住んでいるのでいて、各部屋までグローバルIPが届かない構成なのでTailscaleでVPNを貼ってあげることによって良い感じにサーバーの公開をしてげてきます。

  • Tailscale
    TailscaleはWireguardをベースとしたメッシュVPNを簡単に構築できるサービスで、Tailscaleに接続した端末にはTailscale専用のIPアドレスが振られます。Tailscaleに接続された別の端末のIPに対して、あたかも同じネットワーク内に端末が存在するように通信を行うことができます。

今回はこのサービスを利用して、自宅とAWSのネットワークを繋いでいます。AWS側のVPSと自宅のRaspberry piにTailscaleをインストールしてあげてこの間をTailscaleのVPNを介して通信しています。

  • Nginx Reverse Proxy
    AWSのLightsailという定額のVPSがあるのですが、このVPSにきた外からの通信はこのReverse Proxyで中継しています。AWSにはFirewallもありますが、ReverseProxyはサーバーを公開するならほぼ必須と言ってもいいでしょう。

このReverseProxyは基本的に、TLS終端を行なってくれてHostの情報に基づいて自宅のネットワークへ中継してくれます。
例えばサーバー用にexample.comと言うドメインをとった場合、DNSでexample.com*.example.comをVPSのグローバルIPに振ってあげると、

web.example.com : 自宅サーバーVM上のWebサーバーへ
mc.example.com : 自宅サーバーVM上のMinecraftサーバーへ

と言うように振り分けることが可能です。

  • Raspberry pi (Subnet Router)

Raspberry piはTailscaleの中継をするための専用機として使ってます。Tailscaleには端末が接続されているsubnetを公開するという機能があり、この機能を使うためのSubnet Routerとして利用しています。

例えば、AWSのVPSに(10.0.0.1)、Raspberry piに(10.0.0.2)がTailscaleで振られていて、Raspberry piは(192.168.0.0/24)の自宅ネットワークに接続されているとします。このRaspberry piがSubnet Routerとして機能すると、AWSのVPSから自宅ネットワーク内に接続されたVM(192.168.0.5)などがあった場合に直接接続することができる便利な機能です。

  • VM on Proxmox

VMを運用するためにProxmoxと言うHypervisorを使っています。便利なのは、WebのGUIコンソールがあるのでGUI上でぽちぽちするだけで簡単にサーバーを立てられるところと無料で結構使えるところです。

Hypervisorは仮想マシンを動かすための基盤となるソフトウェアで、物理的な1つのNodeにこれをインストールしており、その上でサービスごとに用意したVMやContainerを動かしています。
例えば、物理NodeのスペックがCPU4コアでメモリ32GBだった時、VMごとに例えばvCPU1コア、メモリ4GBといったように物理マシンのリスソースをVMごとに割り振って使うことができリソースの最適化ができます。また、必要なくなったVMは解放して別のVMにそのリソースを割り当てたりなど柔軟な運用ができるところが良いです。

もし、物理的なマシンでこれを行おうとするとPCケースを開けてメモリを差し替えたりと面倒ですが、ボタン1つでマシンのリソースを調整できると言うのはとても便利です。

今後やりたいこと

今後はkubernetesのクラスターを自宅サーバーに乗せて色々なサービス運用をしてあげたいなぁと言うお気持ちがります。Proxmoxの基盤として、そのVM上にk3sなどお手軽なk8s clusterをインストールしてあげてサービス運用をしてみたいなと言う感じです。また、YAMAHAのルータなどを導入してネットワークを色々といじってみたいお気持ちもあります。
最近はCloudflare Tunnelを使ってあげるとVPS使わずともサービス公開ができる等なので、これも試してみたいなぁと思ってます。

自宅サーバーは大変なこともありますが、色々と勉強になることも多いので興味がある方はRaspberry piからでも初めてはいかがでしょうか。

Discussion