VMware 虚拟机下复制转移CentOS VM导致无法访问外网
由于VMware会为每个虚拟机随机生成网卡适配器的MAC地址,导致Linux系统对于网卡设备的识别造成了紊乱。
通常我们在转移虚拟机文件并重新加载后,VMware会问我们这个虚拟机的来源,提供了“我已移动”和“我已复制”两个选项,通常我们都会选择我已复制,将该虚拟机文件变成一个副本。但是在Linux环境下,请选择“我已移动”,否则你将面临进入虚拟机后Linux无法访问外网甚至ping不通虚拟机网关的问题。
当你无法确认上一次虚拟机文件的移动/复制状态的情况下,你可以尝试以下操作:
首先检查 vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0为默认识别的第一块网卡名,各位可能有所不同)中的内容:
DEVICE=eth0 <--确认这个配置文件负责控制的物理网卡名称 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none <--此处设置为none和static都可以配置静态IP,若需要动态,此处值应为dhcp IPADDR=192.168.145.10 <--此处的值为你赋予该网卡的静态IP PREFIX=24 <--此处使用可变子网标识,也可以用参数NETMASK=255.255.255.0标识,请按照自己划分的子网区段设置参数 GATEWAY=192.168.145.2 <--此处为网关地址,在VM中通常给虚拟机配置NAT模式网络,所以物理机的地址一般为a.b.c.1,而虚拟机网关为 a.b.c.2,除非你自行更改过默认值,否则它不会定义到其他地址上。 DNS1=114.114.114.114 <--此处定义DNS服务器,定义的内容将会在每次开机被映射到/etc/resolv.conf中 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no HWADDR=00:0c:29:4e:43:cc <--此处的内容就比较关键了,在VMware虚拟机配置文件网卡的高级选项里,你可以看到被定义的MAC地址或者什么 都没有的空白,你可以手动写入,也可以点击生成按钮,也可以不管,运行Linux虚拟机后使用start_udev扫描 ,也能随机拿到一个自动生成的MAC地址。此处需要定义的MAC地址就是你通过上述手段获得的MAC地址 NAME="System eth0"
通常情况下,定义好网卡配置文件后,输入
service network restart
即可将网络服务重启,并重新获得新建的链路。这里先不管网卡配置是否起来,运行
ifconfig -a
查看目前被识别并且被加载到的链路,如果运行该命令后只有
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
这一条的话,说明你配置的网卡没有被识别,也没有被加载到系统网络服务中使用。出现上述情况时,可以尝试运行
vi /etc/udev/rules.d/70-persistent-net.rules
然后能够看到udev服务识别的网卡设备,将这个文件清空后保存,运行
start_udev
系统会尝试寻找新接入的硬件,再此打开70-persistent-net.rules文件,会看到识别的网卡被自动添加进来
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:4e:43:cc", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"其中,ATTR{address}==为识别到的硬件MAC地址,NAME=后的名称为设备名,也就是网卡配置文件ifcfg-后的名字,重新编辑相应的网卡配置文件,核对MAC地址与70-persistent-net.rules文件内识别的一致后,保存一下网卡配置,使用命令reboot重启虚拟机,即可解决网络连接故障。
某些情况下,调整网络配置时,会导致CentOS内的静态路由表产生变化,静态路由表可以使用命令
route -e
查看,正常情况下可以得到这样的结果
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.145.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 0 0 0 eth0 default 192.168.145.2 0.0.0.0 UG 0 0 0 eth0
如果你运行这条命令后,没有default条目的话,说明系统的默认静态路由丢失了,可以使用路由添加命令重新添加
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.145.2
这条命令的最后192.168.145.2应该改成你自己虚拟机的网关地址,回车后重新运行路由表查看命令,如果有default条目出来了即可。