Proxmox の管理画面に LAN 内のクライアント PC からローカル IP でダイレクトに接続しているときは気にしなくてもいいけど、自分の環境だといつも FQDN で接続しているから常に Reverse Proxy 経由になる。しかも、SNI でクライアント PC 〜ホスト間を SSL 通信しているから、何かしらの工夫をしないと SPICE 接続を確立できない。
ということでメモ。
最初に
SPICE の有効化(Linux)
仮想マシンが Linux なら、Proxmox 管理画面から仮想マシンのハードウェアのディスプレイを"SPICE"に変更しておく。

仮想マシンとクライアント PC でのフォルダ共有設定や、ビデオストリーミングのパフォーマンス向上を図る場合は、仮想マシンのオプションから SPICE 拡張機能を有効化すれば OK。
クライアントに接続する USB デバイスを仮想マシンで使用する場合は、仮想マシンのハードウェアから USB デバイスを選択、Spiceポートを追加すれば使用できる。
その他諸々詳細は次のとおり。
SPICE の有効化(Windows)
仮想マシンに https://www.spice-space.org/index.html から spice-guest-tools をダウンロードしてインストールする。
ダウンロード用のリンクは画像のとおり。

仮想マシンのハードウェアやオプションの設定は Linux と同じ。
シェル、コンソールの開き方
あらかじめ sudo apt install virt-viewer でビューアーをインストールしておく。仮想マシンマネージャー(virt-manager)をインストールしていれば一緒にインストールされている。
管理画面のシェルや仮想マシンのコンソールを SPICE で開くときは、下画像のとおり、右上のシェル(仮想マシンなら「コンソール」)で選択する。

クリックすると、ブラウザの初期状態ならファイルをダウンロードすることになるハズ。毎回ダウンロードして開いても良いけど、Google Chrome ならダウンロードしたファイルを「この種類のファイルは常に開く」にしておくと便利。
Nginx の設定
自分の環境だと、クライアント PC から Wi-Fi ルーター(192.168.1.1)を経由して Reverse Proxy(192.168.1.111)に接続、そこから Proxmox のホストにレイヤー 4 でパケットを投げることになるので、stream コンテキストに設定を記述する。クラスタに所属しているホストであればどれか一つのホストに向ければ大丈夫。Spice Proxy のおかげで、クラスタ内のどのホストでも、またはどのホストで動作している仮想マシンであっても接続してくれる。
とはいっても何となく特定のホストに依存するのは気持ちが悪いからロードバランサーっぽく設定してみる。

既存の stream 設定ファイル(自鯖環境では /etc/nginx/modules-available/stream.conf)に設定を追加する。もちろん、シンボリックリンクは /etc/nginx/modules-enabled/ にある。
stream {
map $ssl_preread_server_name $name {
jisaba.life backend;
pve01.jisaba.life backend_pve01;
・・・
}
upstream backend {
server 192.168.1.112:443;
}
upstream backend_pve01 {
server 192.168.1.3:8006;
}
・・・
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
# Spice 接続用に以下を追加。クラスタ内のホストであれば1つで良い。
upstream spice {
server 192.168.1.3:3128;
server 192.168.1.4:3128;
server 192.168.1.5:3128;
}
server {
listen 3128;
proxy_pass spice;
}
}
クラスタ内のホストは 192.168.1.3 〜 192.168.1.5 の3台。
とはいっても負荷分散が必要なくらい同時に何台も仮想マシンに接続することは有り得ないから意味は無い。
Wi-Fi ルータの設定
最後に Wi-Fi ルータの IP フィルターとポート変換を設定する。仮想マシンには常に LAN 内から接続するだけで、WAN 側から接続することは無い。
Buffalo の AirStation WSR-3200AX4S だと、IP フィルターの設定で、port 3128 を Internet 側からのアクセス拒否にする。LAN 側のアドレスは 192.168.1.0 とした。
ポート変換では、Internet 側のポート 3128 を Reverse Proxy のポート 3128 にマッピングする。
これで LAN 内のクライアント PC からだけ SPICE 接続ができるようになる。
設定方法は Wi-Fi ルータによって異なるけど、最後に外部からポートスキャンを実行してポート 3128 が閉じられていることと、念の為、スマホのテザリングを使って外部から接続できないことを確認して終了。
終わりに
RDP に比べてどうかというと、普通に Window を開いたり移動したりするときの描画速度は大きく変わらない。Youtube の再生は SPICE のほうが高速。
それよりも Proxmox の仮想マシンに SPICE 接続する場合は、まず Proxmox 管理画面にログインしてから仮想マシンに接続する必要があるから、軽めの作業なら RDP(Remmina)のほうが手っ取り早いかな。
コメント