Proxmox VEをTailscale ServeのリバースプロキシでHTTPS化する
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に変換できます。
実際の操作
一連の操作は
- Tailscale Serveを有効にする。
- Certificateをインストールする。
- 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