使ってないPCを「自分専用AIサーバー」にする。Ollama常駐+Tailscaleで外からも安全に

目次 / INDEX

机の奥で眠ってる古いノートPCとか、使わなくなったデスクトップってないだろうか。あれを「24時間動く自分専用のサーバー」にすると、意外と生活が変わる。外出先のスマホから、いつでも自分のAIに聞けたり、家に置いたファイルにアクセスできたり。

この記事では、その箱(常時稼働マシンをこう呼ぶことにする)の上でAIを動かして、外からも安全に使えるようにするところまでを、順番に書いていく。ただ手順を並べるんじゃなくて、なんでそうするのかも一緒に説明する。専門用語はできるだけ噛み砕くので、身構えなくて大丈夫。

結論 余ったPCやミニPCを常時稼働させ、Ollamaで手元のAIを動かし、Syncthingでファイルを同期、Tailscaleで外からアクセスする。肝は、ルーターの受信ポートを一切開けずに済むこと。省電力なミニPCなら電気代は年3000円ほど。

何を作るのか

先に完成形を出しておく。作るのはこういう仕組みだ。

自宅AIサーバーの全体像。余ったPCを常時稼働の箱にして、その中でOllama(AI)・Syncthing(同期)・Tailscale(安全な入口)を動かし、スマホやノートPCからポート開放なしで安全につなぐ図。

やることは、余ったPC(=箱)をつけっぱなしにして、その中で3つのソフトを動かすだけ。

  • Ollama:手元でAI(ChatGPTのような対話AI)を動かす本体。
  • Syncthing:ファイルを複数の機器で自動的にそろえる係。
  • Tailscale:外出先からでも、この箱に安全につなぐための入口。

そして一番大事なのが、図の下に書いた「ルーターの受信ポートは開けない」という点。ここが今回の肝で、最後のTailscaleの章で詳しく説明する。まずは箱にする機械選びから。

どのマシンを箱にするか

ちなみに僕が箱にしたのは、昔ゲーミング用に自作したまま使わなくなっていたWindowsのデスクトップだ。最近は「NASを買ってAIを常時動かす」のが流行っているけど、NASは普通に高い。だったら埃をかぶっていた自作PCをそのまま常時稼働マシンに転用すれば、追加投資ゼロで同じことができる——というのが最初の動機だった。同じように「使ってないPCが1台ある」なら、それが一番の近道になる。

手持ちの余りPCがあればそれでいい。なければ買うことになる。正直に比べるとこうだ。

箱の候補消費電力の目安電気代の目安AIの速さ総評
ミニPC(N100など)6〜10W年3000円弱小さめのモデルなら実用新品2万円前後。静か・省電力・安いで万人向け
使ってないノートPC15〜30W月100〜300円CPU次第0円で始められる。バッテリーが停電対策になるのが地味に強い
古いデスクトップ40〜80W以上月500〜1500円GPUを積めれば最速電気代と騒音がネック。GPUがあるなら別格
古いMac mini(Apple Silicon)数W〜安い速い省電力・静音・AIも速い三拍子。余ってるなら最有力
NAS(ネットワークHDD)15〜30W安い実用不可レベルストレージは最強。AI実行には向かない

電気代はざっくりこの式で出せる。

年間の電気代 ≈ 消費電力(W) ÷ 1000 × 24時間 × 365日 × 31円
例)10W なら 10 ÷ 1000 × 24 × 365 × 31 ≈ 2,700円/年

ここで言いたいのは、「余ってる古いデスクトップを使い回すのが一番お得」とは限らないこと。60Wの古いデスクトップは年1万6千円かかるので、それなら新品のN100ミニPC(年3000円弱)の方が2〜3年で電気代の差だけで元が取れる。うるさいし熱いし埃も吸う。なので、手持ちの省電力なノートやMac miniが余ってるならそれを、なければN100系のミニPCを新品で買うのが結局いちばん安くて静か、というのが正直な結論だ。

