ルータがポート開放に対応していない環境で、Tailscale だけを使って 自宅サーバーを組んだときの記録。踏んだ罠と、なぜそうなるのかを残しておく。 うまくいった手順より、うまくいかなかった理由のほうが後で役に立つので、 そちらを厚めに書いている。全部この家のサーバーで実際に起きたこと。
MagicDNS と tailnet 証明書で、1サービス1ホスト名の HTTPS を作る。 ドメイン代も固定IPも要らない。設定スキーマとキーの種類で3回転んだ話。
INPUT を DROP にしても -p 3000:3000 は LAN から丸見えになる。
なぜ効かないのか、そして塞いだあとに別のものが壊れた話。
中身は閉じたまま、選んだ1つだけを公開する。既定の ACL が全デバイスに 公開権限を与えている件と、DNS のネガティブキャッシュに引っかかった話。
証明書の再発行中は一斉に到達不可になる。待てば戻る。
あと funnel --off が「ハンドラが存在しない」と言って効かなくなる。
ボリューム名を間違えるとエラーにならず空のボリュームが新規作成される。 イメージのサイズは3通りの数字が出る。どちらも同じ日に踏んだ。
参照先のディレクトリごと存在しないのに1ヶ月動いていた。
docker inspect から compose を書き起こして、実際に作り直すまで。
:latest は「新しい」を保証しない
4年前で止まったタグと、5ヶ月前で止まった非公式ミラー。 同じ家のサーバーで2件見つかった。どう検出するか。
DB マイグレーションは一方向で、戻す手段はバックアップからの復元しかない。 固定と更新を分ける理由と、「0件」を見たときの確かめ方。
root 所有のボリュームを、ホストに何も入れず、sudo も使わずに取る。 外付けに移すときの「バックアップできているつもり」事故の防ぎ方も。
交換する前に、その鍵が実際に何を守っていたかを数える。 新しい鍵をログに出さずに作る方法と、痕跡の消し方。
UI からモデルが1つも見えない。原因は Docker ネットワークで、 そもそも一度も繋がっていなかった。GPU に載っているかの確かめ方も。
共有定義を追記する場所を間違えると、それ以降が静かに効かなくなる。
testparm は教えてくれていた。
| ホスト | Ubuntu 24.04 / NVMe 1TB / RTX 4060 Ti |
|---|---|
| ネットワーク | ルータがポート開放不可。固定IPなし。ドメインなし |
| 公開手段 | Tailscale のみ(tailnet 内 + Funnel 1ページ) |
| 動いているもの | Jellyfin / Grafana / Prometheus / Ollama / Open WebUI / ComfyUI / Portainer など12コンテナ |
| バックアップ | restic → 外付け SSD。毎日 04:00 |