Linux 网络故障排查基础篇

本篇文章介绍了Linux网络中故障排查的基本思路,看看你对路由的熟悉程度有多少。

回顾上篇文章:KDC 多机房 HA 架构演进

基础概念

在运维工作中,经常会遇到这样的问题,到 A 服务器怎么不通了,是不是网络有问题?然后就开始轰炸网络工程师,网络是一个大而复杂的架构,出现问题的点非常多,比如接入层交换机的端口 down 了,影响一台服务器,接入层交换机 down 了,可能会影响一个机柜,汇聚层交换机 down 了,可能会影响几个机柜,并且很多数据在公网上跑,公网的一次路由收敛一次抖动都可能会影响到服务器的连通性,所以为了快速定位问题并解决问题,SRE 工程师需要做好服务器侧的网络排查。

网络通信模型

说到 Linux 网络通信,作为运维人员,不得不熟悉 OSI 七层和 TCP/IP 四层

对于日常运维中排查 Linux 网络故障方面用到的基本就是三层以下,下面我以通俗的方式给大家介绍下。

物理层(一层):定义物理传输介质的特性。这一层最底层,像定义用光纤传输,还是用同轴线缆传输之类的

数据链路层(二层):根据报文的目的 MAC 直接进行转发,其实就是 MAC 地址之间的通信,据链路层只完成同一局域网中的不同主机之间的通信,一个 vlan 是一个广播域,同 vlan 内的主机通过二层转发是可以通的,此处不涉及路由。

网络层(三层):定义了能够标识所有结点的逻辑地址即 ip,以及如何选择合适的网间路由和交换结点,不同 vlan 之间的主机是通过三层路由进行互通的

报障前的测试

当存在网络不通的故障时,访问出端和入端的信息是我们都要收集的,目的在于确定问题所在的主机或者网段。假如 a 不能访问 c 而 b 能够访问 c,那么很明显问题出在 a 或 a 到 c 的网络上,而通过同一子网中的几台机器 a、b 可以正常访问网络,却不能访问 c,那么可能是这个网络到 c 存在问题,或 c 存在问题,定位了问题所在的主机,一般有一些步骤来逐渐缩小问题范围,最终定位问题。

Linux路由选路规则

网络问题大多数情况下都跟路由有关,那么首先要学会看懂路由表,以下将简单介绍下如何读懂路由以及选路。

路由分为普通路由和策略路由,普通路由是以目的 ip 为准,和主机上的路由表进行逐条匹配,以最长匹配原则选路,如果你想根据某个目的 ip 来选择从哪个接口出去,则需要用到策略路由Linux 系统可以同时存在 256(0-255)个路由表,而且每个路由表都各自独立的,iproute 提供了一个路由表和名称的对应表 (/etc/iproute2/rt_tables),可以根据需要增加路由表,数据包在传输时是根据 RPDB(路由策略数据库) 内的策略决定数据包应该用哪个路由表传输的,通过命令 ip rule show 可以查看,此文暂不展开介绍策略路由的配置规则。

对于普通的路由匹配规则(划重点)

如下:

服务器是将本机 ip 与子网掩码做与运算,得到网络地址,然后将访问的目的地址与子网掩码做与运算,若网络地址一致,则说明在同一网段,直接在本网段内广播,无需路由

举例:

结论:

访问目的地址 A,由于网络地址相同,和本机 ip 在同一网段,则直接二层转发,无需路由,若可以 ping 通,则证明二层没有问题,直接进入三层路由判断。

访问目的地址 B,由于网络地址不同,不同 vlan 间互访需要进行三层路由,则从上到下顺序匹配选择 10.0.0.0 这条路由,通过 eth0 端口,发送到网关 10.128.196.254,然后再通过网络设备进行选路。

Linux 网络排查步骤

1

第一步:确定二层以下是否 ok

(以服务器单网卡为例,多网卡类似)

Ping网关地址

如果通,证明二层没有问题,直接进入第二步三层路由判断。

如果不通,需要进一步确认是系统配置问题还是网络问题。

系统配置检查

1、ping 本机 ip 地址,确认网卡是否正常

2、检查网卡配置,子网掩码等是否配置正确,如果掩码是 255.255.255.128,若配置成 255.255.255.0,则访问 10.128.196.129 则会出现问题。

3、检查本机网卡是否 up

4、检查网卡速率是否正常以及是否是全双工,有些可能由于网线等原因自动协商成 10Mb/s 等,也会影响访问质量

网络侧检查

1、 交换机端口模式配置是否正常,如是否配置了 access 模式

2、 交换机 vlan 信息是否配置正确

3、 其他网络问题

以上,是针对单网卡单 ip 或者单网卡多个同段 ip(eth0:ip)的判断方式。

如果有单网卡多个不同网段 ip(eth0.ip)这种方式,会涉及其他网络问题,如需要打 vlan 标签,需要网络设备配置端口 trunk 模式等,排查过程略麻烦,但基本思路一致。

2

第二步:确定三层路由是否 ok

ping 非本机 ip 网段地址

系统侧排查

1、 通过 route –n 查看路由表,会分多种路由,主机路由,默认路由等,根据上面介绍的匹配规则,查看路由是否配置正确

2、 如有有策略路由等,需要进一步根据匹配规则确定到目的 ip 的路由,此基础篇暂不详解策略路由。

3、 对方是否禁 ping,是否有白名单等,可以 ping 其他 ip 做测试

4、 通过 traceroute 或者 mtr 进行分析,看路由是否出本机到了网络设备

5、 通过 tcpdump 或者 tshark 进行抓包分析

网络侧排查

1、 查看网络设备状态

2、 查看网络路由

3、 运营商问题

4、 其他情况

小结

Linux 侧的网络故障定位,只要掌握了方法是很快速而简单的,对于 DNS 解析错误,对方业务端口 down 等等这些问题本文不做过多分析,问题千万种,方法是关键,愿本文对大家的排查思路有些许帮助。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180410G1CRQT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券