色々なソフトを色々な構成で動かしている話

Posted on Dec 6, 2023

この記事はFediverse (2) Advent Calendar 2023 6日目の記事です。

Twitterが撃沈した

某実業家に買収され何だかよくわからない ダサい 名称に改名され、何だかよく分からない制限とスパムアカウントが次々と増えていき、結果としてTwitterから他のSNSに移住する(もしくはSNSをやめる?)賢明な方々が増えてきています。 昨年はMisskey v12を自宅サーバーで運用していただけですが今年は色々な構成で色々動かしたのでそれをまとめてみました。

私が動かしてる(た)ソフト

Misskey v13

初期のv13は割りと建てるのも簡単だったんですが途中からRedisにタイムラインや通知が保存されるようになったり、NodeJSの要求バージョンが上がったりで現在ではおそらくdocker-composeで運用するのが一番確実です。 リッチな見た目と派手な機能が特徴で、最大インスタンスのMisskeyIOの人口もインスタンスの数も今年の初めと比べて激増しています。

Firefish

Misskey v12のフォークです。今年の7月にリニューアルした りなっくすきー(私の運営するインスタンス)はこれで動いていました。今ではv12のオリジナルフォークに移動しています。Firefishはフォークとは言え積極的に開発されており数多くのコントリビューターやコラボレーターがいます。 こいつもRust部分のビルドをサーバーでやるのはかなり大変でリソースを使うのでDocker運用がおすすめです。

2023/12/31追記

どうやら開発リーダーが失踪してしまい状況が芳しくないようです。

Akkoma

これは一時期だけこっそりやってました。バックエンドがバイナリにビルド可能です。リソースの使用量は少なくフロントエンドを差し替えられます。ただしMisskey系からの移住となるとアンテナなど不足してる機能が気になる印象です。

Pixelfed

memory.sda1.netというPixelfedインスタンスを今年8月に始めました。こいつはなんとPHPで書かれています。私はPHPアレルギーなのでDockerに頑張って押し込んで運営しています。 インスタグラム的な使い方をするには十分な機能です。また写真がメインなので言葉の壁が薄く、投稿すると海外の見知らぬ人にもそれなりに「いいね」されたりします。使用リソースも控えめですがPHPに慣れていない私のような人間にとっては少し構築の難易度が高いです。

色々触ってみて

Mastodonは触ったことはありますが建てたことはないです。結局のところ自分に合うものを使うのが一番だと思います。
どのソフトウェアも一長一短です。自分の場合Misskeyは機能過多でアグレッシブすぎて合わず、Firefishもなんかなあとなりオリジナルフォークにたどり着いた訳ですが好き勝手できるので満足しています。

サーバー構成

VPSという文明が導入され、気合でWireguardの設定を触って相互接続したりしてましたがTailscaleを使っていい感じに落ち着きました。
現在のsda1.netのインフラは以下のような感じです

  • 主にEUリージョンと日本リージョンの2つに別れています。
  • 特に自宅サーバー(Home lab)には様々なサーバーやらVMがありますが、自宅内の各サーバーとそれぞれのVPS、そして管理者のデバイスは全てTailscaleによって相互接続されています。このメッシュVPNはACLによって安全性が保たれています
  • EU #2は費用削減のためIPv6しか使えません。また自宅サーバー内のソフトがそのまま外部に接続すると自宅のIPが漏洩して色々まずいことになります。これを解決するためにEU #2とJP #2はそれぞれのリージョンのVPSをExit nodeとして使いそれを経由して外向きの通信を行います。

Tailscaleについてのはなし

このインフラの中枢と言っても過言ではないTailscaleですが、このTailscaleは手動でやるととんでもないことになるメッシュVPNの設定を全て自動で行ってくれるだけではありません。TailscaleにはACLというアクセス制御機能があり、どのノードがどのノードのどのポートにアクセスできるかを詳細に制御できます。ACLによって明示的に許可されていないアクセスは不可能です。具体的には

  • 管理者デバイスから公開サーバーのsshや管理ダッシュボードなどへのアクセスを許可
  • Dockerホストやレプリカがあるノードからデータベースがあるノードへのアクセスを許可
  • EU #2とJP #2のデバイスはExit nodeの使用を許可

みたいな感じで定義されています。

全てのデバイスを人力で相互接続してアクセス制御を各サーバーのファイアウォールで行う従来のVPNより簡単で管理がしやすいです。このTailscaleは簡単に安全なメッシュVPNを構築できるだけではなく、おいしい副産物として外出先からの管理がしやすいという利点もあります。

Termius(E2EEで同期されるsshクライアント)と併用して例えブラジルに居ようと自宅にいるのと全く同じように管理できるので私のような定期的に入院するような人間や頻繁に出張されるような方でも安心です。

またTailscale本体はメモリセーフなGoで書かれたOSSで誰でもソースコードを監査可能です。Tailscale側のサーバーに秘密鍵が送られたりだとかの心配はありません。またTailscaleはその仕組み上Tailsacleの制御サーバーが落ちてもメッシュVPN自体は機能し続けます。(参考: https://tailscale.com/security/
もちろん、絶対に安全と言いきれるものなどないのでSSHの公開鍵認証や安全なパスワードも併用しています。

耐災害性について

同一リージョンの拠点は相互に依存していますが片方のリージョンが完全に死んでももう片方のリージョンは稼働し続けられるようになっています。また各リージョンのプライマリDBはもう片方のリージョンのサーバーに非同期レプリケーションを行っているため、万一大地震等で日本リージョンの全てのサーバーにアクセスできなくなったとしてももう片方のリージョンで速やかに復旧できるようになっています。(ただしDB以外のデータはリアルタイムではバックアップされていないためPixelfedなど一部のサービスは対象外です)

Cloudflareの活用

皆さんお馴染みCloudflareですがWAFのルールを工夫すると悪意のあるBotの大半を遮断できたりします。例えばUAに非常に古いブラウザのUA(Chrome/6xなど)がUAに含まれていたらJavascriptチャレンジを課すなどのルールを設定することで日常的にやってくるBotや場合によってはボットネットからやってくるDDoSまで軽減できます。厳しくしすぎると連合先からの正当なリクエストまで弾かれてしまうのでそこは注意です。

LXDはいいぞ

自宅鯖はGitLabを除いてLXDコンテナ上で動作しています。コンテナなのでVMより遥かにリソース効率がよく、最近リッチなWebUIが導入されました。 cloud-initと組み合わせていい感じに運用しています。

まとめ

以上がこの一年のFediverse生活のおおまかなまとめとなります。来年はどうなるのか楽しみです。 最後まで読んでくれてありがとうございました。皆さんが健康に2024年を迎えられることを願っています。