双网卡-网络问题
网络问题剖析
谢艺华 2019-10-10
1.背景
同事在工作中出现了一个网络问题,其网络拓扑如下图:
图1.网络拓扑图
其异常现象如下:
据同事的解决方式是:先把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接口的网关。
在四层协议系统中,我们知道正常的上网过程,都会经过网络层,其中路由选择就是数据包走向的依据。主要有三点:
通过以上的路由选择可知,我们可知,eno1和eno2都是默认标目,会优先选择metric值较小的接口,进行转发报文。
通过上述的分析,我们可以在服务器上添加一个默认路由:
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通?
总结
- 上一篇: 听过闰年闰月,听过闰秒吗?
- 下一篇: 音频常用协议说明 IIS TDM PDM