宿主機中查找虛擬機IP地址方法


前言

如果沒有較好的規划,通過宿主機要來獲取虛擬機的IP地址,這個問題在虛擬化中或多或少會遇到,本文以KVM 虛擬化為例來討論這個問題的解決方法,查閱網絡上相關文檔,大致一種思路:通過 通過xml 拿到虛擬機的mac 地址,然后再通過 arp -a 來查詢虛擬機的IP地址。

通過 mac + arp 獲取虛擬機IP地址

第一步獲取虛擬機 mac 地址:

[root@mongodb ~]# virsh domiflist 192_168_118_14
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:bb:d2:8a

第二步通過 arp + mac 獲取 虛擬機IP地址:

[root@mongodb ~]# time arp -a | egrep 52:54:00:bb:d2:8a
? (192.168.118.14) at 52:54:00:bb:d2:8a [ether] on br0

real	24m52.314s
user	0m0.033s
sys	0m0.063s

這種方法思路是沒有問題的,但是通過 arp 獲取 IP地址時間較長(上面 24-25分鍾)。

doifaddr 獲取ip地址

寫在前面:通過這種命令獲取虛擬機 ip地址是有必要條件的:

  1. 宿主機的網絡必須是本地nat
  2. 基於本地 dnsmasq dhcp服務獲取的IP地址

有人提交過關於 doifaddr 獲取IP地址的問題,詳細參考:

就上面的問題,我這里做了示例驗證:

宿主機使用 libvirt 默認網絡,默認為nat網絡

[root@localhost ~]#ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:47:3f:c1  txqueuelen 1000  (Ethernet)
        RX packets 680  bytes 79131 (77.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1144  bytes 105333 (102.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

創建虛擬機安裝 Centos7.x 連接到 nat 網絡

[root@localhost ~]#virsh list 
 Id    Name                           State
----------------------------------------------------
 5     centos7.0                      running

虛擬機啟動后,dhcp 來獲取虛擬機地址

[root@localhost ~]#virsh net-dhcp-leases default
 Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
 2020-11-02 14:12:41  52:54:00:da:eb:ee  ipv4      192.168.122.246/24        -               -

[root@localhost ~]#virsh domifaddr centos7.0
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:da:eb:ee    ipv4         192.168.122.246/24

到此,發現滿足上面2個條件,是可以通過 domifaddr 這個命令來獲取虛擬機IP地址的,接下來連接到虛擬機內,通過修改配置文件修改虛擬機的IP地址,再次使用 domifaddr 命令來查看

IPADDR=192.168.122.200
NETMASK=255.255.255.0
GATEWAY=192.168.122.1

# systemctl restart network

### 再次通過命令查看 ###
[root@localhost ~]#virsh domifaddr centos7.0
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:da:eb:ee    ipv4         192.168.122.246/24

也就是說,上面提到的兩個條件缺一不可,缺少其中一條 domifaddr 不顯示信息或者顯示的不是修改后的ip地址。

總結

在做kvm虛擬化,是需要有一個管理平台來對虛擬機進行管控的,否則很多信息是無法通過命令行的形式來直接獲取的。這樣的工具有很多,比如輕量級的web 管理平台:WebVirtMgr 或者是 OVirt 。 再不濟可以通過虛擬機名來表明虛擬機的IP地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM