【PoC前編】Mac miniのOllamaをTailscale経由でWindowsから利用するまで:2026/7/21

Tailscale接続とOllama API公開の設定記録

Mac mini上で動かしているOllamaを、外出先を含む別のWindows PCから安全に利用するため、Tailscaleを使ったプライベートネットワークを構築した。

本記事では、実際につまずいた点も含め、後から同じ手順を再現できるように記録する。


1. 今回の目的

最終的に、次の構成を作る。

Windows PC
  │
  │ Tailscaleによる暗号化通信
  ▼
Mac mini
  │
  │ localhost / TCP 11434
  ▼
Ollama
  │
  ├─ gemma4:12b
  ├─ gemma4:26b
  ├─ gemma4:31b
  └─ qwen3.6:27b-coding-mxfp8

ルーターのポート開放をせず、Windows PCとMac miniを同じTailscaleネットワーク、つまり同じtailnetに参加させる。


2. 今回使用した環境

項目内容
LLMサーバーMac mini M4 Pro、メモリ48GB
MacのOSmacOS 26.5.1
クライアントPCWindows 11 23H2
VPNTailscale 1.98.9
LLM実行環境Ollama 0.30.8
Ollama APIポートTCP 11434
Macの端末名ohidemac-mini
Windowsの端末名mymousepc
MacのTailscale IP100.72.156.117
WindowsのTailscale IP100.121.233.72

IPアドレスは今回の環境で確認した値である。別環境では、Tailscale管理画面に表示されたアドレスを使用する。


3. Mac miniにTailscaleを導入する

3.1 Tailscaleをダウンロードする

Tailscale公式サイトのDownloadページを開き、macOS版をダウンロードする。

macOSでは、Tailscale公式サイトから配布されているStandalone版が推奨されている。インストール後は案内に従って、VPN構成を追加する。

ダウンロード後、Finderの「アプリケーション」にあるTailscaleを起動する。


3.2 画面中央の「9個の点」で止まる場合

初回起動時、Tailscaleの画面中央に9個の点が表示され、読み込みが続くことがある。

この9個の点は操作ボタンではなく、単なる読み込み中のアニメーションである。クリックしても何も起こらない。

今回の環境では、いったんTailscaleを終了して再起動すると、次の画面が表示された。

Allow System Extension
Install Now

ここでInstall Nowをクリックする。


3.3 Tailscaleのシステム拡張を許可する

macOSからTouch IDまたは管理者パスワードを求められたら許可する。

必要に応じて、次の場所を開く。

システム設定
  → 一般
  → ログイン項目と機能拡張
  → ネットワーク機能拡張
  → ⓘ
  → Tailscale Network Extensionをオン

その後、「VPN構成を追加しますか」と表示されたら許可を選択する。

macOSのStandalone版Tailscaleでは、ネットワーク機能を提供するシステム拡張の承認が必要である。


3.4 Tailscaleへログインする

Google、Microsoft、GitHubなどのアカウントを使用してログインする。

今回は次のGoogleアカウントを使用した。

unikarei@gmail.com

今後追加するWindows PCでも、必ず同じアカウントを使用する。

ログイン後、管理画面に次のようにMac miniが表示された。

Machine:  ohidemac-mini
Address:  100.72.156.117
Status:   Connected

これでMac側のTailscale導入は完了である。

画面に表示される「Tighten access controls」のSet upは、今回の個人用PoCでは後回しとした。ただし、運用段階ではアクセス制御を設定する。


4. Windows PCにTailscaleを導入する

Windows版Tailscaleをインストールし、Mac miniと同じGoogleアカウントでログインする。

初期設定後の画面では、次のボタンが表示された。

Open local settings
Open admin console
Close

接続自体は完了しているため、ここではCloseを押して問題ない。

Tailscaleの管理画面を開くと、2台が登録されていた。

MachineTailscale IP状態
mymousepc100.121.233.72Connected
ohidemac-mini100.72.156.117Connected

5. WindowsからMac miniへの通信を確認する

Windows PowerShellで、次のコマンドを実行する。

tailscale ping ohidemac-mini

Mac miniのTailscaleがオフラインだったときは、次のようになった。

ping "100.72.156.117" timed out
no reply

これはコマンドの間違いではなく、Mac側のTailscaleが接続されていなかったことが原因だった。

Mac側をConnectedに戻した後、もう一度実行すると成功した。

