手当たり次第に書くんだ

飽きっぽいのは本能

私の自宅サーバーの歴史とたしなみ方

はじめに

自宅サーバーは、個人が自宅にハードウェアを設置し、それに任意の OS をインストールして様々なサービスを実行することで、自宅内で利用したり、必要に応じてインターネット上で公開したりすることができます。

自宅サーバーという言葉が浸透した発端は、Linux の登場によるものが大きいと思います。私の自宅サーバーの歴史は 約 20 年間になります。初期は Red Hat Linux でしたが、時代ともに OS も変化してきました。

大抵の場合、自宅サーバーに興味がある人はエンジニアだと思いますし、私自身もそうです。「エンジニアは自宅サーバーで勉強すべき」とまでは言いませんが、自宅サーバー環境で自由に勉強することで、他のエンジニアとは異なる経験と、それに基づく洞察を得られること思います。

私の自宅サーバーの歴史

過去の状態はちょっとあやふやではあるのですが、できるだけ思い出しながら、私の自宅サーバーの歴史を振り返ってみようと思います。

Version 1.0.0 (2003) Red Hat Linux

この当時、よく書店で出回っていた Linux を使用した自宅サーバー書籍を参考に、オークションで購入した中古 PC に Red Hat Linux をインストールして使用していました。

それを使って何をしていたかというと、Apache, Sendmail をダイナミック DNS を使用してインターネットに公開する、Samba を使用して自宅のファイルサーバーとして使う、程度だったと思います。インターネット接続は Yahoo!BB を使用しており、これは DHCP だったので固定のグローバル IP アドレスに憧れていました。

この頃は、理解が乏しかったので、むやみにインターネットに公開した Sendmail が迷惑メールの踏み台にされて焦った記憶があります(笑)。

また、ファイアウォールへの憧れがあり、ソフトバンクパブリッシングの Red Hat Linux firewalls を参考にしながら、iptables の勉強をしていました。この書籍は、シェルスクリプトを使用して、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 が登場し、それに移行したと思います。CentOS 5 には Xen が組み込まれており、Xen を使用して仮想化の勉強を始めた頃でもあります。仮想化により、柔軟に自宅サーバーの構成を考えられるようになりました。当時の Xen はストレージアクセスが非常に遅く、仮想マシン単位で LVM を割り当てていた記憶があります。

Version 3.0.0 (2011) CentOS, KVM

2011 年から、この WordPress を公開しています。この辺りから、きちんと設計を意識するようになり、ネットワーク構成図などの設計ドキュメントも作って管理するようになりました。また、CentOS 6 が登場し、ハイパーバイザーは KVM に変わりました。

この頃は、インターネット環境の事情から、自宅と友人宅を VPN で接続し、自宅サーバーをインターネットに公開していました。こちらに当時の状況が書かれています。

Version 3.1.0 (2015) CentOS, KVM, VyOS

2015 年頃、DNS も運用したいと思うようになり、クラウド上のインスタンスと自宅を VPN で接続した構成に変わりました。つまり、クラウドではグローバル IP アドレスを得られるため、自宅と VPN で接続してルーティングすることで、自宅のインターネット接続の制約を受けずに、柔軟にグローバル IP アドレスを利用できるようになりました。VPN は VyOS の OpenVPN を使用し、更に DMZ セグメントのみがクラウドにルーティングされるように PBR (Policy-based routing) を使用しています。ダイナミックルーティングは、OSPF を使ったり、iBGP を使ったりと、何度か設計変更していました。この頃の構成が今の設計の原型になっていると思います。

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 の利用ができませんでした。この頃、5G 関連の仕事をしていたこともあり、マイクロサービスアーキテクチャに強い興味がありました。

Version 4.1.0 (2023) Ubuntu, KVM, VyOS, IPv6, Ansible, Kubernetes

2023 年頃に、各サービスを純粋な Kubernetes 環境に置き換えました。MetalLB を使用し、IPv6 デュアルスタックの BGP で公開 IP アドレスをアドバタイズする構成となっています。コンテナは Ubuntu をベースに、Docker を使用して、できるだけ自分でビルドするようにしています。Kubernetes へのコンテナのデプロイは Helm を使っています。

現在の設計のポイント

現在の設計のポイントは以下のとおりです。

  • サーバー 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 開発などにも取り組みたいと思います。

最後に

私が長期間にわたり自宅サーバーを運用しているモチベーションの一つに実用性があります。例えば、このブログも自宅サーバー上で稼働していますが、このブログを執筆するのは私の趣味の一つであり、このように私生活と自宅サーバーが一体となることで、違和感なく維持できてきたとも言えます。このような高度な自宅サーバーを趣味としている人は少数だと思いますが、このように何かを学ぶ人もいるのだと思って頂けますと幸いです。

私の自宅サーバーの歴史とたしなみ方

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る