1 摘要
在使用VM搭建虚拟机时,很多时候就需要和主机通信,来模拟一些情景,做一些网络程序的测试等很多工作。但是我们的网络环境可能并不是一直都不变的。可能今天在这个局域网下,明天再另外一个局域网下,甚至说,直接就是没有连接网络······简单的说,我们主机的ip可能会发生变动!当然,我们只需要对应修改虚拟机的ip就OK。而实际情况是,一台机器可能觉得还好,用su命令获得root权限,然后在使用setup命令一步一步来修改并保存,最后使用service network restart命令来重启网络。但是如果是几台呢?(以4台为例),我们使用命令修改ip还是需要好几分钟的,那么问题来了,我们怎么样才能快速的根据主机ip的变化来修改虚拟机ip呢?
2 分析
修改ip,除了可以使用setup命令以外,还可以直接用vim编辑器修改配置文件,该配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth0,使用more命令查看内容如下:
1 DEVICE=eth0 2 BOOTPROTO=none #BOOTPROTO设置为none 3 HWADDR=00:0C:29:37:9B:D3 4 IPV6INIT=yes 5 NM_CONTROLLED=yes 6 ONBOOT=yes 7 TYPE=Ethernet 8 IPADDR=10.106.0.203 #IP地址 9 NETMASK=255.255.0.0 #子网掩码 10 DNS2=10.4.1.31 #DNS域名解析服务器 11 GATEWAY=10.106.1.254 #默认网关 12 DNS1=10.4.1.30 13 USERCTL=no
也就是说,只要修改该配置文件,再使用service network restart命令重启网络服务,再使用ifconfig命令查看IP,会发现IP已经修改过来了。所以,关键点还是要修改该配置文件。这时,有一个简单且使用的办法。那就是事先写好配置文件,并且使用more命令查看,最后将more命令得到的结果使用管道符覆盖到ifcfg-eth0配置文件中!这样就达到了修改配置文件的目的,由于还涉及到重启网络服务等命令,使用一行命令不能解决问题。故采用shell脚本,写成命令集合,直接执行!
3 操作方法(以window10+VM12为例)
3.1 主机连网状态下
3.1.1 查询主机IP信息
使用win+R并且输入cmd打开DOS窗口,输入ipconfig命令,如下图:

从红框中,可以得到主机的IP主要信息:
1 IP:10.106.0.27 2 子网掩码:255.255.0.0 3 默认网关:10.106.1.254 4 DNS服务器:10.4.1.30(主) 5 10.4.1.31(备用)
3.1.1 生成配置文件参数
在虚拟机的设置中,将网络适配器一项修改为桥接模式。再使用more命令/etc/sysconfig/network-scripts/ifcfg-eth0文件并将内容写入config.txt中。内容如下:
1 DEVICE=eth0 2 BOOTPROTO=none 3 HWADDR=00:0C:29:37:9B:D3 4 IPV6INIT=yes 5 NM_CONTROLLED=yes 6 ONBOOT=yes 7 TYPE=Ethernet 8 IPADDR=10.106.0.203 #IP地址,一定要和主机处于同一网段 9 NETMASK=255.255.0.0 #子网掩码,一定要保证和IP做位与运算的结果和主机的IP和子网掩码做位与运算的结果相同,比如,这里的结果都为0 10 DNS2=10.4.1.31 #域名解析服务器,一定要和主机保持一致 11 GATEWAY=10.106.1.254 #默认网关,一定要和主机保持一致 12 DNS1=10.4.1.30 #默认网关镜像,一定要和主机保持一致
13 USERCTL=no
3.1.2 shell脚本
配置文件得到之后,接下来只需要将命令写成shell脚本,让它批量执行了。(就像Window下bat后缀名的文件)shell脚本文件如下:
1 #使用more命令和管道符将写好的配置文件内容覆盖网络服务配置文件 2 more /root/Desktop/HasNetWork/conf.txt > /etc/sysconfig/network-scripts/ifcfg-eth0 3 #关闭网络服务 4 service network stop 5 #开启网络服务i 6 service network start
这时,命令已经写好了。以后只需要执行这个shell脚本(到该脚本目录下使用./脚本名命令执行),就能将虚拟机和主机的IP设置在同一网段了,这样在window的DOS窗口下使用ping命令也就能ping通了。

