OllamaをTailscaleのプライベートネットワーク経由で公開する方法|ゼロコンフィグVPNでチームがどこからでもローカルLLMに安全接続する手順

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > ローカルLLM > OllamaをTailscaleのプライベートネットワーク経由で公開する方法|ゼロコンフィグVPNでチームがどこからでもローカルLLMに安全接続する手順
「複数メンバーがそれぞれのPCからOllamaサーバーにアクセスできるようにしたいが、VPN設定が複雑すぎる」
「SSHポートフォワーディングでは繋ぎ直しが面倒で、固定のURLで常時使えるようにしたい」

そんな悩みを持つサーバー管理者やエンジニアは多い。この記事では、Tailscaleを使ってOllamaをチームのプライベートネットワークに公開する手順を解説する。インストールと `tailscale up` だけでNATを越えたメッシュVPNが完成し、ドメイン取得もNginx設定もTLS証明書管理も不要になる。

この記事のポイント

・Tailscaleをインストールして `tailscale up` するだけでOllamaサーバーとクライアントが同一プライベートネットワークにつながる
・`OLLAMA_HOST` をTailscale IPにバインドすることでインターネット公開ゼロのまま、チームからAPIにアクセスできる
・TailscaleのACLポリシーでタグを使い、接続元をチームメンバーに限定できる
・MagicDNSを有効化するとIPの代わりに `http://サーバー名:11434` という固定URLでOllamaにアクセスできる


OllamaをTailscaleのプライベートネットワーク経由で公開する方法|ゼロコンフィグVPNでチームがどこからでもローカルLLMに安全接続する手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

TailscaleとNginx・WireGuardによるリモートアクセスの違い

Ollamaをリモートからアクセスできるようにするアプローチはいくつかある。

Nginxリバースプロキシはドメイン取得・DNS設定・証明書管理が前提で、インターネットにポートを公開するため攻撃の標的にもなりうる。WireGuardは自由度が高い反面、鍵の生成・配布・設定ファイルの同期が煩雑だ。SSHポートフォワーディングはゼロ設定で使えるがセッションの常時維持が必要で常用には向かない。

Tailscaleはその中間を埋める。インストールと `tailscale up` だけでNAT越えのメッシュネットワークが完成する。データプレーンはデバイス間のWireGuardで動き、tailnet外からOllamaのポートに一切到達できないため攻撃面が大幅に減る。社内導入の判断軸については「社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢」に整理している。

事前準備|TailscaleのインストールとUbuntu Serverへの参加

Ubuntu Server 22.04/24.04でOllamaがsystemdサービスとして稼働していることを前提とする。構築手順は「Ubuntu ServerでローカルLLMを構築する方法」を先に確認してほしい。

1. Tailscaleのインストール

# 公式インストールスクリプト(aptリポジトリの追加とインストールを一括実施) curl -fsSL https://tailscale.com/install.sh | sh # バージョン確認 tailscale version

インストールスクリプトはaptリポジトリの追加からパッケージインストールまで一括実施する。`tailscale version` でバージョン文字列が返れば正常だ。

2. Tailscaleネットワークへの参加

sudo tailscale up

コマンド実行後に認証用URLが表示される。別のPCのブラウザでURLを開いてログインすれば、このサーバーがtailnetに参加する。

3. TailscaleのIPアドレスを確認する

tailscale ip -4 # output: 100.94.31.12 # 100.64.0.0/10 の範囲から固定IPが割り当てられる

TailscaleのIPは `100.64.0.0/10` 範囲から払い出され、再起動後も変わらない。次のステップで使うためメモしておく。

TailscaleのIPでOllamaを特定インターフェースにバインドする設定

デフォルトのOllamaはローカルループバック(`127.0.0.1:11434`)のみでリッスンする。Tailscale経由でアクセスするには、TailscaleのIPでも受け付けるよう設定を変更する必要がある。

1. systemdのoverride.confでOLLAMA_HOSTを変更する

sudo systemctl edit ollama

テキストエディタが開いたら以下を入力する(`100.94.31.12` は実際のTailscale IPに差し替える):

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

保存して閉じた後、Ollamaを再起動して設定を反映させる:

sudo systemctl daemon-reload sudo systemctl restart ollama sudo systemctl status ollama

`Active: active (running)` が返れば設定が適用されている。`OLLAMA_HOST` をTailscale IPのみにすることで、パブリックIPへの一切の公開がなくなる。

2. UFWを使っている場合の設定確認

UFWが有効な環境では以下を実行しておく:

sudo ufw allow in on tailscale0 to any port 11434 proto tcp sudo ufw status

UFWを使っていない環境ではこの手順は不要だ。

チームメンバーのPCにTailscaleを追加してOllamaへアクセスする

チームメンバーのWindowsやmacOSにもTailscaleをインストールして同じtailnetに参加させることで、Ollama APIにアクセスできる。

1. クライアント側のTailscale参加

チームメンバーはTailscale公式から各OS向けクライアントをインストールし、サーバーと同じtailnetのアカウントか管理者が発行した招待リンクで参加する。参加後、メンバーのPCからサーバーのTailscale IPで直接Ollama APIを呼べる:

# チームメンバーのPC(Tailscale参加済み)から実行 curl http://100.94.31.12:11434/api/tags # 正常な応答例 # {"models":[{"name":"llama3.3:8b-instruct-q4_K_M","..."}]}

2. PythonのOpenAI互換クライアントから呼ぶ

from openai import OpenAI client = OpenAI( base_url="http://100.94.31.12:11434/v1", api_key="dummy", # OllamaはAPIキー不要 ) response = client.chat.completions.create( model="llama3.3:8b-instruct-q4_K_M", messages=[{"role": "user", "content": "Linuxのsystemdとは何ですか?"}], ) print(response.choices[0].message.content)

tailnetへの参加管理がセキュリティの要になる。利用するモデルの選び方については「ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント」を参考にしてほしい。

TailscaleのACLで接続元をチームに限定する

tailnetのデフォルトでは参加全デバイスが互いに通信できる。管理画面でACLポリシーを編集して接続元を絞り込む。以下の例では `tag:ollama-client` タグのデバイスのみがポート11434に接続できる:

{ "tagOwners": { "tag:ollama-server": ["autogroup:admin"], "tag:ollama-client": ["autogroup:member"] }, "acls": [ { "action": "accept", "src": ["tag:ollama-client"], "dst": ["tag:ollama-server:11434"] } ] }

タグはTailscaleの管理画面「Machines」タブから各デバイスに付与できる。

ACLポリシーを保存すると即座に全デバイスに配布される。接続テストは `tailscale ping <相手のTailscale IP>` で実施する。`pong` が返れば通信が成立している。**注意**: JSON構文エラーや意図しない拒否ルールがあると全デバイスの通信が遮断されるため、変更前にポリシーを手元にバックアップしておきたい。

MagicDNSで覚えやすいURLをOllamaサーバーに固定する

TailscaleのMagicDNSを有効化すると、IPの代わりにホスト名でアクセスできる。管理画面「DNS」タブからオンにするだけで数秒でtailnet全体に反映される。有効化後はホスト名でOllamaにアクセスできる:

# ホスト名がollama-serverの場合 curl http://ollama-server:11434/api/tags # ホスト名を確認するコマンド(サーバー上で実行) hostname # ホスト名を変更する場合 sudo hostnamectl set-hostname ollama-server

割り当てられるドメインは `<マシン名>..ts.net` の形式で、短いホスト名のみでも解決できる。IPが変わってもホスト名アクセスならクライアント側の変更は不要だ。

よくあるトラブルと対処法

**`tailscale up` 実行後に「already connected」と表示される**
別のtailnetに参加済みの状態だ。`sudo tailscale logout` でログアウトしてから `sudo tailscale up` で再ログインする。

**TailscaleのIPでOllamaに接続できない(Connection refused)**
`tailscale ip -4` で確認したIPが `OLLAMA_HOST` と一致しているかを確認する。`curl http://127.0.0.1:11434/api/tags` でローカルから通るなら、UFWのルール不足が原因だ。

**Ollama再起動後にTailscale IPが変わった**
tailnetから離脱して再参加した場合にIPが変わることがある。MagicDNSを有効化しておけば名前解決が自動更新されるため、クライアント側の変更が不要になる。

**ACL変更後にOllamaへの接続が全滅した**
まず全通信を許可する設定(`"acls": [{"action": "accept", "src": ["*"], "dst": ["*:*"]}]`)に戻して接続を確認し、そこから少しずつACLを絞り込む。管理画面「Logs」でアクセス拒否の詳細を確認できる。

**MagicDNSのホスト名が解決できない**
クライアントのTailscaleアプリで「Use Tailscale DNS settings」が有効かを確認する。解決しない場合はアプリを再起動してみる。

**OllamaがTailscale IPをリッスンしていない**
`ss -tlnp | grep 11434` でListenポートを確認する。想定のIPが出ない場合は `OLLAMA_HOST` の設定を再確認してから `sudo systemctl restart ollama` を実行する。

まとめ

TailscaleでOllamaをチームに公開するための設定をまとめる。
設定内容主なコマンド・設定目的
Tailscaleインストールcurl -fsSL https://tailscale.com/install.sh | shUbuntu ServerをTailscaleネットワークに参加させる
tailnet参加sudo tailscale up認証URLを取得してデバイスをtailnetに追加する
Ollamaバインド変更OLLAMA_HOST=TailscaleIP:11434(override.conf)Tailscale経由のみのアクセスに絞り込む
UFW許可ルールsudo ufw allow in on tailscale0 to any port 11434tailscale0インターフェースからの接続を許可する
ACLポリシー設定管理画面のACL JSON(tagOwners・acls)接続元をチームメンバーのtagに限定する
MagicDNS有効化管理画面DNS設定でMagicDNSをオンIPの代わりにホスト名でOllamaにアクセスする

Tailscaleを使ったアプローチの最大の利点は、ドメイン取得もTLS証明書管理もNginx設定も不要な点だ。インストールから5分程度でチーム全員がセキュアに接続できる状態になる。ローカルLLMのユースケース全般については「社内でChatGPTが使えないときの代替手段」も参考にしてほしい。

Tailscaleを使ったローカルLLMのチーム運用を2日間のハンズオンで体験する

TailscaleネットワークへのOllama組み込みを含むチーム運用の実構成をLinuxサーバーで一から組み立てる、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。