自宅鯖の公開環境を Cloudflare tunnel と proxmox で更新した
これは Twitter 見るとゴリゴリに bio に書いてあるんですが、自分は自宅鯖(通称 𝗚𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗲𝗿 )をひっそり運営していてなんかいろんなサービスが動いていたりします。
そんな私ですが Ubuntu のサーバーを管理するのにいちいち SSH しないといけなかったりリバースプロキシのコンフィグを書かないといけなかったりでとても疲れてしまったのでそれを解消 + 機能的な改善を求めて proxmox VE(以下 proxmox ) と Cloudflare tunnel を使用した環境へと移行しましたのでその紹介をしたいと思います。
以前の自宅サーバ周りのアーキテクチャ
画像の通りですが
- OpenVPN で自宅サーバと GCE の インスタンス をつなぐ
- GCE でリバースプロキシを設置し宛先を繋がっている自宅サーバの IP にする
- リバースプロキシ経由で Webserver や NextCloud と繋がります
という構造をしています。
なにがつらい?
- 作業しようとするたびに SSH しないといけない。 Windows だとパっとできなくてつらい
- サービスを新しくデプロイするたびに nginx のコンフィグを書く必要がありその度に GCE のインスタンスに SSH しないといけない。
- バックアップどうするのみたいな問題が出てくる。
- 単純に障害に弱い
- 極端な話 Ubuntu のファイルシステムが壊れると全部のサービスが死ぬ
という 4 点が大きく問題でした。今までは気力で解決していましたがここ最近のハードウェアメンテでやる気が死ぬ事件が起きてそれで移行を決意しました。
今のアーキテクチャ
- Cloudflare tunnel で自宅サーバと Cloudflare 環境を繋ぐ
- Cloudflare tunnel の Web コンソールからドメインと proxmox VM の宛先 IP を書く
- Cloudflare tunnel 経由で NextCloud や Webserver と繋がります
という到達ルートになっています。今のアーキテクチャに変えることによって以下のメリットを受けられるようになりました。
Windows でもパっと作業できるようになった
そもそも Ubuntu の管理がしづらいという点を proxmox を使用した環境に移行することで解消しました。
proxmox は OS のインストール直後から Web GUI のコンソールが建つのでこちらを使用することで殆どの管理が GUI で完結します。
作った LXC(VM) への SSH もブラウザベースで可能なので作業プラットフォームを選びません。
Windows でも Linux でも Mac でも環境を選ばず、SSH 公開鍵を Ubuntu に送信するとかしなくてもすぐに作業を始めることができます。
またこの Web GUI の認証ですが標準で OTP による 2FA をサポートしているのでより安全に扱うことができるようになっています。最高。
サービスを簡単にデプロイして公開できる
今までの Ubuntu ではサービスを公開する前にポート番号を干渉しないように設定し、サービスを起動したあとも nginx のリバプロの設定を書かないといけないなどやることが地味に多く辛みがありました。
現在のアーキテクチャでは proxmox の LXC(もしくは VM ) を新しく建ててまっさらな環境からサービスを構築し、完了したら Cloudflare のダッシュボードから tunnel の設定を書いてやるだけで HTTPS 化も済んだ状態で公開されます。
特に外部ネットワークにサービスを公開する際に Cloudflare tunnel が以前の VPN とリバプロを両方兼ねてくれるのがとても助かります。何も考えなくても良くなったのでめちゃんこ簡単になってくれました。
VPN を使用しなくなった
実は proxmox の構築後に今までのネットワークを踏襲して WireGuard による VPN を張り直そうと考えていたのですが、どう頑張っても GCE のインスタンスから handshake のパケットが返ってこない問題が発生して頓挫したことがありました。
もっと言うと実は最初から弊環境では VPN 張れたとしてもリバプロからローカルネットワークは見れないのですが話が長いので割愛します。
今回の構築したアーキテクチャは Cloudflare tunnel を使用することで上述の通り VPN とリバプロの役目を wrap してくれたので VPN 構築の手間が必要なくなりました。
おまけに GCE のインスタンスも不要になったのでお財布に優しくなりました。
外出先でもサービス、サーバーを管理できるようになった
実は proxmox のコンソールも Cloudflare tunnel を使用して公開しているのでいつでもシステムメンテナンスができるようになりました。
今までは ISP がポート開放を禁止している関係でポートを開けていても公開されず外から SSH しようとしてもできなかったのでとても嬉しいですね。
ちなみにこれを他の人に可能な限り触ってほしくないので Cloudflare Access を使用して自分しかコンソールに到達しないようにガードをかけています。
バックアップが超簡単に取れるようになった
proxmox はバックアップがコンソールから超簡単に取れます。また指定したスケジュールで自動で取るように設定することもできるので耐障害性がかなり強くなりました。
今後やりたいこと
もう一台 node を用意して無停止でメンテできるようにしたい
後述の Ceph にも絡むのですが、2 台以上 node があるとネットワーク経由で VM データをやりとりできるためサービスを無停止でハードウェアメンテナンスができるようになります。
この機能使わない手はないので早いところ適当な node を構築して準備したいところです。
Ceph の導入
現状 HDD1 台にバックアップが全部任せっきりになっていてこれが壊れると全部の VM イメージが死ぬためかなり危険な状態に置かれていると言えます。
proxmox は 2 台以上の node が存在する場合 Ceph という分散ストレージが扱えるようになり複数台の node に同じ VM データが存在する状態を作れるため、この問題を解消できるんじゃね?と目論んでいます。
その他自宅インフラの整備
これは proxmox 関連ではないのですが、VLAN 対応のスイッチを買って VLAN を切り、友人を家に招いた場合に友人が proxmox のコンソールに到達しないようなネットワークを構築したいですね。
この辺はあまり詳しくないのでお勉強しつつですが…
最後に
自宅サーバはいいぞ
Discussion