纠结好久的VM虚拟机MAC地址绑定问题
VM虚拟机(centos)采用桥接的方式访问网络,搭建一个Online Judger 的 web服务端。本想让虚拟机的ip能够固定下来,因此在路由上采用MAC和IP绑定的方式解决。
结果:每次重启虚拟机,DHCP获得的IP还是会变动,并且在虚拟机中将IP,网关,DNS设置成固定的方式(与宿主主机保持一致),但虚拟机反而无法上网,且不能与宿主主机通信。
后来经过多方查证,结论如下:
即使将虚拟机的MAC与IP绑定,但是 路由器上,虚拟机mac地址和物理机显示一样
虚拟机-宿主机-路由器,这三级网络,路由器只能接收到宿主机的网卡MAC地址。所以想在路由器是显示为不同是不可能的。因为路由器不直接给虚拟机分配IP,既然不分配IP,怎么去读取网卡MAC地址?
虚拟机和宿主机进行桥接以后,相当于虚拟机和宿主机同时接在了一个虚拟的交换机上,即是“(虚拟机-宿主机)-虚拟交换机-路由器”,从这个角度来说,路由器是可以分配ip地址给虚拟机的,而且我在路由器里面的arp表里面也看到,虽然宿主机和虚拟机的mac一样,但是ip确实是不一样的。目的就是想要虚拟机和宿主机在路由器上显示的ip和mac都不一样这会可能吗?
下图可以看到有两个mac一样:2a-2b-2b-2b-2b-2b
路由器分配IP是通过网卡分配的,就算一个网卡给你分配N个IP,但是它读取的还是同一块网卡,所以MAC地址是一样的。虚拟机虚拟出来的网卡只在windows内部识别,外部是识别不了的。
举个例子,比如你要注册一个网页,它会根据你MAC地址不同来验证你是否是同一台电脑。虽然在路由器这一级网络中,MAC地址是相同的,但是到了注册网页的界面,所注册的网页读取的MAC是完全不同的。如果你是这个目的,那么你的目的达到了。如果你硬要通过路由器读,那可能真的没办法了。
虚拟机桥接原理,在网络上,是建立了一个虚拟路由器,它只有一个物理MAC却对应着很多IP。因此在网络上无论如何只能看见一个MAC。你在物理机上改了,它就随之更改。
可以这么理解,MAC地址只在2层通信中使用。不管如何,你的虚拟MAC是不会暴露到你的2层之上的。而且,桥接方式,如果在我管理的网络里,一旦启用了IP与MAC地址绑定,你虚拟机根本就不会通,一个MAC无法对应2个IP。无论如何,做不到虚拟出MAC来,此路不通啊。但是可以曲线救国。你可以安装2块网卡都连在一台路由器上。