Ollama を外部に公開せずに、別のコンピューターやスマートフォンから使う

Munim, Inc. の MV2 による。2026 年 10 月 12 日に Ollama FAQ、Ollama のサーバーのソースコード(server/routes.go)、Tailscale Serve のドキュメント、Open WebUI の HTTPS using Tailscale のページ、LM Studio のサーバーのドキュメントと照合済み。ご自身のマシンにのみ使ってください。このページは英語の原文から AI で翻訳したものです。内容に食い違いがある場合は原文が優先します。

よくある助言は「OLLAMA_HOST=0.0.0.0 を設定する」(または macOS・Windows のアプリで Settings → Expose Ollama to the network をオンにする)です。これで動きますが、Ollama の API にはログインがないため、そのネットワーク上のすべての端末があなたのモデルを使い、ダウンロードや削除をし、今年の Ollama の CVE(英語)が見つかったエンドポイントにアクセスできるようになります。ルーターでポートを転送したことがあれば、それはインターネット全体を意味します。用途を満たす中で最も範囲の狭い方法を選んでください:

やりたいこと使う方法ほかに Ollama に届くのは誰か
自分のノート PC 1 台から、ときどき使うA. SSH トンネル誰もいません。新しく開くものはありません。
自宅でも外出先でも、スマートフォンからチャットするB. Tailscale Serve 経由の Open WebUIあなたの tailnet だけで、しかも Open WebUI のログインを通った場合のみ。Ollama は localhost のままです。
ほかの端末のアプリから Ollama API を使う(別の PC のツール、n8n、スマホアプリ)C. tailnet 上の Ollamatailnet 内の端末
同じ家庭内ネットワークのほかのマシンD. LAN とファイアウォールルールそのネットワーク上のすべての端末(ログインなし)

やってはいけないこと: ルーターでポート 11434 を転送する。提供元のアクセス制御なしで Ollama に tailscale funnel、ngrok、cloudflared を使う(3 つともインターネットに公開します)。「とりあえず動かすため」に OLLAMA_ORIGINS=* を設定する。最後のものは、どのWeb サイトから呼び出せるかを変えるだけで、どの端末から使えるかは変わりません(ブラウザチェック(英語)を参照)。

A. SSH トンネル: ノート PC 1 台、何も開かない

GPU マシンの Ollama は既定の 127.0.0.1:11434 のままにします。ノート PC から:

ssh -N -L 11434:127.0.0.1:11434 you@gpu-box

これを実行している間は、ノート PC の http://127.0.0.1:11434 が GPU マシンの Ollama になるので、ollama list、Open WebUI、既定で localhost を使うものはそのまま動きます。curl http://127.0.0.1:11434/api/version で確認してください。ノート PC でも Ollama を 11434 で動かしている場合は、別のポートを転送し(-L 11435:127.0.0.1:11434)、クライアントをそちらに向けます。たとえば OLLAMA_HOST=127.0.0.1:11435 ollama list です。

(コマンドの you@gpu-box は、ご自身のユーザー名と GPU マシンの名前に置き換えてください。)GPU マシンには SSH サーバーが必要です。Linux ではたいてい最初から動いています。macOS では システム設定 → 一般 → 共有 → リモートログイン をオンにします。Windows ではオプション機能の「OpenSSH サーバー」を追加します。ssh クライアントは Windows 10/11、macOS、Linux に標準で入っています。リクエストの宛先が 127.0.0.1 になるので、Ollama の Host チェック(後述)も通ります。

B. スマートフォンから: Tailscale Serve 経由の Open WebUI

スマートフォンからチャットするなら、スマートフォンとサーバーを同じプライベートネットワークに入れ、Ollama ではなく Open WebUI にアクセスします。Ollama は localhost から出ず、Open WebUI のアカウントが入り口の鍵になります。

  1. サーバーとスマートフォンの両方に Tailscale をインストールし、同じアカウントでサインインします。
  2. Open WebUI は localhost のままにします。Docker では -p 127.0.0.1:3000:8080(Compose では ports: [ "127.0.0.1:3000:8080" ])とし、Ollama にはこれまでどおり OLLAMA_BASE_URL で接続します。
  3. サーバーで:
    tailscale serve --bg 3000
    tailscale serve status
    ステータスにあなたのアドレス https://<machine>.<tailnet>.ts.net が表示されます(マシン名と tailnet 名が入ります)。Tailscale Serve を使うには、tailnet で HTTPS 証明書が有効になっている必要があります。無効の場合、最初の実行で同意ページに案内されます。--bg を付けると再起動後も動き続けます。
  4. Open WebUI の Tailscale のページにあるとおり、Open WebUI に自分のアドレスを設定します: WEBUI_URL=https://<machine>.<tailnet>.ts.net と CORS_ALLOW_ORIGIN=https://<machine>.<tailnet>.ts.net。コンテナを作り直してください。(これらが重要な理由と、Cookie や秘密鍵の設定については Open WebUI behind a proxy(英語)を参照。)
  5. スマートフォンでそのアドレスを開き、サインインします。「ホーム画面に追加」でアプリのアイコンになります。Open WebUI のドキュメントによると、音声通話などのブラウザ機能には HTTPS が必要で、Serve がそれを提供します。

