Zenn
📚

【備忘録】Tailscaleを活用したDockerアプリのHTTPS化

2025/02/27に公開

はじめに

本記事は、Tailscaleを活用したDocker環境アプリケーションの
HTTPS化の手段について記述している

HTTPSを適用する際の選択肢(メリット・デメリット)

TLS証明書の取得方法

HTTPSを有効化するにはTLS証明書が必要で以下の方法がある。

1. Let's Encryptを使用

メリット✅

  • 無料で利用可能
  • ACMEを使用した自動更新が可能
  • 公開CAのためブラウザから信頼される

デメリット❌

  • ドメイン名が必要
  • 公開インターネット上での認証が必要(DNSチャレンジの利用で回避可)

2. 自己署名証明書を使用

メリット✅

  • インターネット接続なしで利用可能
  • IPアドレスやローカルホスト名に対応

デメリット❌

  • クライアント側で手動で証明書を信頼する必要がある
  • セキュリティリスク(中間者攻撃の可能性)

3. 商用CAから購入

メリット✅

  • 長期間有効な証明書を取得可能
  • 企業向けのセキュリティ強化

デメリット❌

  • 費用がかかる
  • 運用コストが増加する

4. TailscaleのMagicDNSと証明書発行機能を使用

メリット✅

  • .ts.netドメインを利用して簡単に証明書を発行可能
  • Tailscaleが自動で証明書を管理・更新
  • 追加の設定なしでHTTPSを適用可能

デメリット❌

  • 証明書情報がCertificate Transparencyログに記録される
  • Tailscaleに依存する

HTTPSの実装方法

1. リバースプロキシを使用(Nginx / Traefik / Caddy)

メリット✅

  • 証明書管理を一元化
  • 複数のアプリを1つのプロキシ経由でHTTPS化可能
  • パフォーマンスの向上(キャッシュ機能や負荷分散)

デメリット❌

  • プロキシの設定が必要
  • 追加のリソース消費

2. アプリケーション自体でHTTPSを提供

メリット✅

  • シンプルな構成
  • 追加のプロキシが不要

デメリット❌

  • 証明書の管理が煩雑
  • 負荷が高くなる可能性

最適な構成の選定

おすすめの構成:

  1. TailscaleのMagicDNSを利用し、.ts.netドメインの証明書を取得
  2. TraefikやCaddyをDocker環境に導入し、TLS終端をプロキシに委任
  3. アプリケーションは内部でHTTPを使用し、プロキシ経由でHTTPSを適用

具体的な設定手順

1. Tailscaleの設定

# MagicDNSとHTTPS証明書の有効化
sudo tailscale up --advertise-exit-node --accept-routes

2. Docker + Traefikの設定例

version: '3'  # 👈️ Docker compose V2からは指定不要
services:
  traefik:
    image: traefik:v2.9
    restart: always
    command:
      - "--entryPoints.websecure.address=:443"
      - "--providers.docker"
      - "--certificatesResolvers.tsnet.acme.tlsChallenge=true"
      - "--certificatesResolvers.tsnet.acme.email=your-email@example.com"
      - "--certificatesResolvers.tsnet.acme.storage=/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./acme.json:/acme.json"
  app:
    image: myapp:latest
    labels:
      - "traefik.http.routers.app.rule=Host(`app.ts.net`)"
      - "traefik.http.routers.app.entrypoints=websecure"
      - "traefik.http.routers.app.tls.certresolver=tsnet"

評価

方法 実装難易度 セキュリティ 拡張性 時間 総合評価
Let's Encrypt + Traefik ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
自己署名証明書 ⭐⭐ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐
商用CA ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
Tailscale MagicDNS ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐

まとめ

  • TailscaleのMagicDNSと証明書発行機能を活用するとHTTPS化が簡単
  • リバースプロキシ(Traefik / Caddy)を利用することで管理が楽
  • 自己署名証明書や商用CAよりも、Tailscaleの証明書を使う方が運用コストが低い

以上

※本投稿はOpenAIのDeepResearchの調査結果をまとめたものです。

Discussion

ログインするとコメントできます