NASについても正直に書くと、NASはLLMを「動かす箱」には向かない。CPUしか無いので、そこそこのモデルを動かすと1回の返事に数分かかって使い物にならない。NASを持ってるなら、AIモデル(1本で数GBある)や同期用のデータを置く「倉庫」として使って、AIの実行はミニPCやMac miniに任せる、という分担がいい。

24時間動かす設定:まず「寝させない」

箱は常時稼働が前提。ところがPCは、放っておくとスリープ(省電力のためにお休みする状態)に入る。寝てしまうと、外からアクセスしても反応しないので、まずこのスリープを止めるのが最初の設定になる。

モニタもキーボードも外して、電源だけつないで部屋の隅に置く、という使い方(これを「ヘッドレス」=頭無し、と言う)が基本だ。以下、OS別に「寝させない」コマンドを載せる。

Linux(Ubuntu Serverなど。古いPCを箱にするなら一番安定):

# スリープ・休止をまとめて無効化
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

ノートPCを箱にするなら、「蓋を閉じても動き続ける」設定も入れる(/etc/systemd/logind.confHandleLidSwitch=ignore)。閉じて棚に置けるようになる。

macOS(Mac miniを箱にする場合):

sudo pmset -a sleep 0          # 本体を寝かせない
sudo pmset -a disksleep 0      # ディスクを止めない
sudo pmset -a autorestart 1    # 停電から復帰したら自動で起動

さらに、システム設定 → エネルギーで「ディスプレイオフ時に自動でスリープしない」をオンにする。これがモニタ無し運用の決定打になる。

Windows(11)の場合:

# 管理者PowerShellで
powercfg /change standby-timeout-ac 0     # スリープしない
powercfg /hibernate off                   # 休止を無効化

もうひとつ、停電のあと自動で電源が入る設定は、OSではなくBIOS/UEFI(PC起動時の一番下の設定画面)で行う。「Restore on AC Power Loss」を「Power On」にしておくと、停電で落ちても復電時に勝手に立ち上がる。これはOS側では設定できないので、箱にするなら一度BIOSに入って確認しておくといい。

箱の中でAIを動かす:Ollamaを常駐させる

ここからが本題。箱にOllamaを入れて、家の他の機器(スマホや別のPC)からも使えるようにする。

ひとつ注意点があって、Ollamaは初期設定だと箱自身からしか使えない。これは、待ち受けるアドレスが 127.0.0.1(自分自身、という意味の特別なアドレス)に固定されているから。他の機器から使うには、これを 0.0.0.0(全部の入口で受ける、という意味)に変えてあげる必要がある。

Linuxなら、Ollamaを常駐サービスとして動かしつつ、この設定を入れる。

curl -fsSL https://ollama.com/install.sh | sh   # インストール

sudo systemctl edit ollama.service

エディタが開くので、これを書いて保存する。

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

反映して、起動時に自動で動くようにする。

sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl enable ollama     # 電源を入れたら自動でOllamaが常駐する

ollama pull llama3.2:3b          # まず軽い3Bのモデルから

これで、同じ家のネットワークにいる別の機器から、箱のAIを叩けるようになる(箱のIPアドレスが 192.168.1.50 なら、そこの 11434 番宛て)。

スマホからChatGPT風に使う:Open WebUI

コマンドで叩くのは面倒なので、ブラウザからチャットできる画面(Open WebUI)を立てると一気に実用的になる。Dockerというコンテナの仕組みで動かすのが定番だ。

docker run -d -p 3000:8080 \
  -e OLLAMA_BASE_URL=http://192.168.1.50:11434 \
  -v open-webui:/app/backend/data \
  --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

あとは http://箱のIP:3000 をブラウザで開くだけ。初回にログインアカウントを作れば、家の中ならスマホからでもChatGPTみたいに使える。

どのくらいのスペックで何が動くか

正直な目安を書いておく。ポイントは「モデルがメモリに収まらないと一気に遅くなる」こと。

