Linux下某内网主机无法连接,通过添加路由表解决;路由表等网络知识学习

1 问题描述与解决

这里要记录一个很奇怪的问题,当然是对我这种新手来说的。问题描述如下:

当前一台Ubuntu 18.04主机在校园网环境中(同济大学,上海嘉定,上海电信),在apt安装软件的时候经常出现无法连接或者哈希值不匹配的问题,如图:

这时ping该机器也无法连通,所以我就认为是网络问题了,主要是有时候好像有的软件安装也没问题。

由于以前没有遇到过类似的问题,我过分自信认为是电信缓存服务器出了问题,经常不稳定,所以还给客服打电话投诉。后来同学使用了添加路由表的方法解决了该问题,这里放一个图(xiaoqiang是小米路由器吧):

所以这里也就是一条命令的事情:

sudo route add -net 172.21.0.0/16 gw 192.168.3.1

我判断出问题的点在于apt报错中的无法连接,然后用ping验证是否能连通也确实无法连接。当然ping使用ICMP协议,所以有时候被禁用了也无法用ping判断。http请求和ping都不可达,让我认为这是缓存服务器不稳定,经常出问题。

这个route命令添加路由表解决该问题使我认识到连接不通还有可能不是服务器或者别的网络原因,还可能使自己的路由表的原因。以前从不知道还能这样,因为各种网页访问和下载,包括实验室Windows机器使用迅雷和P2P网络等都一切正常,所以我才判断为单单这个缓存服务器不稳定。

2 路由表等有关网络知识学习

说了问题和前因后果,下面就要好好学习该问题涉及的知识点了,主要还是路由表的知识,可以说一无所知,知识盲区。

先从简单的开始,首先是网关(Gateway)这个概念。网关又称为网间连接器,从名称看可以知道其主要使作为网络互连用的,工作在不同的网络之间。就日常用的来说,网关一般就是路由器的IP。参考百度百科,比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。

当前我们普遍使用DHCP服务器,不自己手动设置网关等,所以也很少了解到路由表、网关等如何设置。如下面这个Windows网络属性,都是自动获得:

Linux下我一般用ifconfig命令,得到如下结果:

该命令查询到的包括本机ip,子网掩码和ipv6等信息,没有网关地址。查看网关地址可以用:

route -n

结果为:

也就是网关为192.168.206.193,这个命令添加了-n是为了将人类易读的如“_gateway”转换为数字显示。

接着的概念就是子网掩码,这个我一般见到的是255.255.255.0,一般对应192.168.0.1这种路由器设置。而上面的截图中,子网掩码为255.255.255.224,这个也不是很理解,说明了解很模糊,所以这里记录下子网掩码的知识。子网掩码用来指明一个ip地址的哪些位标识是主机所在的子网,哪些是主机的位掩码。子网掩码不能单独存在,必须结合ip地址一起使用。其作用只有一个,就是将某个ip地址划分位网络地址和主机地址两部分。

子网掩码的设定必须遵循一定的规则。与二进制IP地址相同,子网掩码由1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。而这些0和1的个数可以自己设定,255.255.255.0这种就是C类地址默认的子网掩码。

上面的截图中255.255.255.224实际对应的二进制形式位11111111.11111111.11111111.11100000,也就是后面5位是主机位。这样子网的主机数量也就确定了,五个0,那么就是2的5次方减去2,即为30。因为主机号全1是广播地址,全0是网络号。192.168.206.197(11000000.10101000.11001110.11000101)这个机器ip与子网掩码按位与得到192.168.206.192(11000000.10101000.11001110.11000000)就是网络地址,接着子网掩码按位取反(即主机号全1),然后与网络地址按位或运算得到192.168.206.223(11000000.10101000.11001110.11011111),这个就是广播地址了,与截图中一致。

前面这些介绍了网关、子网掩码和广播等基础知识,下面就是路由表了。

从百科上看一点简介:路由表是指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。一般来说,路由表可以分为两种,一种是静态路由表,一种是动态路由表。比如前面示例中用add命令添加的录有就是静态路由表,这是由管理员设置的。动态路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。

