🔐

Proxmox VEをTailscale ServeのリバースプロキシでHTTPS化する

2025/02/04に公開

Proxmox VEをいじり始めたのはいいのですが、管理ページがHTTPのサービスですので毎回ブラウザから警告を出されます。そこでTailscale Serveを使ってHTTPS化することにしました。

  • Tailscale 1.78.1

Tailscale Serveとは

Tailscale serveとは、Tailscale VPNの機能の一つで、Tailnet(Tailscale VPNで繋がれたコンピュータネットワーク)に接続されているコンピュータのリソースにHTTPヘッダをつけてサービス化してしまおうというものです。

例えば、LinuxノードにあるただのファイルにHTTPヘッダをつけてTailnetに公開してしまいます。これによってWEBサーバーを作らずにスタティックWEBページを簡単に作ることができます。

Tailscale Serveにはリバース・プロキシ機能もありサーバーが公開したサービスのプロトコルやポート番号を変更してTailnetに再公開することも可能です。

Tailscale Serveは、Tailnetに接続されたコンピュータのリソースを限定的にInternetに公開するTailscale Funnelと組み合わせて使うことが多いですが、この稿ではFunnel無しで使います。

リバースプロキシの動作

リバースプロキシはサーバーの外部(この場合はTailnet)からのアクセスに対して

  • プロトコル変換
  • ポート変換

を行います。今回、プロトコルはHTTPS(Tailnet)とHTTP(サーバー内部)の変換を行い、ポートは443(Tailnet)から8006(サーバー内部)への変換を行います。

これでProxmox VEがポート8006で公開する管理用HTTP WEBページをHTTPSに変換できます。

実際の操作

一連の操作は

  1. Tailscale Serveを有効にする。
  2. Certificateをインストールする。
  3. Tailscale Serveを起動する。

です。なお、Proxmox VEは動作を始めていてHTTPにより管理ページにアクセスできているものとします。

Tailscale Serveを有効にする

初めにTailscale Serveを有効にします。まず、Tailscaleの管理画面からDNSをクリックしてDNS設定画面を表示します。

次にスクロールして一番下に行きます。

念のためMagicDNSがディセーブル状態なら、イネーブルにしてください。そしてHTTPS Certificateがディセーブル状態の場合にはこれもイネーブルにしてください。イネーブルにするとTailscale ServeとTailscale Funnelをイネーブルにするダイアログが表示されます。私はTailscale Serveだけイネーブルにしました。

Certificateをインストールする

次にTailscale ServeでHTTPS化したいサーバーにログオンして、シェルからCertificateをインストールします。この作業を行うとTailscaleが代理でLet's EncryptからCertificateを取得してサーバーにインストールしてくれます。

CLIコマンドは次の通りです。

sudo tailscale cert <target>

ここで<target>はサーバーのtailnet内部でのFQDNです。サーバーのFQDNを知るには、管理画面のメニューからMachineをクリックして装置一覧を表示し、目的のサーバーをクリックしてください。Full Domainの項目がFQDNです。

例えばサーバーの名前がfooのとき、上記コマンドは以下のようになります。

sudo tailscale cert foo.tailXXXXXX.ts.net 

Certificateの取得には少し時間がかかります。なお、Certificateの期限は3か月です。

Tailscale Serveを起動する

Tailscale Serveの起動はサーバーのCLIから以下のコマンドで行います。

sudo tailscale serve --bg http://localhost:<ポート番号>

こうすると、<ポート番号>でHTTPプロトコルを受け付けているサービスをポート443でHTTPS化してくれます。ポート80でHTTPサービスを受け付けているのであれば、コマンドは次のようになります。

sudo tailscale serve --bg http://localhost:80

サーバーのアドレスはlocalホストか127.0.0.1しか受け付けないことに注意してください。--bgはコマンドをバックグラウンドで行うことを示します。このコマンドの効果はログアウト後も維持されます。

なお、Proxmox VEの場合、上のコマンドそのままではだめで以下のコマンドが必要でした。

sudo tailscale serve --bg https+insecure://localhost:8006

ポート番号が8006であることに加えて、プロトコルがhttps+insecureとなっています。

公式ページの説明によればこれは自己署名や無効なcertificateを使っているHTTPSサーバーに対するリバースプロキシを設定しています。

憶測にすぎませんが、ProxmoxがCertificate無しでTLSを使っているからではないかと思います。

注意点

Tailscale ServeでHTTPS化した場合、HTTPSプロトコルでのアクセスにはFQDNが必要になります。

https://foo.tailXXXXXX.ts.net/

サーバー名だけでのアクセスは出来ません。

Discussion