随机生成 Xen 虚拟机的 MAC 地址

如果不在创建 Xen 虚拟机(domU)的时候指定 MAC 地址的话,Xen 就会随机生成一个 MAC 地址给虚拟机,这样管理员就没办法知道虚拟机的 MAC 地址了,不利于以后带宽的统计和虚拟机的管理,所以最好就在 Xen 虚拟机配置文件中直接指明虚拟机的 MAC 地址,比如:

# vi /etc/xen/vpsuser1
vif = [ "mac=00:16:3e:0c:11:53,ip=172.16.16.200,bridge=xenbr0" ]

IEEE OUI 为 Xen domU 保留了一段 MAC 地址,前3段是 “00-16-3e”,后3段是随机的,其中第1个随机段的第1个 bit 是0(IEEE OUI 给 VMware 保留的前3段地址是 “00-0c-29”,后3段随机)。我们在为用户分配 MAC 地址时候不想有规律的分配(虽然也不会有什么安全问题),所以 VPSee 写了一个简单的 Python 脚本用来随机生成符合 Xen 虚拟机标准的 MAC 地址:

#!/usr/bin/python 
# generates a MAC address for Xen domU
# http://www.vpsee.com
#

import random

mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), 
random.randint(0x00, 0xff), random.randint(0x00, 0xff) ]
s = []
for item in mac:
        s.append(str("%02x" % item))
print ':'.join(s)

评论 (9 Comments)

  1. 请教一下你们是怎么生成虚拟机的?是不是先准备好一个初始的image文件,如果有需要就拷贝出一个新的image,然后修改其中的ip、hostname等信息,再xm create;

    另外,如果只有几台机器还好管理,如果物理机达到几十、上百台,你们又是怎么管理的呢?有统一的界面,还是挨个ssh上去管理的?

  2. 自己先做个模版,用 lvcreate 创建虚拟机逻辑卷,然后修改模版中的 ip, hostname, network 等信息,然后拷贝模版下 / 下所有内容到新建的分区就可以了。当然,可以写个脚本来自动完成这个过程。

    挨个 ssh 管理会累死人的,如果是统一管理的话,可以用 puppet 或 chef.

  3. 好的,多谢

  4. 请教一下,你这里说的模板是指虚拟机配置文件还是指虚拟机镜像文件?

  5. 虚拟机镜像文件。

  6. 请教vpsee:

    在哪里可以看到新建DOM-U的MAC地址?

  7. 可以进入 domU 后用 ifconfig 查看 mac 地址。也可以在外面的配置文件中明确指定 domu 的 mac 地址。

  8. 请教vpsee:
    上面讲的方法只适用于linux虚拟机吧,对windows怎么做呢?

  9. windows 也是一样的啊,在 xen host 上指定 MAC 地址,guest 运行 linux 还是 windows 无所谓。

发表评论