虚拟机有三种网络连接方式:
桥接:你的虚拟机在你所在的局域网内相当于一台独立的主机,可以和局域网内的机器互通,当然也可以访问外网。
NAT:你的虚拟机的TCP/IP配置信息是由VMent8网卡的DHCP自动配置的,无法自行修改,所以只能和你的宿主机相互玩耍(你的宿主机能上外网,它也就能)。缺点是局域网中的其他主机和你的虚拟机不能相互访问。
Host-Only:传说中的自娱自乐模式,虚拟机的TCP/IP配置信息室友VMent1网卡的DHCP自动配置的,你的虚拟机之间可以互相通信,虚拟机和你的宿主机也可以互相通信,但是访问不了你宿主机所在的局域网,也就是说访问不了外网。
一般来说我们都使用桥接模式来让虚拟机联网,但如果你只是想联网并且懒的手动配置IP的话,也可以选择NAT模式,躺着联网,方便快捷全自动式配置。
简单的说下桥接步骤:
我用的是VMware,其他虚拟机操作也大同小异
1. 菜单栏-->编辑-->虚拟网络编辑器
选择桥接模式,然后桥接到一张宿主机可以上网的网卡,或者直接选择自动也可以。
2. 第一大坑,虚拟机的网络适配器选择桥接模式,上面的设备状态-->启动时连接这个勾一定要打上
其实在高版本的VMware中这个是自动打上的。。。
3. 开机如果网卡没启动就启动下eth0网卡:ifconfig eth0 up
如果你的宿主机的网卡是dhcp模式的也就是如下图一样是自动获取ip的
你的虚拟机也会自动配置好TCP/IP,如果不是请手动配置。
进入主题,错误总结
1. 手动配置IP的时候忘记配默认网关会出现以下错误
[root@Server ~]# ping 8.8.8.8
connect: 网络不可达
输入route
如下图所示是配置了Default Gateway的
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.4.16.0 * 255.255.252.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 10.4.16.1 0.0.0.0 UG 0 0 0 eth0
这个是没有的
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.4.16.0 * 255.255.252.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
添加默认网关
route add default gw 10.4.16.1 (这个要和宿主机的网关一样,宿主机打开cmd输入ipconfig,就可以看到每块网卡的信息)
不过这个方法不是永久的添加了默认网关,关机重启或者重启网络服务的时候就失效了
永久添加默认网关
方法一:在vim /etc/networks下添加GATEWAY=10.4.16.1 然后重启网络服务service network restart
方法二:在vim /etc/sysconfig/network-scripts/ifcfg-eth0(你选择的网卡)下添加GATEWAY=10.4.16.1 然后重启网络服务service network restart
不过ifcfg-eth0文件的优先级是高于networks文件的,一般在ifcfg-eth0下面配置IP的时候直接把默认网关也配了。
方法三:vim /etc/sysconfig/static-routes(如果没有static-route就新建一个)下面添加any net default gw 10.4.16.1
2. DNS没有配置会出现下面的错误
[root@Server ~]# ping baidu.com
ping: unknown host baidu.com
配置DNS
方法一:和上文一样也是在vim /etc/networks中添加,添加语句nameserver 8.8.8.8和nameserver 114.114.114.114这个是谷歌的和电信的dns如果你要添加宿主机的也可以,在宿主机的网络和Internet设置-->以太网-->点你的网络-->拉到最下面可以看到宿主机的DNS
方法二:在vim /etc/sysconfig/network-scripts/ifcfg-eth0中添加DNS1=8.8.8.8和DNS2=114.114.114.114
方法三:如果宿主机和虚拟机(ifcfg-eth0中的BOOTPROTO=dhcp)都是dhcp模式,会自动设置DNS,如果配置了默认网关好像也会自动获取。
查看DNS
[root@centos ~]# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 8.8.8.8
nameserver 114.114.114.114
总的来说只要在vim /etc/sysconfig/network-scripts/ifcfg-eth0这个配置文件下配置了IP地址,子网掩码,默认网关以及DNS
就可以了。
DEVICE=eth0(设备名)
HWADDR=00:0C:29:B9:99:5E(网卡硬件地址(MAC地址))
TYPE=Ethernet(网络类型)
UUID=d8904cd6-2bd4-435c-ac09-edd5d93232cf(通用唯一识别码)
ONBOOT=yes(是否开机启动)
NM_CONTROLLED=yes(network manager的参数,实时生效不需要重启)
BOOTPROTO=static(用指定的方式来获取地址,有static,dhcp,和none三种)
IPADDR=10.4.16.50(IP地址,要和宿主机在同一网段,一般自定义最后一个数字就好了)
GATEWAY=10.4.16.1(默认网关,和宿主机一样)
NETMASK=255.255.255.0(子网掩码,和宿主机一样)
BROADCAST=10.4.18.255(广播地址)
DNS1=8.8.8.8(第一个dns服务器)
DNS2=114.114.114.114(第二个dns服务器)
简单的配置只要配了红色字体就可以了。。。
修改完记得重启网络服务:service network restart
3. 防火墙影响
关闭linux防火墙:service iptables stop
禁止防火墙开机启动:chkconfig iptables off
检查防火墙状态:service iptables status
然后把宿主机的防火墙也关了,我的就是只有关闭宿主机的防火墙虚拟机才能ping通宿主机
有关校园网的问题
我在学校宿主机的ip是10.4.18.20而网关是10.4.16.1子网掩码是255.255.252.0
我把虚拟机的ip设置成10.4.18.n,会出现可以ping的通8.8.8.8,ping外网的时候网址的ip也可以解析出来,但就是不出现包的
信息必须Ctrl+c才能结束
我的解决方式是把10.4.18.n改成了10.4.16.n才能ping通
但是问题又出现了,这个n也有要求比如10.4.16.22就可以ping外网,而10.4.16.20就不行和10.4.18.n情况一样。。。
我猜是虚拟机发出的包少了什么配置数据,所以被校园网的防火墙给劫了,导致返回不了数据,因为我用虚拟机ping宿主机,当宿主机的防火墙没有关的时候也是这样,一直没有数据返回。
于是我就让宿主机脸上wifi结果一切畅通,丝滑流畅。。。校园网真的是坑。。。
为了论证我的猜想,我在虚拟机上安装了traceroute
traceroute baidu.com 路由追踪了下,看看是那个网关被拦截了,结果如下
traceroute to baidu.com (123.125.115.110), 30 hops max, 60 byte packets
1 * * *
2 10.1.0.117 (10.1.0.117) 1.871 ms 1.853 ms 3.254 ms
3 10.1.1.22 (10.1.1.22) 32.760 ms 33.625 ms 33.590 ms
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * *^C
最后说个注意点:因为校园网是用NAT方式的,所以如果虚拟机用的是桥接方式那么设置IP地址的时候不能和校园网上已存在的IP地址一样,避免冲突。
另外附上traceroute的使用方法,用来检测网络在哪一跳上出问题还是不错的
https://jingyan.baidu.com/article/6d704a132dbf6e28da51ca6a.html
不过这里面traceroute的安装方式是Ubuntu的
也可以用yum安装:yum install -y traceroute
如果更加专业一点可以选择Wireshark这款抓包工具,功能更强大