下面看route命令得到的都是什么东西:

第一列目的地址不用说了,就是访问什么ip使用该路由。默认路由0.0.0.0(不加-n参数时显示为default)目的地址说明所有包都从该路由走。当然这个是有优先级的,否则有了默认的其他的也就没法工作那就麻烦了。这里找了一段形象的解释:

一般多网段之间互相通信,希望建立一条优先路由,而不是通过默认网关时就可以配置网络路由。拿房子比喻,你现在不是要出门,而是卧室,卫生间,去卧室就要经过卧室的门,去卫生间也要经过卫生间的门,这里的卧室和卫生间的门就可以认为是去往某一网段的路由,而不是默认路由(即房子的门)。

第二列网关已经解释,第三列子网掩码也解释了。

第四列标志(flags)有多个值,U表示为开启状态(Up),G表示此网关(Gateway)为一路由器,其他值暂不提。

一般来说,这些路由都是动态生成的,不用去管。其中有个link-local,也就是169.254.0.0。系统使用动态地址,且找不到DHCP服务器时,则会得到一个169.254.x.x的地址。

route命令使用前面已经提到了,如-n或者add。add参数指定添加路由,后面跟的net时添加一个网段到路由中,如果是host说明是添加一个主机到路由中。接着的内容表示这个网段走哪个网口,如跟gw 192.168.3.1说明走该网关,走别的如:

route add –net 192.168.1.11 netmask 255.255.255.0 eth0

则是eth0网口,其实还是要去读取其对应网关信息,等效于gw参数。

删除路由也类似,如:

route del -net 192.168.122.0 netmask 255.255.255.0

3 原问题分析

一开始并不了解路由表,先跟踪网络:

这里发现会到172.21.0.233,说明是上层机器,可以访问到。但是通一个网段的172.21.0.162却不行,所以以为是该服务器异常。

后来了解了一点路由表,发现原来的机器也就是192.168.3.1网段里的这个Ubuntu机器,对应的同样环境的Windows机器的路由表信息如下:

该机器无对应的172.21.0.162机器的路由,也能正常ping通。另一个类似的Linux机器没添加该路由也能ping通:

后来仔细对比下这台机器,发现它多了个172.0.0.0的路由表,是oray_vnc的:

正是因为该条目存在,删除了172.21.0.0的路由则无法ping通172.21.0.162。这也就是原因了,有172.17.0.0这个路由存在,不会影响172.21.0.0,但是有了172.0.0.0的存在,则在没有172.21.0.0的情况下会走该172.0.0.0路由,因而导致不通。

所以该问题结论也就清晰了,就是不知道为什么路由表多了个172.0.0.0的oray_vnc路由,没单独配置172.21.0.0路由的情况下不通。要么就配置172.21.0.0,要么就在不配置的情况下把172.0.0.0的也删除。这也是对应了前面提到的路由表的优先级,172.21.0.162不会走172.17.0.0这个路由,但是会走172.0.0.0,如果172.0.0.0也不存在,则自然就走默认路由也就没事了。

4 其他

首先要说的就是,route add添加的是临时的,要想让该配置永久生效要写到:

/etc/sysconfig/static-router 

等文件中。

另外,遇到类似问题给结论不要太武断,我这里就存在这样的问题,从不了解路由表也没觉得有人或者软件会修改路由表。路由表是一方面,还可以用iptables -L查看所有防火墙规则帮忙诊断。

最后,前面提到的“电信缓存服务器”要说下,从跟踪来看,经过了192.168.3.1网关后,就是100.64.255.254了,这个其实也是内网ip,就是运营商级别的保留地址。后面172.21和10.255也是本地局域网ip,直到202.112.27.1才是中国教育网。这个“电信缓存服务器”就不确定了,电信一般也不做这种缓存,所以应该说是教育网的缓存服务器。

猜你喜欢

转载自blog.csdn.net/u012911347/article/details/83116875
今日推荐