はじめに
自宅サーバーとは、個人が自宅にハードウェアを設置し、任意のオペレーティングシステム (OS) をインストールし、さまざまなサービスを実行することで、自宅内で利用したり、必要に応じてインターネット上で公開したりすることを指します。このコンセプトは、Linux の登場によって広まりました。私自身の自宅サーバーの運用歴は約 20 年に及び、最初は Red Hat Linux を使用していました。
エンジニアが自宅サーバーに興味を持つことが多いですが、自宅サーバー環境で学ぶことで、他のエンジニアと異なる経験や洞察を得ることができると考えています。
私の自宅サーバーの歴史
Version 1.0.0 (2003) – Red Hat Linux
2003 年、書店で出回っていた Linux を使用した自宅サーバー書籍を参考に、オークションで購入した中古 PC に Red Hat Linux をインストールしました。Apache や Sendmail をダイナミック DNS を使用してインターネットに公開し、Samba を用いて自宅のファイルサーバーとして使用していました。インターネット接続は Yahoo!BB でした。当時は理解が乏しかったため、インターネットに公開した Sendmail が迷惑メールの踏み台にされるなどのトラブルもありました。また、ファイアウォール設定の勉強もしており、iptables の知識が後のエンジニア人生に非常に有用でした。
Version 1.1.0 (2005) – Fedora Core
2005 年に Red Hat Linux の提供が終了し、Fedora Core に移行しました。SELinux が登場しましたが、当時は難しく無効にしていました。
Version 2.0.0 (2007) – CentOS, Xen
2007 年に CentOS 5 が登場し、Xen を使用した仮想化の勉強を始めました。これにより、自宅サーバーの構成が柔軟になりました。
Version 3.0.0 (2011) – CentOS, KVM
2011 年から WordPress を公開し、仮想化で複雑化してきたシステム構成などのドキュメントも作成して管理するようになりました。CentOS 6 に移行し、ハイパーバイザーは KVM に変更しました。
Version 3.1.0 (2015) – CentOS, KVM, VyOS
2015 年頃から、クラウド上のインスタンスと自宅を VPN で接続する構成に変更し、それには VyOS の OpenVPN を使用しました。DMZ セグメントのみクラウドにルーティングするために PBR (Policy-based routing) を使用しました。
Version 3.2.0 (2019) – CentOS, KVM, VyOS, IPv6
2019 年に IPv6 を本格的に有効にし、デュアルスタック構成にしました。
Version 3.3.0 (2020) – CentOS, KVM, VyOS, IPv6, Ansible, Podman
2020 年には、Podman を使用してサービスのコンテナ化を進め、Ansible を導入してシステム構築を自動化しました。
Version 4.0.0 (2022) – Ubuntu, KVM, VyOS, Ansible, MicroK8s
2022 年に CentOS の提供終了が発表され、Ubuntu に移行しました。コンテナの実行環境として MicroK8s を使用していましたが、IPv6 の利用ができず、この時期は一旦 IPv4 のみで使用していました。
Version 4.1.0 (2023) – Ubuntu, KVM, VyOS, IPv6, Ansible, Kubernetes
2023 年には、各サービスを Kubernetes 環境に置き換え、MetalLB を使用して IPv6 デュアルスタックの BGP で公開 IP アドレスをアドバタイズする構成にしました。
現在の設計のポイント
現在の自宅サーバーの設計ポイントは以下の通りです。
- サーバー OS に Ubuntu を使用
- 仮想化環境として KVM を使用
- コンテナ環境として Kubernetes を使用し、Docker でコンテナをビルド
- IPv6 デュアルスタック構成
- VyOS で自宅とクラウドを OpenVPN で接続
- 自宅とクラウド間のルーティングに OSPF を使用
- Kubernetes は MetalLB でサービス用の IP アドレスを公開し、BGP を使用
- PXE で OS インストールを自動化
- Ansible で OS 設定を自動化
- Kubernetes へのコンテナデプロイに Helm を使用
- PDNS と phpIPAM で IP アドレス管理と DNS 設定を連携
- 独自ドメインを取得し、DNS (BIND), Web (Apache), Mail (Postfix) をインターネットに公開
- WAF を使用
- コードは GitLab で管理
今後は、マイクロサービスアーキテクチャや CI/CD を意識した設計を目指しています。また、SR-IOV、DPDK、HugePage、CPU ピニングなどの高速化技術や、GPU を用いた AI 開発にも取り組みたいと考えています。
最後に
長期間にわたり自宅サーバーを運用している理由の一つに、その実用性があります。このブログも自宅サーバー上で稼働しており、趣味と実益を兼ねています。このような高度な自宅サーバー運用は少数派かもしれませんが、何かを学ぶきっかけとして参考になれば幸いです。