確認: スマートフォンの Wi-Fi をオフにして再読み込みします。モバイルデータ通信でも使えれば成功です。tailnet に入っていない端末では、そのアドレス自体が開けないはずです。Open WebUI で新規登録が開いている場合は、自分のアカウントを作成した後で閉じてください(ENABLE_SIGNUP=False)。元に戻すには tailscale serve reset です。

tailscale funnel は使わないでください。Funnel は同じアドレスをインターネットに公開します。Open WebUI のドキュメントもこれを警告しており、Open WebUI の 9 月のアドバイザリー(英語)を考えると、プライベートな tailnet のほうが安全な既定の選択です。

C. Ollama API そのものを tailnet で使う

生の API が必要なクライアントもあります。別の PC の Ollama、別のサーバー上の n8n やスクリプト、Ollama の URL に直接つなぐスマホアプリなどです。

tailscale serve 11434 が 403 を返す理由

すぐ思いつく方法、つまり localhost だけで待ち受ける Ollama の前に tailscale serve を置くと、すべてのリクエストが 403 Forbidden になります。原因は Tailscale ではありません。Ollama がループバックアドレスで待ち受けているとき、その allowedHostsMiddleware がリクエストの Host ヘッダーを確認します。受け付けるのは localhost、そのマシン自身のホスト名、.localhost・.local・.internal で終わる名前、そしてループバック・プライベート・ローカルインターフェースの IP だけです。このチェックは Web サイトからの DNS リバインディングを防ぐためのものです。Serve は <machine>.<tailnet>.ts.net をそのまま渡しますが、これはリストにありません。サーバー上で確かめられます: curl http://127.0.0.1:11434/api/version は応答しますが、curl -H "Host: gpu-box.example.ts.net" http://127.0.0.1:11434/api/version は 403 になります。Ollama がループバック以外のアドレスで待ち受けている場合、このチェックは行われません。

対処法 1(どの OS でも): Ollama を Tailscale のアドレスだけにバインドする

  1. サーバーの tailnet 上の IPv4 アドレスを調べます: tailscale ip -4(例: 100.101.102.103)。
  2. Ollama FAQ の手順どおりに OLLAMA_HOST=100.101.102.103:11434 を設定します。Linux: sudo systemctl edit ollama.service を実行し、[Service] の下に Environment="OLLAMA_HOST=100.101.102.103:11434" を追加してから sudo systemctl daemon-reload && sudo systemctl restart ollama。macOS アプリ: launchctl setenv OLLAMA_HOST "100.101.102.103:11434" の後、Ollama を終了して開き直します。Windows: Ollama を終了し、「アカウントの環境変数を編集」で OLLAMA_HOST を設定してから、スタートメニューで起動します。アプリの「Expose Ollama to the network」はオフのままにしてください。
  3. 実際にどこで待ち受けているかを確認します(Linux ss -tlnp | grep 11434、macOS lsof -nP -iTCP:11434 -sTCP:LISTEN、Windows netstat -ano | findstr :11434)。0.0.0.0 や * ではなく、100.x のアドレスが出れば正しい状態です。
  4. クライアントは http://100.101.102.103:11434、またはマシンの MagicDNS 名(http://gpu-box:11434 など)を使います。別のコンピューターの Ollama CLI からは OLLAMA_HOST=http://gpu-box:11434 ollama list です。

