Linux下NAT模式和桥接模式的网络配置
最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里。
我的运行环境是:主机 windows 7 虚拟机 Virtualbox +centos6.7
一、相关概念
linux虚拟机有三种网络模式,分别是Bridged(桥接模式)、NAT(网络地址转换模式)、Host-only(主机模式)。
1、NAT(网络地址转换模式)
使用NAT模式,就是让虚拟系统借助NAT的功能,通过宿主机所在的网络来访问公网。在这种模式下宿主机成为双网卡主机,同时参与现有的宿主局域网 和新建的虚拟局域网,但由于加设了一个虚拟的NAT服务器,使得虚拟局域网内的虚拟机在对外访问时,使用的则是宿主机的IP地址,这样从外部网络来 看,只能看到宿主机,完全看不到新建的虚拟局域网。
这种情况下虚拟机可以上网可以ping通主机,但是主机ping不通虚拟机。
优点:利用Virtualbox安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,只要宿主机器能访问互联网即可。
2、Bridged(桥接模式)
在这种模式下,Virtualbox虚拟出来的操作系统就像是局域网中的一*立的主机,它可以访问网内任何一台机器,需要手工为虚拟系统配置IP地址、 网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信,虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。从 网 络技术上理解相当于在宿主机前端加设了一个虚拟交换机,然后宿主机和所有虚拟机共享这个交换机。
这种情况下主机和虚拟机可以互相通信,虚拟机也可以上外网。
优点:利用Virtualbox在局域网内新建一个虚拟服务器,为局域网用户提供网络服务。
3、Host-only(主机模式)
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时就可采用host-only模式,在这种模式下宿主机上的所有虚拟机是可以相互通信 的,但虚拟机和真实的网络是被隔离开的。
在这种模式下新建了一个由所有虚拟机与宿主机所构成的局域网,但该局域网与宿主机本身所处的现有局域网是相互独立的,如果不做额外路由设置,这 两个局域网之间不会连通,因此新建的局域网可以认为是一个单独从属于当前宿主机的私有网络,其成员为当前宿主机和相关的所有虚拟机。
从网络技术上讲相当于为宿主机增添了一个虚拟网卡,让宿主机变成一台双网卡主机(宿主网卡+虚拟网卡)。同时在宿主机后端加设一个虚拟交换机,让 宿主机和所有虚拟机构成另一个虚拟的局域网。由于具备双网卡,宿主机可同时参与两个局域网(现有的宿主局域网+新建的虚拟局域网),只不过缺省情 况下两个局域网不连通。
优点:利用Virtualbox创建一个与网内其他机器相隔离的虚拟系统,进行某些特殊的网络调试工作。在
下面介绍分别在NAT模式和桥接模式进行网络配置的详细过程。Host-only的模式我用的不多,所以这里就不介绍啦。
二.NAT模式下的网络配置
1. virtualbox界面下菜单栏: 控制-设置-网络
2.在命令端输入vi /etc/sysconfig/network-scripts/ifcfg-eth0,如下图
3.编辑网络配置文件
4.vi编辑,不会的请自行百度,如下图:
5.输入 service network restart 重启网卡
6.重启后输入:ping www.baidu.com(或其他可以访问的网址),如果出现以下界面说明可以连上外网
7.注意:此处可能出现以下bug
1)在Virtualbox 克隆出来的CentOS Linux情况下,
输入命令ifconfig后,并没有看到eth0。然后重启网卡又报下面错误。
输入命令 :service network restart
故障现象:
2)解决办法:
点击界面右上角网络连接的电脑图案,如图:
然后点击右键,选择connection information
3)输入 vi /etc/udev/rules.d/70-persistent-net.rules
从显示的内容中找到ATTR{address}为08:00:27:97:29:c1也就是与上图中第一个红框的物理地址相符合对应NAME的值,如下图,红框里面本来是NAME=“eth2”,现在将eth2改为eth0
然后将该物理地址复制后,
在命令端输入vi /etc/sysconfig/network-scripts/ifcfg-eth0,替换掉HWADDR对应的值。保存配置。
4)此时再重启网卡,输入service network restart,应该就恢复正常。
三.桥接模式下的网络配置
1. virtualbox界面下菜单栏: 控制-设置-网络
2.在主机中打开cmd命令行,输入ipconfig,查看ip地址,网关等相关信息
3.在虚拟机命令端输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0
手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段。
注意:此处子网掩码NETMASK 和 网关GATEWAY跟主机的保持一致,还要添加2个DNS。
4.输入命令:cat /etc/resolv.conf
如果显示出之前配置的2个DNS地址,则说明主机没有屏蔽ping命令如下图:
否则,就要去检查主机防火墙是否打开,是否屏蔽了ping命令
5.重启网卡,输入service network restart,然后再ping www.baidu.com,如下图:
6. 注意:此处可能出现以下bug
如果在虚拟机出现可以ping通外网和网关,但是主机和虚拟机互相ping不通。解决办法如下:
1)检查主机防火墙是否打开,主机网络是否共享。这里要求防火墙关闭,主机网络共享。以及禁用其他网络。
2)检测linux虚拟机是否开启防火墙,如果已开启,就关闭防火墙或者不用关闭防火墙,输入setup,打开防火墙对应的端口。不会的话请自行查看百度。
3)此处,重启主机网络:找到本地网络,点击右键查看属性,检查是否有桥接的驱动,如果没有,需要安装一个。然后双击TCP/IPv4,
打开后确认是自动获取IP地址(这点很重要)。然后关闭返回上一个界面。将TCP/IPv4选项前面的勾去掉,保存设置。再重新选中打勾,保存。
4)此时,再去测试与主机连接。应该就能够互相ping通。我这边测试就恢 复正常。如果大家测试的时候发现还是不起作用,再根据具体情况分析解决。