pong from ohidemac-mini (100.72.156.117) via DERP(tok) in 115ms
pong from ohidemac-mini (100.72.156.117) via DERP(tok) in 278ms
pong from ohidemac-mini (100.72.156.117) via 182.xxx.xxx.xxx:41641 in 157ms

最初は東京のDERP中継サーバーを経由し、その後、端末間の直接通信に切り替わった。DERPは直接接続を確立できない場合の中継にも使用され、tailscale pingで現在の接続方式を確認できる。

この時点で、次の通信は完成している。

Windows PC
   ↓ Tailscale
Mac mini

6. Mac miniのOllama APIを外部から受け付ける

6.1 Ollamaの標準状態

Ollama APIは、標準では次のアドレスで利用できる。

http://localhost:11434/api

この状態では、Mac自身からは利用できるが、Windows PCから直接アクセスできない。OllamaはOLLAMA_HOST環境変数で待ち受けアドレスを変更できる。


6.2 OLLAMA_HOSTを設定する

Macのターミナルで実行する。

launchctl setenv OLLAMA_HOST "0.0.0.0:11434"

0.0.0.0を指定すると、MacのすべてのネットワークインターフェースでTCP 11434を待ち受ける設定になる。

macOSアプリ版Ollamaでは、環境変数をlaunchctl setenvで設定し、その後Ollamaアプリを再起動する手順が公式に案内されている。


6.3 「Ollamaを完全終了する」の意味

ここで終了するのは、実行中のGemmaやQwenモデルではなく、Ollamaアプリ本体である。

ollama psを実行して何も表示されなくても、Ollamaサーバーが停止しているとは限らない。

ollama ps

ollama psは、現在メモリにロードされているモデルを表示するコマンドである。空欄の場合は、現在ロード中のモデルがないという意味である。

Ollamaアプリを終了するには、Mac上部のメニューバーにあるOllamaアイコンからQuit Ollamaを選択する。

再起動は、Finderで次の場所を開いてOllamaをダブルクリックする。

Finder
  → アプリケーション
  → Ollama

ターミナルから起動してもよい。

open -a Ollama

Ollamaは通常のアプリのような大きな画面が表示されない場合がある。メニューバーにOllamaアイコンが表示されれば起動している。


7. Mac上でOllama APIの動作を確認する

Macのターミナルで実行する。

curl http://localhost:11434/api/tags

/api/tagsは、Ollamaにインストールされているモデル一覧を取得するAPIである。

今回、JSON形式で次のモデルが返った。

gemma4:31b
gemma4:26b
qwen3.6:27b-coding-mxfp8
gemma4:12b

したがって、次の部分は正常に動作している。

Mac mini
   ↓ localhost:11434
Ollama API
   ↓
インストール済みモデル一覧

8. 現時点の到達状況

確認項目状態
MacへのTailscale導入完了
WindowsへのTailscale導入完了
2台を同じtailnetへ登録完了
WindowsからMacへのTailscale ping成功
DERP経由通信成功
端末間の直接通信成功
Mac上のOllama API確認成功
OLLAMA_HOST=0.0.0.0:11434設定実施済み
WindowsからOllamaモデル一覧取得次回確認
WindowsからLLM推論を実行次回確認

つまり、Tailscaleネットワークは完成したが、WindowsからOllama APIを呼び出す最終確認はまだ実施していない


9. 次回実施する手順

9.1 Macの待ち受け状態を確認する

Macのターミナルで実行する。

lsof -nP -iTCP:11434 -sTCP:LISTEN

期待する表示は、概ね次のいずれかである。

*:11434

または、

0.0.0.0:11434

次の表示の場合は、Mac外部から接続できない。

127.0.0.1:11434

その場合は、OLLAMA_HOSTを再設定し、Ollamaアプリを再起動する。


9.2 Windowsからモデル一覧を取得する

Windows PowerShellで実行する。

curl.exe http://100.72.156.117:11434/api/tags

Macに入っているモデル一覧がJSONで返れば、次の経路が完成する。

Windows
  ↓
Tailscale
  ↓
Mac mini:11434
  ↓
Ollama API

9.3 WindowsからGemma 4を実行する

PowerShellで実行する。

$body = @{
    model  = "gemma4:12b"
    prompt = "Explain Tailscale in one sentence."
    stream = $false
} | ConvertTo-Json

$result = Invoke-RestMethod `
    -Uri "http://100.72.156.117:11434/api/generate" `
    -Method Post `
    -ContentType "application/json" `
    -Body $body

$result.response

Ollamaの/api/generateへモデル名とプロンプトをPOSTすると、モデルの回答を取得できる。


10. 今後、特に注意すること

