- Tailscale接続とOllama API公開の設定記録
- 1. 今回の目的
- 2. 今回使用した環境
- 3.1 Tailscaleをダウンロードする
- 3.2 画面中央の「9個の点」で止まる場合
- 3.3 Tailscaleのシステム拡張を許可する
- 3.4 Tailscaleへログインする
- 6.1 Ollamaの標準状態
- 6.2 OLLAMA_HOSTを設定する
- 6.3 「Ollamaを完全終了する」の意味
- 9.1 Macの待ち受け状態を確認する
- 9.2 Windowsからモデル一覧を取得する
- 9.3 WindowsからGemma 4を実行する
- 10.1 0.0.0.0はTailscaleだけに公開する設定ではない
- 10.2 Macのスリープ対策
- 10.3 Mac再起動後の自動復旧を確認する
- 10.4 大型モデルの同時利用
- 10.5 接続が遅い場合
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のOS | macOS 26.5.1 |
| クライアントPC | Windows 11 23H2 |
| VPN | Tailscale 1.98.9 |
| LLM実行環境 | Ollama 0.30.8 |
| Ollama APIポート | TCP 11434 |
| Macの端末名 | ohidemac-mini |
| Windowsの端末名 | mymousepc |
| MacのTailscale IP | 100.72.156.117 |
| WindowsのTailscale IP | 100.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台が登録されていた。
| Machine | Tailscale IP | 状態 |
|---|---|---|
mymousepc | 100.121.233.72 | Connected |
ohidemac-mini | 100.72.156.117 | Connected |
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つである。
- Tailscaleが自動接続されるか
- Ollamaが自動起動するか
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が完成する。


コメント