たねやつの木

Photographs, Keyboards and Programming

OllamaのAPIを安全に外部公開する3つの方法【Cloudflare Tunnel/Tailscale】

こんにちは、たねやつです。

ローカルPCで動かしているOllama、とても便利ですよね。しかし、「このAPIを外部のサーバーやスマートフォンから呼び出したい!」と思ったことはありませんか?

Redditのr/ollamaコミュニティでも、「ポートフォワーディングができない環境で、どうやってOllama APIを外部に公開すればいい?」という質問が大きな話題を呼んでいました。

この記事では、この投稿で議論されている内容を元に、なぜ安易なポート開放が危険なのか、そしてセキュリティを確保しながらOllama APIを外部公開するための3つの具体的な方法を解説します。

この記事でできること

  • Ollama APIを外部公開する際のセキュリティリスクを理解できる。
  • Cloudflare Tunnel を使って、安全にAPIをインターネットに公開する方法がわかる。
  • Tailscale を使って、自分だけのプライベートなネットワークを構築し、安全にアクセスする方法がわかる。
  • ngrok を使って、一時的にAPIを共有する方法がわかる。

なぜ安易なポート開放は危険なのか?

OllamaのAPIサーバーは、デフォルトでは認証機能を持っていません。つまり、もしルーターのポートフォワーディング機能などを使って http://localhost:11434 をそのままインターネットに公開してしまうと、悪意のある第三者があなたのOllamaを自由に利用できてしまう状態になります。

  • リソースの不正利用: 勝手に高負荷なモデルを動かされ、PCのリソースを使い果たされる。
  • 悪意のあるプロンプトの実行: 不適切なコンテンツを生成させられる踏み台にされる。

このようなリスクを避けるため、必ずこれから紹介するような安全な方法で公開する必要があります。

解決策1: Cloudflare Tunnelで安全に公開する

詳細な手順はこちらで解説しています。

raspi.taneyats.com

Cloudflare Tunnelは、ローカルで実行されているサービスとCloudflareのネットワーク間に安全なトンネルを確立するサービスです。これにより、ローカルサーバーのポートを直接公開することなく、外部から安全にアクセスできるようになります。

Redditの議論でも、多くのユーザーがこの方法を推奨していました。

設定手順

  1. Cloudflareにサインアップ: まだアカウントがない場合は、Cloudflareの公式サイトからサインアップします。
  2. cloudflaredのインストール: Cloudflare Tunnelのクライアントツールであるcloudflaredをインストールします。手順は公式ドキュメントを参照してください。
  3. ログイン: 以下のコマンドを実行し、ブラウザでCloudflareにログインして認証します。 bash cloudflared tunnel login
  4. トンネルの作成: 任意の名前でトンネルを作成します。 bash cloudflared tunnel create my-ollama-tunnel 成功すると、トンネルのUUIDと認証情報が記載されたJSONファイルが生成されます。
  5. 設定ファイルの作成: ~/.cloudflared/ ディレクトリに config.yml というファイルを作成し、以下のように記述します。

    tunnel: <Your-Tunnel-UUID>
    credentials-file: /home/your-user/.cloudflared/<Your-Tunnel-UUID>.json
    
    ingress:
      - hostname: ollama.your-domain.com
        service: http://localhost:11434
      - service: http_status:404
    

    <Your-Tunnel-UUID> は先ほど取得したものに置き換えてください。また、hostnameには自分が所有するドメインを指定する必要があります。

  6. トンネルの実行: 以下のコマンドでトンネルを起動します。 bash cloudflared tunnel run my-ollama-tunnel

これで、https://ollama.your-domain.com にアクセスすると、ローカルのOllama APIに安全に接続できるようになります。

Ollamaの前に`open-webui`のような認証機能付きのWeb UIを設置し、そのWeb UIをCloudflare Tunnelで公開することで、さらにセキュリティを高めることができます。

解決策2: TailscaleでプライベートVPNを構築する

「インターネット全体に公開したくはないけれど、自分の持っている他のデバイス(スマホやノートPC)からだけアクセスしたい」という場合には、Tailscaleが最適です。

Tailscaleは、P2P技術を使ってデバイス間に暗号化されたプライベートなネットワークを簡単に構築できるサービスです。

設定手順

  1. Tailscaleにサインアップ: Tailscaleの公式サイトからサインアップします。
  2. 各デバイスにTailscaleをインストール: Ollamaを動かしているPCと、アクセスしたい側のデバイス(スマホ、ノートPCなど)の両方にTailscaleをインストールします。
  3. ログイン: 各デバイスでTailscaleにログインすると、自動的にプライベートネットワークに追加され、管理画面に表示されます。
  4. 接続: これで設定は完了です。アクセスしたい側のデバイスから、Ollamaを動かしているPCのTailscale IPアドレス(管理画面で確認できます)に対して http://<Tailscale-IP>:11434 のようにアクセスすれば、Ollama APIを利用できます。

インターネットには一切公開されず、自分のデバイス間だけで通信が完結するため、非常に安全です。

解決策3: ngrokで一時的に共有する

「開発中にちょっとだけ他の人に見せたい」といった一時的な用途であれば、ngrokが最も手軽です。

設定手順

  1. ngrokにサインアップ: ngrokの公式サイトからサインアップし、トークンを取得します。
  2. ngrokをインストール: 公式サイトの手順に従ってインストールします。
  3. トークンの設定:

    ngrok config add-authtoken <Your-Auth-Token>
    
  4. トンネルの開始:

    ngrok http 11434
    

これだけで、ランダムな xxx.ngrok.io というURLが生成され、ローカルのOllama APIが外部からアクセス可能になります。

最後に

Ollama APIの外部公開は非常に便利ですが、セキュリティ対策を怠ると大きなリスクを伴います。

  • 恒久的に安全な公開 → Cloudflare Tunnel
  • プライベートな利用 → Tailscale
  • 一時的な共有 → ngrok

のように、自分の用途に合わせて最適な方法を選んで、安全に快適なAIライフを送りましょう!

参考・引用