モデルの大きさ必要メモリの目安速さの感覚
3Bクラス4GB〜N100ミニPCでも実用(軽い)
8Bクラス8GB〜GPUなしだと少しもっさり、GPUありで快適
27B以上16GB以上のVRAMハイエンドGPUが要る

GPUのないミニPCなら、現実的には3B〜8Bまでが実用範囲。速さが欲しいならApple SiliconのMacかGPU付きPC、省電力・低予算なら3Bで割り切る、というのが正直な線引きだ。メモリがどれくらい要るかは、こっちの記事にもう少し詳しく書いた。

関連記事 大学生のローカルLLM|メモリは16GBで足りる?それとも32GB? ローカルでAIを動かすとき、メモリはどれくらい要るのかを実測でまとめた。 読む →

ファイルを同期する:Syncthing

箱ができたら、次はファイル同期。母艦(箱)とノートPC、スマホの間で、同じフォルダを自動でそろえてくれるのがSyncthingだ。

なんでDropboxとかじゃなくてこれなのか。一番の違いは、Syncthingは機器同士が直接やり取りすること(これを「P2P」=ピアツーピアと言う。中央の業者のサーバーを経由しない、という意味)。ここから来る利点が大きい。

  • 無料で容量無制限:自分のディスクの空きが全て。月額もない。
  • データを業者に預けない:クラウドのように第三者のサーバーに全ファイルが常駐しない。プライバシー的に安心。
  • 同じ家の中なら爆速:LAN内で直接コピーするので速い。

正直なデメリットも書くと、こう。

  • 全部の機器がオンラインの時しか同期しない:だから常時稼働の箱を「中継ハブ」にすると、他の機器がバラバラのタイミングでも回るようになる。箱がここでも効いてくる。
  • 同じファイルを2つの機器で同時に編集すると競合する~sync-conflict~ みたいなファイルが生まれる。これは「バージョニング(履歴を残す設定)」を必ずオンにしておけば、巻き戻せるので事故らない。

導入は、各機器にSyncthingを入れて、機器ごとに割り振られる長いID(Device ID)を互いに登録し合い、共有したいフォルダを指定するだけ。難しくはない。

外から安全に使う:Tailscale(ここが核心)

最後に、外出先からこの箱を使えるようにする。ここが今回一番大事なところで、やり方を間違えると家中を危険に晒すので丁寧に書く。

昔ながらのやり方(ポート開放)は、なぜ危険か

「自宅のPCを外から使う」の昔ながらの方法は、ルーターで受信ポートを開けて、自宅を直接インターネットに向けて開放するやり方だった。これは「ポート開放(ポートフォワーディング)」と呼ばれる。

これがなぜ危険かというと、ポートを開けた瞬間から、世界中の自動プログラム(ボット)が24時間そのポートを叩いて侵入を試みるから。SSHの入口(22番)なんて開けた瞬間から総攻撃される。一度でも弱いパスワードや古い脆弱性があれば入られる。家庭用ルーターを素人が管理して、常時開いた入口を持つのはリスクが高すぎる。だから、ポート開放はやらない。

Tailscaleは、なぜポートを開けずに外から入れるのか

Tailscaleは、この問題を根本から避ける仕組みだ。ざっくり言うと、自分の機器(箱・スマホ・ノート)を全部、**「家の中にいるみたいに直接つながる、自分だけの私設ネットワーク」**に入れてくれる(こういうのを「VPN」と言い、Tailscaleが作るこの網を「tailnet」と呼ぶ)。

肝は、その繋がり方だ。ポート開放みたいに「外から入ってきてもらう」んじゃなくて、各機器がそれぞれ外に向かって接続を張って、中央の待ち合わせ役のところで出会う方式になっている。つまり全機器が「外向き」の接続だけで完結する。だから、ルーターで受信ポートを開ける必要がゼロ。家をインターネットに晒さずに済む。しかも待ち合わせ役が扱うのは機器同士を引き合わせる部分だけで、通信の中身(ファイルやチャット)はそこを通らない。

