双网卡-网络问题

网络问题剖析

谢艺华 2019-10-10

1.背景

同事在工作中出现了一个网络问题,其网络拓扑如下图:

                                                                                      图1.网络拓扑图

 

 

其异常现象如下:

  1. 服务器不能访问外网,但能ping通路由器。
  2. 外网不能访问服务器(路由器上已经做好了相关的端口映射)。

 

据同事的解决方式是:先把eno1和eno2两个网口拔掉,先插eno1,再插eno2。的确,这么操作之后,服务器就可以正常连接外网了,并且也可以通过外网访问服务器了。至于原因,还不是很清楚。

2.知其然知其所以然

通过排查,发现异常和正常情况下,服务器的路由表如下:

 

                                                                                        图2 : 异常路由表

                                                                                       图3:正常路由表

 

其实通过对比,我们就知道大致问题了。很容易联想到网关的问题。

2.1 route命令解析

route命令输出的路由表字段含义如下:
Destination 目标网络或目标主机(本机的数据要发送的目的地:子网或主机),与Genmask组成一个网段。
Gateway 网关(如果是默认网关,网关的地址必须和自己的主机上的其中一块网卡在同一子网)即网关地址。如果没有就显示星号。
Genmask 网络掩码,如果目标网络的的子网掩码为255.255.255.255,说明目标是一台主机;如果子网掩码为'0.0.0.0' 说明该路由是默认路由。
Flags(旗标)
代表的意义如下: 
U (route is up):该路由是启动的; 
H (target is a host):目标是一部主机 (IP) 而非网段; 
G (use gateway):需要透过外部的主机 (gateway) 来转递封包(该行有gw);
R (reinstate route for dynamic routing):使用动态路由时,恢复路由资讯的旗标; 
D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由 
M (modified from routing daemon or redirect):路由已经被修改; 
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
A (installed by addrconf)
C (cache entry)
Metric 距离、跳数。与目标的“距离”(通常以跳数计算)。它不被最近的内核使用,但可能需要路由守护进程。

Ref 不用管,恒为0, 对这条路线的引用次数(Linux内核已不再使用)。
Use 该路由被使用的次数,可以粗略估计通向指定网络地址的网络流量。 路线查询次数。根据-F和-C的使用,这将是路由高速缓存丢失(-F)或命中(-C)。
Iface 接口,即eth0,eth1等网络接口名,为此路由发送数据包的接口。

 

通过以上的分析,我们就能大概知道为什么先插eno1就可以正常联网了。因为eno1的Metric值较小,优先选择了eno1接口的网关

 

    1. 路由选择

在四层协议系统中,我们知道正常的上网过程,都会经过网络层,其中路由选择就是数据包走向的依据。主要有三点:

  1. 搜索路由表,寻找能与目标IP地址完全相同的标目,如果找到,将数据传给这个接口
  2. 搜索路由表,寻找到目标网络号相同的标目,如果找到就将报文发给该标目指定的下一站路由或接口
  3. 搜索路由表,寻找标为默认的标目。如果找到就将该报文发送给指定下一站路由
  4. 如果以上都没有匹配到,则丢弃该报文。

 

通过以上的路由选择可知,我们可知,eno1和eno2都是默认标目,会优先选择metric值较小的接口,进行转发报文。

 

 

    1. 解决方式

通过上述的分析,我们可以在服务器上添加一个默认路由:

route add defualte gw 192.168.18.1

之后的路由表如图:

 

                                                                                          图4: 路由表

有图可知,路由表中多了一个默认网关项,且Metric值为0。该方法只是临时有效,设备重启就会失效。可以

echo "route add defualte gw 192.168.18.1" >> /etc/rc.local

永久生效

 

3.问题

在排查问题的过程中,遇到了一些有趣的现象,当然也可以通过上述的知识点解释通。但是我觉得有兴趣的同事还是可以思考一下。其路由表如图:

 

                                                                                            图5:异常的路由表项

eno1:

ip: 192.168.18.150

netmask: 255.255.0.0

Gateway: 192.168.18.1

DNS: 192.168.18.1

eno2:

ip:192.168.10.1

netmask: 255.255.255.0

gateway:192.168.10.1

DNS:114.114.114.114

 

3.1 服务器端能够ping通路由器,却不能访问外网?

3.2 服务器端 ping www.baidu.com 能够获取域名的IP,却无法ping通?

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章