Linux 桥接ping不通外网(特别是校园网) 解决方式及错误总结

虚拟机有三种网络连接方式:

桥接:你的虚拟机在你所在的局域网内相当于一台独立的主机,可以和局域网内的机器互通,当然也可以访问外网。

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这款抓包工具,功能更强大

  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值