正在使用qemu不能指定创建虚拟机的过程IP住址,然而,在实际应用中,我们需要有一台虚拟机IP住址,不是人为的虚拟机操作系统配置。
于qemu虚拟机技术文档(http://qemu.weilnetz.de/qemu-doc.html#pcsys_005fmonitor)里捣鼓了好久,发如今给虚拟机创建虚拟网卡时能够指定MAC地址,顿时眼前大亮:假设能够给一个虚拟机网卡唯一指定一个MAC地址,那么我就能够通过配置DHCP来实现MAC地址与IP地址之间的唯一映射,这样指定MAC地址,也就相当于指定了IP地址。如今的问题就是怎样配置DHCPserver的问题了。
DHCP的配置
本人所使用的server是Red Hat Enterprise Linux 6.2。DHCP的安装这里就不介绍了,网上大把大把的。这里仅仅说明下检測server上是否安装了DHCP的命令:
rpm -qa | grep dhcp上述命令假设有输出,就说明server上已经安装了DHCP。
DHCP服务的配置文件默觉得:在/etc/dhcp/dhcpd.conf(好像linux早期的版本号DHCP配置文件是在/etc/dhcpd.conf,所以这里要注意)。DHCP是通过其配置文件启动的,假设配置文件中的全部配置正确,就能正常启动DHCP服务。假设是新手。建议直接使用DHCP安装文件中包括的配置文件,并在其基础上进行改动,这样能够避免非常多不必要的错误。我当时就是自己依照网上的一些样例来写配置文件。结果让我吃了不少苦头。使用例如以下命令拷贝配置文件的模版:
cd /etc/dhcp/ cp /usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample dhcpd.conf //复制配置文件模板 vim /etc/dhcp/dhcpd.conf //使用vi改动/etc/dhcpd.conf配置的目的就是要将MAC地址与某些特定的IP绑定起来,为了更好理解DHCP。例如以下列出了DHCP的工作原理:
如果多部计算机在同一个网域其中,也就是说,DHCP Server与它的Clients都在同一个网段之内。能够透过软件广播的方式来达到相互沟通的状态。那么Client藉由DHCP Server得到的IP的程序为:
1、若Client端计算机设定使用DHCP协议以取得网络參数时,则Client端计算机在开机的时候,或者是又一次启动网卡的时候,会自己主动地发出DHCP Client的需求给网域中的每部计算机;这个时候,因为发出的讯息希望每部计算机都能够接受。所以该讯息除了网卡的硬件地址(MAC)无法改变外,须要将该讯息的来源软件设定为0.0.0.0,而目的地址则为255.255.255.255(linux会自己主动设置)。网域中的其他没有提供DHCP服务的计算机,收到这个封包之后会自己主动地将该封包丢弃而不回应。
2、DHCP主机响应讯息:假设是DHCP主机收到这个Client的DHCP需求时,那么DHCP主机首先会针对该次需求的讯息所携带的MAC和DHCP主机本身的设定值去比对,假设DHCP主机的设定有针对该MAC做静态IP(每次都给予一个固定的IP)的提供时,则提供Client端相关的固定IP于相关的网络參数。而假设该讯息的MAC并不在DHCP主机的设定之内时,则DHCP主机会选取眼下网域内没有使用的IP(这个IP与设定值有关)来发放给client端使用。
3、Client端接受来自DHCP主机的网络參数,并设定Client自己的网络环境:当Client端接受响应的讯息之后,首先会以ARP封包在网域内发出讯息,以确定来自DHCP主机发放的IP并没有被占用。假设该IP已经被占用了,那么Client对于这次的DHCP信息将不接受,而将再次向网域内发出DHCP的需求广播封包;若该IP没有被占用,则client能够接受DHCP主机所给的网络的參数,那么这些參数将会被使用于client端的网络设定其中,同一时候,Client端也会对DHCP主机发出确认封包,告诉server这次的需求已经被确认。而server也会将该信息记录下来。
4、Client端结束该IP的使用权:当Client開始使用这个DHCP发放的IP之后,有几个情况可能会失去这个IP的使用权:Client端离线(不论是关闭网络接口、又一次开机、关机等行为,皆算是离线状态,这个时候server端就会将该IP回收,并放到server自己的备用区中,等待未来使用);Client端租约到期(DHCP server端发放的IP有其使用的期限。Client使用这个IP到达期限规定的期限,Client使用这个IP到达期限规定的时间,就须要将IP还回去。这个时候就会造成断线,而client也能够再向DHCP主机要求再次分配IP地址)。
例如以下是我依据DHCP的配置文件模版写的一个配置文件,当中实现了将MAC地址:66:66:66:66:66:0b与IP地址:192.168.0.88之间的绑定。可依据自己的须要实现很多其它MAC地址与IP之间的绑定。
# dhcpd.conf # # Sample configuration file for ISC dhcpd # # Use this to enble / disable dynamic dns updates globally. ddns-update-style none; ignore client-updates; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). #log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. # This is a very basic subnet declaration. # A slightly different configuration for an internal subnet. subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.30 192.168.0.39; option domain-name-servers 192.168.0.31; option domain-name "wan.hust.china"; option routers 192.168.0.1; option broadcast-address 192.168.0.255; default-lease-time 21600; max-lease-time 43200; host pc001 { hardware ethernet 66:66:66:66:66:0b; fixed-address 192.168.0.88; } }启动DHCP服务的命令例如以下所看到的:
service dhcpd start #启动DHCP服务 service dhcpd status #查看DHCP状态假设想要開始自启动DHCP服务,能够使用例如以下命令:
chkconfig --level 345 dhcpd on至此DHCP配置完毕。
QEMU-KVM虚拟机创建设置
如今就能够通过在创建虚拟机时指定MAC地址来间接指定IP地址了:
/usr/local/qemu-kemari-v0.2.14/bin/qemu-system-x86_64 -m 1024 /images/test2.img -net nic,mac=66:66:66:66:66:0b -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no -vnc :6 -enable-kvm打开虚拟机查看虚拟机的网卡信息,就能够看到虚拟机的IP地址已配置好了。
以下是我在网上找到的一些帖子。来解释同一个网段内能够有两台电脑拥有同样的IP和MAC地址:
这样的方法不但能够突破路由封锁用在ADSL共享上网。并且还能够用在IEEE802.1X认证上网的环境中。可是前提必需要用同样的帐号来拨号上网(前提认证server没设验证帐号的反复性)。我的机子是通过学校校园网接入internet的,client採用802.1x认证client软件“STAR Supplicant拨号软件”来拨号上网,在我们学校里能够将两台机子的IP和MAC改成一样然后用同样的一个帐号来达到共享上网的目的,只是在我们学校仅仅能够在同一个宿舍的两台机子才干够共享上网,由于我们学校的server不单止验证帐号,ip,MAC并且还验证接入serverIP(NAS IP),和接入serverport(NAS port),不同的宿舍接在学校交换机不同的port,所以仅仅限于同一个宿舍用这样的法共享上网。
并且这些表都有特定的生存期。不是静态的。
如今如果,有两台PC(PC1和PC2)的MAC地址同样。分别接在路由器(或交换机)的两个端口(port1,port2)上,pc1首先发起连接魔兽游戏的server的请求,那么在路由器(或交换机)上就会在mac-table加入PC1的mac地址到port1上。当魔兽游戏的server反应请求后,路由器也会把信息转发到port1上给PC1.同理。当PC2也要登陆魔兽游戏server时。过程也一样。
可是。路由器的mac-table是动态的,当pc1请求连接并且被路由器记录这个mac地址相应的端口为port1时,pc2突然发起连接魔兽server的请求,那么路由器的mac-table就会更改次MAC地址的相应端口,把这个mac地址的端口改为port2。那么pc1的响应消息就会直接发给PC2,造成pc1不能上网。
当然。发生这样的情况比較少。由于,请求响应都是在几秒甚至几十毫秒内完毕的。
版权声明:本文博主原创文章,博客,未经同意不得转载。
原文:http://www.cnblogs.com/yxwkf/p/4844885.html