내 목표는 libvirt API만 사용하여(>=0.10) 새 가상 머신의 IP 주소를 찾는 것입니다. 현재 저는 libvirt의 net-update 명령을 사용하고 있습니다. 새 시스템을 시작하기 전에 정적 dhcp 항목을 설정하고 알려진 주소로 vm 부팅을 설정했습니다.
이전 libvirt 버전에서도 거의 잘 작동하지만 버그가 하나 있습니다. 컴퓨터를 "강제 종료"하면 dhcp 서버(libvirt/dnsmasq)에 "릴리스" 쿼리를 보내지 않으며 이 IP는 임대 파일에 남아 있습니다. DHCP 임대 시간이 초과되기 전에 동일한 IP 주소로 새 시스템을 생성하면 DHCP 서버는 이 IP가 이미 사용되었다고 간주하기 때문에(임대 파일의 정보를 기반으로) 정적 항목에서 IP 주소를 가져오지 않습니다.
대상 서버에 대한 셸 액세스나 가상 머신 내부의 정적 네트워크 구성 없이 시작하기 전에 머신 IP 주소를 얻거나 설정하는 더 강력한 솔루션이 있습니까?
답변1
libvirt >= 1.2.14에서는 libvirt에 쿼리하여 게스트 NIC에 할당된 IP 주소를 요청할 수 있으므로 고정 IP 주소를 설정할 필요가 없습니다. 예를 들어
# virsh domifaddr f25kubdev
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet1 52:54:00:b4:fc:f2 ipv4 192.168.122.13/24
하지만 libvirt 0.10.0을 언급하셨기 때문에 그것이 당신에게 소용이 있는지 잘 모르겠습니다.
1.2.10 이상이면 DHCP 임대 데이터베이스를 쿼리하여 정보를 얻는 덜 직접적인 방법이 있습니다.
# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
2017-01-19 12:01:01 52:54:00:b4:fc:f2 ipv4 192.168.122.13/24 f25kubdev ff:00:b4:fc:f2:00:04:52:fb:4b:29:01:5e:44:c8:b6:57:85:dd:f2:7a:98:73
그런 다음 관심 있는 도메인에 MAC 주소를 수동으로 매핑해야 합니다. 'domifaddr' 명령이 해당 매핑을 수행합니다.
1.2.10 이전에는 libvirt API를 통해 이 정보를 얻을 수 있는 방법이 전혀 없었습니다. dnsmasq 임대 파일을 직접 살펴봐야 했습니다.