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에 연결할 수 있습니다.

관련 정보