副作用が 2 つあります。(1)サーバー自身で localhost:11434 が応答しなくなります。ローカルのツールも 100.x のアドレスに向けてください。たとえば OLLAMA_HOST=100.101.102.103:11434 ollama run ... や、同じマシンの Open WebUI の OLLAMA_BASE_URL です。(2)Tailscale がアドレスを得る前に Ollama が起動すると、バインドに失敗します。Ollama のインストーラーが書く Linux のユニットには Restart=always と RestartSec=3 があるので、バインドできるまで再試行し続けます。macOS と Windows では、Tailscale の接続後に Ollama を再起動してください。

対処法 2(ufw を使う Linux): すべてで待ち受け、tailnet からだけ通す

この方法なら localhost:11434 も使えたままです。OLLAMA_HOST=0.0.0.0:11434 を(上記の方法で)設定してから:

sudo ufw allow OpenSSH            # first, if you manage this box over SSH
sudo ufw default deny incoming
sudo ufw allow in on tailscale0 to any port 11434 proto tcp
sudo ufw enable
sudo ufw status verbose            # no other rule should allow 11434

(コメントの意味: このマシンを SSH で管理しているなら最初の行を先に実行すること。ステータスでは、ほかに 11434 を許可するルールがないこと。)これはネイティブにインストールした Ollama が対象です。Ollama を Docker でポートを公開して動かしている場合、ufw は効きません。Docker が独自のファイアウォールルールを書き込むためです(Docker can't reach Ollama(英語)を参照)。

どちらの場合も: 既定では、tailnet 内のすべての端末がほかのすべての端末に届きます。マシンをほかの人と共有している場合や、信頼度の低い端末がある場合は、tailnet のアクセスポリシーでポート 11434 を自分の端末だけに制限してください。アプリにもキーを要求したい場合は、前段に Bearer キーのプロキシ(英語)を置きます。

D. 同じ家庭内ネットワークだけ: LAN とファイアウォールルール

信頼できる家庭内ネットワークなら問題ありません。オフィス、寮、ホテル、カフェの Wi-Fi では不適切です。ゲストを含め、そのネットワークの誰もがログインなしであなたの Ollama を使えてしまいます。

  1. OLLAMA_HOST=0.0.0.0:11434 を設定する(手順は対処法 1 と同じで、値を 0.0.0.0 にする)か、アプリの「Expose Ollama to the network」をオンにします。Ollama を完全に終了してから開き直してください。
  2. 接続できる相手を制限します:
  3. ルーターで 11434 のポート転送は絶対に設定しないでください。

確認: ネットワーク上の別の端末から curl http://<server LAN IP>:11434/api/version(サーバーの LAN 内 IP に置き換え)を実行すると応答があるはずです。モバイルデータ通信のスマートフォン(Wi-Fi オフ)からは、同じアドレスが応答してはいけません。

LM Studio

LM Studio には Developer → Server Settings に独自のスイッチがあります。0.4.0 以降では、Serve on Local Network をオンにする前に Require Authentication をオンにし、Manage Tokens でクライアントに必要な権限だけを持つトークンを作成して、クライアントに Authorization: Bearer <token> を送らせます。認証は既定でオフです。Web ページが本当に必要としない限り Enable CORS はオフのままにしてください(ブラウザチェック(英語)はポート 1234 も確認します)。方法 A、C、D はポート 1234 でも同じように使えます。たとえば ssh -N -L 1234:127.0.0.1:1234 you@gpu-box です。

結果を確認する

無料のスクリプト local-ai-checkup は、ネットワークから届いてしまう AI 関連のポートを指摘し、Ollama のバージョン、OLLAMA_ORIGINS、Docker のポート公開も確認します。読み取り専用で、マシンの外には何も送信しません。その後、CVE チェッカー(英語)でバージョンを確認してください。締めるためのチェックリストは「Ollama が外部に公開されていないか?」にあります。

代わりに確認してほしい場合

Munim, Inc. の MV2 は、マシン 1 台のローカル AI ヘルスチェック(49 米ドル)と、最大 5 台または共有の Ollama・Open WebUI サーバー 1 台を対象にした小規模オフィス向けチェック(199 米ドル)を提供しています。何が公開されていて、何が危険または遅いのか、何から直すべきかをまとめた報告書を、お使いの OS 向けの正確なコマンドと、GPU に合うモデルの提案とともにお届けします。報告書は英語です。報告書のサンプル(英語)をご覧ください。Stripe で 49 ドルを支払うか 199 ドルを支払うと、その後 munimversion2@gmail.com へ、python3 local_ai_checkup.py --json の出力、お使いの OS、用途をメールで送ってください。MV2 がパスワード、キー、リモートアクセスを求めることはありません。