0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tailscale serve.json 設定項目一覧 (Funnel)

Posted at

Tailscaleのソースコード(2024/07/27) に準拠しております


plantuml図


⇩ クリックして展開!

serve.json(c)

serve.json

{
  // TCP: map[uint16]*TCPPortHandler
  "TCP": {
    "80": {
      // ポート80で HTTP を提供
      // HTTPSのみを使用する構成でも80番ポートを開けてhttpsにリダイレクトさせるようにしましょう
      "HTTP": true
    },
    "443": {
        // TLS接続をtailscaled(Tailscaleのデーモン)で終端し、平文のTCPトラフィックとして転送先に渡すか制御できます
        // 特定のSNI名のみを許可することで、不正なTLS接続を防ぐことができます
        // ポート443でTLS終端を行い、localhost:8000に転送
        // 例としてexample.qilin-qilin.ts.netを使用します
        "TCPForward": "localhost:8000",
        "TerminateTLS": "example.qilin-qilin.ts.net"
    },
    "10000": {
      // ポート10000への接続をlocalhost:3000にすべて転送
      "TCPForward": "localhost:3000"
    }
  },
  // Web: map[HostPort]*WebServerConfig
  "Web": {
    // HostPortは、コロンで結合されたSNI名とポート番号です
    // 暗黙の443ポートはありません。必ずコロンを含む必要があります
    // HostPortに ${TS_CERT_DOMAIN} を使用することで、example.qilin-qilin.ts.net などに置き換わります
    "${TS_CERT_DOMAIN}:80": {
      "Handlers": {
        "/": {
          "Proxy": "https://example.com"
        }
      }
    },
    "${TS_CERT_DOMAIN}:443": {
      // Handlers: map[string]*HTTPHandler
      "Handlers": {
        "/": {
          // 任意のパスを静的ファイルを提供できます
          "Path": "/var/www/html"
        },
        "/api": {
          // /apiパスをlocalhost:8080にプロキシします
          "Proxy": "http://localhost:8080"
        },
        "/test": {
          // /testパスで単純なテキストを返します
          "Text": "これはテストページです"
        }
      }
    }
  },
  // AllowFunnel: map[HostPort]bool
  "AllowFunnel": {
    // Funnelはtailnet外部へウェブサイトを公開することができる機能です
    // あらかじめ Admin-Consoleで設定しておく必要があります
    // 現在Funnelは 10000、443、80番のみ 許可されています
    "example.qilin-qilin.ts.net:443": true,
    "example.qilin-qilin.ts.net:8443": true,
    "${TS_CERT_DOMAIN}:10000": true
  },

  // 自動化のための項目です。一般の人は使わないであろう設定です
  // Foreground は、Tailscaleの一時的な設定を管理するために使用されます
  // これらの設定は永続的ではなく、一時的に適用されます
  // Foreground: map[string]*ServeConfig
  "Foreground": {
    "test-session-789": {
      "TCP": {
        "9000": {
          "HTTP": true
        }
      },
      "Web": {
        "example.qilin-qilin.ts.net:9000": {
          "Handlers": {
            "/test": {
              "Text": "こんにちは!外部プログラムによって設定されました!"
            }
          }
        }
      }
    }
  }
}

  • ${TS_CERT_DOMAIN} を使用することで、tailscaled が管轄する Tailnet-name に動的に置き換えられます
  • TCPWebAllowFunnelForegroundETagが設定できますが、UDP は不可です

プロキシ対象のURL展開

以下のフォーマットが許可されています:

  • 3000
  • localhost:3000
  • tcp://localhost:3000
  • http://localhost:3000
  • https://localhost:3000
  • https-insecure://localhost:3000
  • https-insecure://localhost:3000/foo

注意:
https-insecure スキームを使用すると、自己署名証明書 や 無効な証明書 を持つ HTTPSサーバー への接続が可能になります。
TLS接続は確立されますが、証明書の検証は行われません

プロキシ先の注意 (2024/10/04 現在)
現在、プロキシでは http://127.0.0.1 のみがサポートされています
Docker Compose などのネットワークにて接続し、コンテナのホストを指定しても(http://nginx/ など)繋がりませんので注意してください。

Tailscaleをサイドカーとしてコンテナを公開したい場合、Compose.yml内に
network_mode: service:tailscale
を設定して コンテナのすべてのトラフィックを Tailscaleコンテナ経由で ルーティングしてください。tailscaled の 127.0.0.1 の仲間入りになります。
くわしくは docker-tailscale-guide をご参照ください

Funnel機能の使用条件

Funnelを使用することでHTTPSを通じてWebサービスを外部に公開させることができます
以下のような Tailnet-nameを使用し公開されます
例: https://example.qilin-qilin.ts.net/
アドミンコンソール にてtailnameが変更可能です

Funnelが使えない場合、以下をチェックしてください:

制限事項

  1. 使用可能なDNS名: tailnetのドメイン(tailnet-name.ts.net)内のみ
  2. リッスン可能なポート: 443、8443、10000 のみ
  3. 接続タイプ: TLS暗号化接続のみ
  4. 帯域幅: 設定不可能な制限あり
  5. 対応プラットフォーム: Tailscale CLIが実行可能なプラットフォームのみ
  6. macOSでの使用: オープンソースバージョンのTailscaleアプリケーションが必要

Foreground設定について

Foregroundは、IPN Bus(Inter-Process Notification Bus)セッションIDに紐づきます。主にCLIツールやその他の短期的な操作で使用され、永続的な設定変更を行わずに一時的なサービス提供を可能にします。セッションが終了すると、これらの設定は自動的に無効になります。

CLIによる自動化を行う際に、CLIツールやその他のプログラムが簡単に設定の読み書きを行うためにこの処理が用意されています。

: 一般のユーザーはおそらく使用しません

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?