这时,两台机器就能通信了;也能使用ssh客户端进行远程操作了!
3.2 脱机状态下
3.2.1 设置VMware Network Adapter VMnet1网卡信息
设置VMware Network Adapter VMnet1的TCP/IPv4属性:

只需要设置IP地址,子网掩码就行,默认网关、首选DNS服务器等属性就不需要设置,因为并不需要主机和外界通信,这时的主机就相当于与外界没有任何联系的“一座孤岛”!
3.2.2 生成配置文件参数
在虚拟机的设置中,将网络适配器一项修改为仅主机(host-only)模式。再使用more命令/etc/sysconfig/network-scripts/ifcfg-eth0文件并将内容写入config.txt中。内容如下:
1 DEVICE=eth0 2 BOOTPROTO=none 3 HWADDR=00:0C:29:37:9B:D3 4 IPV6INIT=yes 5 NM_CONTROLLED=yes 6 ONBOOT=yes 7 TYPE=Ethernet 8 IPADDR=192.168.2.203 9 NETMASK=255.255.255.0 10 USERCTL=no
3.2.3 shell脚本
配置文件写好之后,也是写shell脚本以便于批量执行。内容如下:
more /root/Desktop/NoNetwork/conf.txt > /etc/sysconfig/network-scripts/ifcfg-eth0 service network stop service network start
如果主机处于脱机状态下,那就执行该shell脚本设置虚拟机的IP吧!这样主机和虚拟机又能愉快的处于同一网段了,又能愉快的使用ssh客户端了。
4 总结补充
使用这种方式,无论主机IP怎么改变了,所做的就是修改下ip配置文件config.txt,而后执行shell脚本,最后执行shell脚本了。从而避免了大量的繁琐重复的工作。就像是一个应用软件,只要双击执行,就能达到目的!具有极强的可扩展性和复用性!
VM虚拟机三种网络连接模式:
- 桥接模式:虚拟机也相当于在虚拟局域网内的一台独立的主机,可以和外界联系。网络拓扑结构和主机连接在同一集线器上的两台独立主机!如果想要和主机建立通信,就需要手动设置IP、子网掩码等信息,以保证两台主机在虚拟局域网内处于同一网段!一般想要在虚拟局域网内再建一台服务器的提供服务的话,使用该模式,比如为网站做分布式缓存,负载均衡服务器等性能优化测试。
- NAT模式:就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。IP、子网掩码、物理地址等信息都是由VMware Network Adapter VMnet8网卡分配。采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机 器能访问互联网即可。
如果你想利用VMWare安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议你采用NAT模式。
- 仅主机模式(host-only):在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。在host-only模式下,虚拟系统和宿主机器系统是可以相互通信的,相当于这两台机器通过双绞线互连。在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由VMware Network Adapter VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。比如脱机状态下就可以使用该模式建立与虚拟机的通信。
到这里,配置基本上完成了!但还是需要到到shell脚本所在的目录去执行该文件(或者记录下该配置文件所在的完整路径)。但为了更方便的调用该shell脚本,可以将此shell脚本做成service(服务),就像启动httpd(http服务器)、iptables(防火墙)服务那样的调用,故可以在/etc/init.d目录下新建后文件(以hasnetwork.conf为例),再将脚本内容写入该conf文件,这样就可以直接在终端中使用命令service hasnetwoek start方便快捷的修改IP设置了。
注:所有Linux操作命令都基于root权限下
浙公网安备 33010602011771号