zoukankan      html  css  js  c++  java
  • 宿主机中查找虚拟机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地址。

  • 相关阅读:
    shell脚本批量启动jar
    springboot最简单的AOP
    springboot 将null字段输出为空串
    随便记录
    MySQL case when 用法
    JavaDate数据返回到前端变数字的问题
    多级菜单无限递归
    linux tomacat 之部署 war包
    linux tomcat部署 之 jre
    leetcode Best Time to Buy and Sell Stock
  • 原文地址:https://www.cnblogs.com/hukey/p/13914124.html
Copyright © 2011-2022 走看看