QemuにSpiceのリスニングポートを自動的に選択させる方法は?

QemuにSpiceのリスニングポートを自動的に選択させる方法は?

一部の仮想マシンをVNCディスプレイタイプからSPICEに切り替えています。

VNCディスプレイタイプは、to=QEMUが定義された範囲の最初の空きポートを自動的に使用できるようにする非常に便利なパラメータを提供します。

-display vnc=127.0.0.1:0,to=100

ここで、QEMU は、新しい VNC ディスプレイサーバーごとに 5900 ~ 6000 のポートを使用します。

SPICEディスプレイでこれを達成するための最もクリーンな方法は何ですか(しかし私はlibvirtを使用していません)?

現在、私はnetstatgrepの出力をテストして、未使用のポートを見つけて次に渡すスクリプトを書いています。

-spice addr=127.0.0.1,port=${unused_port}

競争条件を除いて、VNCと比較してこのアプローチはやや醜いと考えられます。 ~からQEMU マンページ非常に徹底していないようですが(to=たとえば、VNCパラメータは言及されていないようです)、SPICEに対応するパラメータがあるかどうか疑問に思います。

答え1

(現在)QEMUにSPICEの次の無料ポートを選択させることはできません。これは実装の詳細が原因で発生します。 QEMU使用これspice_server_settings_port数値パラメータのみが許可されます。

今できる最善の方法は、QEMUの外部からポート番号を選択して、今のように割り当てることです。

これがあまりにも厄介な場合は、DNSを使用して最初に利用可能な無料のIPアドレス+ポートにバインドすることを検討してください。これSPICEサーバーコード各アドレスは成功するまで試行されるため、local.test127.0.0.1、127.0.0.2、127.0.0.3などにマッピングすると、成功するまで各インターフェイスにバインドしようとします。悪く聞こえますが便利です。この方法は、ワイルドカードアドレスの同じポートを受信する他のサービスがない場合にのみ使用できます。

答え2

私はこれが古い質問であることを知っていますが、人々はまだより良い解決策を探していると信じています。ここにいる:

Qemuの設定-spice port=5900,addr=127.0.0.1,disable-ticketing=on

次に iptables を使用します。iptables -t nat -I PREROUTING -p tcp --dport 5900 -j DNAT --to 127.0.0.1:5900

vncなどを邪魔したくない場合は、特定のインターフェイスに制限したり、ソースポートを変更したりできます。

ついにsysctl net.ipv4.conf.all.route_localnet=1

この構成により、すべてのサーバーのIPアドレスを使用してSPICEに接続できます。

関連情報