双网卡-网络问题

网络问题剖析

1.背景

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

其异常现象如下:

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

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

2.知其然知其所以然

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

异常路由表

正常路由表

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

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接口的网关

2.1 路由选择

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

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

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

解决方式

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

route add defualte gw 192.168.18.1

之后的路由表如图:

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

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

永久生效

3.作业

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

异常的路由表项

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

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

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


若我的内容对您有所帮助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。
我的宗旨:
踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢艺华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值