10.1 0.0.0.0はTailscaleだけに公開する設定ではない

OLLAMA_HOST="0.0.0.0:11434"

とすると、Tailscaleだけでなく、MacのLAN側インターフェースでもOllamaが待ち受ける。

そのため、家庭内LANに接続した別端末からもアクセスできる可能性がある。ルーターでTCP 11434をインターネットへポート転送してはいけない。

将来的には、次のいずれかを検討する。

  • macOSファイアウォールまたはpfでTailscale側からのみ許可
  • Tailscale ACLでWindows PCからMac miniへの通信だけを許可
  • 認証付きリバースプロキシをOllamaの前段に置く
  • DockerアプリもTailscale経由に限定する

OllamaのローカルAPIは、localhost:11434への通常のローカルアクセスでは認証を要求しない。そのため、待ち受け範囲を広げる場合はネットワーク側での制限が重要になる。


10.2 Macのスリープ対策

Mac miniがスリープすると、WindowsからOllamaへ接続できなくなる可能性がある。

LLMサーバーとして運用する場合は、電源接続時にMac本体が自動スリープしないよう設定する必要がある。

確認対象は次のとおり。

システム設定
  → ロック画面
  → ディスプレイをオフにする時間

システム設定
  → 省エネルギー
  → ディスプレイがオフのときに自動でスリープさせない

ディスプレイを消すことと、Mac本体をスリープさせることは別である。


10.3 Mac再起動後の自動復旧を確認する

今回の設定では、Macを再起動した後の動作はまだ確認していない。

次回、再起動後に次の項目を確認する。

tailscale status
curl http://localhost:11434/api/tags
lsof -nP -iTCP:11434 -sTCP:LISTEN

特に確認すべき点は次の3つである。

  1. Tailscaleが自動接続されるか
  2. Ollamaが自動起動するか
  3. OLLAMA_HOSTの設定が再起動後も有効か

再起動後に127.0.0.1:11434へ戻る場合は、環境変数を恒久的に設定する仕組みを追加する。


10.4 大型モデルの同時利用

今回のMac miniには、12Bから31Bまで複数のモデルが保存されている。

ただし、ollama listに表示されているモデルがすべて同時にメモリへロードされているわけではない。現在メモリにロードされているモデルは、次のコマンドで確認する。

ollama ps

48GBメモリのMac miniで31B級モデルを実行すると、他のアプリやDockerとメモリを取り合う可能性がある。

最初の遠隔接続試験では、比較的軽い次のモデルを使う。

gemma4:12b

接続が安定してから、26B、31B、Qwen 27Bへ順番に切り替える。


10.5 接続が遅い場合

tailscale pingの結果が常に次のようになる場合は、中継通信になっている。

via DERP(tok)

通信自体は成功しているが、LLMのストリーミング表示や大きなファイル転送では遅延が増える可能性がある。

次のようにIPアドレスとポートが表示されれば直接接続である。

via xxx.xxx.xxx.xxx:41641

直接接続できない場合は、Windows側とMac側のネットワーク環境、UDP通信、ルーター、ファイアウォールを確認する。DERPは直接接続できない場合にも通信を維持するための中継経路である。


11. 次回の作業チェックリスト

□ MacでTCP 11434の待ち受けアドレスを確認
□ Windowsから /api/tags を取得
□ Windowsから gemma4:12b を実行
□ Mac再起動後のTailscale自動接続を確認
□ Mac再起動後のOLLAMA_HOST設定を確認
□ Macのスリープを無効化
□ Tailscale ACLを設定
□ Ollama APIのアクセス範囲をTailscaleへ限定
□ Windows側にOllama用の簡易Web UIまたはクライアントを導入
□ Dockerアプリ群も同じTailscale経由で接続

12. まとめ

今回、Windows PCとMac miniをTailscaleで接続し、WindowsからMac miniへtailscale pingが通るところまで確認できた。

また、Mac miniではOllama APIが起動し、/api/tagsからGemma 4やQwenのモデル一覧を取得できた。

現時点の構成は次のとおりである。

Windows PC
  │
  │ Tailscale接続:確認済み
  ▼
Mac mini
  │
  │ OllamaローカルAPI:確認済み
  ▼
Gemma 4 / Qwen

次回はWindowsからhttp://100.72.156.117:11434へアクセスし、実際にGemma 4の回答を取得する。ここまで成功すれば、Mac miniを個人用のリモートLLMサーバーとして利用する最短PoCが完成する。

コメント

タイトルとURLをコピーしました