導入は拍子抜けするほど簡単で、箱に入れて認証するだけ。

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# 表示されたURLをブラウザで開いてログインすれば完了

スマホ側は、Tailscaleアプリを入れて同じアカウントでログインするだけ。これだけで、外出先の4G/5Gからでも、自宅の箱に直接つながる。管理画面で「MagicDNS」をオンにすると、覚えにくいアドレスの代わりに myserver みたいな名前で呼べるようになるので、これも入れておくと楽だ。

セキュリティで押さえること

  • 受信ポートは絶対に開けない。外からのアクセスはTailscale経由だけにする。
  • Ollamaにはパスワード認証が無い0.0.0.0 で公開しても、それは「家の中とtailnetの中だけ」に留めること。インターネットに直接公開するのは絶対にダメ(誰でもAIを操作・悪用できてしまう)。
  • SSH(箱に遠隔ログインする仕組み)はパスワードを無効にして鍵だけにする
  • 自動更新をオンに。OSもTailscaleもOllamaも、更新を止めると穴になる。
  • 同期はバックアップではない。Syncthingで全機器がそろっていても、消したら全機器から消える。別のディスクに定期バックアップは別途とっておく。

こういう人には向かない

正直に、向かない場合も書いておく。

  • 管理の責任が全部自分に来る。クラウドと違って、落ちたら直すのは自分。旅行中にディスクが飛べば同期もアクセスも止まる。
  • 古いPCは意外と高くつく:電気代・騒音・発熱。省電力機か新品ミニPCの方が結局は快適なことが多い。
  • ローカルLLMはGPTほど賢くない:GPUなし機の小さいモデルは、ChatGPTの完全な代わりにはならない。用途は「要約・下書き・分類・外に出したくない作業」に割り切る。
  • そもそもTailscale+クラウドAIで足りる人も多い:「自宅にサーバーを持つこと」自体が目的じゃないなら、無理に箱を持たない選択も正解だ。

まず最小構成でこう始める

いきなり全部やらず、この順番で1本道を通すのがいい。

  1. 箱を1台用意(余ったPCか、N100系ミニPC)。OSを入れて、BIOSで「停電復帰時に自動起動」をオン。
  2. スリープを止める(上のOS別コマンド)。
  3. Tailscaleを入れる。スマホにもアプリを入れて同じアカウントでログイン、MagicDNSをオン。→ この時点で「外から安全に入れる箱」が完成する。
  4. Ollamaを入れて OLLAMA_HOST=0.0.0.0 で常駐、軽い3Bモデルを1つ入れる。
  5. Open WebUIを立てて、スマホのブラウザからチャット。→ 外出先からも自分専用AIが使える。
  6. 慣れたらSyncthingで同期を足したり、モデルを大きくしたり、NASを倉庫に足したりと、少しずつ広げる。

3〜4のあたりまで来れば、「省電力・ポート開放なし・外からAIが使える自分専用サーバー」が形になる。最初から完璧を目指さず、まず箱を1台寝させないところから始めるのがいい。

よくある質問

自宅サーバーを外から使うのにルーターのポート開放は必要?

不要。Tailscaleを使えば、ルーターの受信ポートを一切開けずに、外出先から自宅の機器へ安全につなげる。ポート開放は攻撃対象になるので避けるのが今の定石。

使っていないPCを常時稼働させると電気代はどれくらい?

消費電力による。省電力なN100ミニPC(約10W)なら年3000円弱、古いデスクトップ(60W)だと年1万6千円ほど。古いPCは電気代で意外と高くつく。

NAS(ネットワークHDD)でローカルLLMは動く?

実用的には難しい。NASのCPUだと7Bクラスのモデルは1回の応答に数分かかる。NASはモデルや同期データを置く倉庫にして、AIの実行はミニPCやMac miniに任せるのがいい。