Virtualization
使用 KVM+libvirt 獲取 DHCP 客戶端列表?
我有幾個通過 KVM+libvirt 在 Ubuntu 9.10 上執行的虛擬機。我希望能夠找出已分配給每台主機的 IP 地址,而無需物理打開每台機器的物理“控制台”並呼叫
ifconfig
.考慮:
rascher@localhost:~$ virsh -c qemu:///system list --all 連接到 uri:qemu:///system Id 名稱 狀態 ---------------------------------- 1台機器1執行 2 機 2 執行 - machine3 關閉
我的網路配置如下:
<network> <name>default</name> <uuid>1be...</uuid> <forward mode='route' dev="eth0"/> <bridge name='virbr0' stp='on' forwardDelay='0' /> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254' /> </dhcp> </ip> </network>
那麼我怎樣才能得到一個清單,上面寫著:
machine1 IP 地址 = 192.168.122.16 machine2 IP 地址 = 192.168.122.238 ...
我玩過
arp
:更快@localhost:~$ arp 地址 HWtype HWaddress 標誌 遮罩 Iface 192.168.122.238 乙太 00:16:36:00:61:b0 C virbr0 192.168.122.16 乙太 00:16:36:52:e8:9c C virbr0 ...
但這不會映射到虛擬機的 ID。
是否有一些工具(通過命令行,
virsh
或者virt-*
)我可以確定這些資訊?或者我是否需要在每個單獨的虛擬機上執行一些花哨的腳本,檢查自己的 IP,並將其報告回主機作業系統?
很久以前就要求此功能。現在 libvirt 通過提供兩個新命令來支持它:domifaddr和net-dhcp- leases
Usage: domifaddr <domain> [interface] [--full] [--source lease|agent] Example outputs: virsh # domifaddr f20 --source agent Name MAC address Protocol Address ------------------------------------------------------------------------------- lo 00:00:00:00:00:00 ipv4 127.0.0.1/8 - - ipv6 ::1/128 eth0 52:54:00:2e:45:ce ipv4 10.1.33.188/24 - - ipv6 2001:db8:0:f101::2/64 - - ipv6 fe80::5054:ff:fe2e:45ce/64 eth1 52:54:00:b1:70:19 ipv4 192.168.105.201/16 - - ipv4 192.168.201.195/16 - - ipv6 2001:db8:ca2:2:1::bd/128 eth2 52:54:00:36:2a:e5 N/A N/A eth3 52:54:00:20:70:3d ipv4 192.168.105.240/16 - - ipv6 fe80::5054:ff:fe20:703d/64 virsh # domifaddr f20 --full Name MAC address Protocol Address ------------------------------------------------------------------------------- vnet0 52:54:00:2e:45:ce ipv6 2001:db8:0:f101::2/64 vnet1 52:54:00:b1:70:19 ipv4 192.168.105.201/16 vnet1 52:54:00:b1:70:19 ipv6 2001:db8:ca2:2:1::bd/128 vnet3 52:54:00:20:70:3d ipv4 192.168.105.240/16 virsh # domifaddr f20 eth0 --source agent --full Name MAC address Protocol Address ------------------------------------------------------------------------------- eth0 52:54:00:2e:45:ce ipv4 10.1.33.188/24 eth0 52:54:00:2e:45:ce ipv6 2001:db8:0:f101::2/128 eth0 52:54:00:2e:45:ce ipv6 fe80::5054:ff:fe2e:45ce/64 For eth0, ipv6 is managed by libvirt, but ipv4 is not. For eth1, the second IP is created using ip aliasing. For eth2, there is no IP configured as of yet. For eth3, only ipv4 has been configured. fd00::/8 are private ipv6 ranges. Hence not visible through --source lease
在不同的情況下:
Example Usage: net-dhcp-leases <network> [mac] virsh # net-dhcp-leases --network default6 Expiry Time MAC address Protocol IP address Hostname Client ID or DUID ------------------------------------------------------------------------------------------------------------------- 2014-06-16 03:40:14 52:54:00:85:90:e2 ipv4 192.168.150.231/24 fedora20-test 01:52:54:00:85:90:e2 2014-06-16 03:40:17 52:54:00:85:90:e2 ipv6 2001:db8:ca2:2:1::c0/64 fedora20-test 00:04:b1:d8:86:42:e1:6a:aa:cf:d5:86:94:23:6f:94:04:cd 2014-06-16 03:34:42 52:54:00:e8:73:eb ipv4 192.168.150.181/24 ubuntu14-vm - 2014-06-16 03:34:46 52:54:00:e8:73:eb ipv6 2001:db8:ca2:2:1::5b/64 - 00:01:00:01:1b:30:c6:aa:52:54:00:e8:73:eb
libvirt 使用 dnsmasq 為來賓提供 DHCP,因此您可以搜尋 /var/log/daemon.log 或探勘 /var/lib/libvirt 中的租約文件以獲取 IP 到主機名的映射。