记一次设备网络问题的排查

李迟按:
清明假期,同事在群里at我,说某场站网络有问题,叫我有空去看看。我收到的网络异常邮件已经几千封了,因为位置不高,所以静待通知。根据log猜测是厂家设备的问题。因为假期,我也无能为力。后来上班,同事叫我去排查,到现场后,更加确认是设备问题。但当时厂家的人因故没来。后来周末同事又在群里at我,说厂家工程师叫我去那边排查。最终解决了问题。在文后总结了这类问题的一般解决思路。

昨天中午下班后(周六上半天班),陪小孩去附近玩,回来后,厂家打电话给我,说到网络问题,他在现场重现不了问题。还改了密码,估计是怀疑别人动过参数,怕别人再改。我叫他跟那天的充电员联系。然后我在群里跟同事汇报了此事。原来是同事给了我的电话对方。后来太困了就睡觉,醒来后,接收几天厂家的未接电话,心想休息了,先不管。接着,同事在群里at了我,叫我晚上填加班单,明天9点半去那边场站,和厂家一起排查问题。我说“好的”。

8点半出门,因为不认得路,路又远——也不算远,离租房的地方不到20公里,骑着电驴,开着导航,跟着走。有几条路在修着,导航可能还不知道,所以走了点弯路,还好加快了速度,在9点半之前赶到现场,打开钉钉打卡,因为不知要搞多久,就没填加班。有个人已经开着电脑蹲在设备前了,上来打招呼,原来对方叫L工,已经到了一个多小时了,后来才知道他住附近,路程就几分钟。

值班室门锁着,去门口调度室询问,无果,就打电话给甲方经理,经理说他叫师傅去开门,回去时就看到门开了。进屋,开电脑,登陆生产环境服务器和后台web,log和页面上,都没找到设备的信息。在设备屏幕上查看网络参数,没异常。在本地运行服务,改设备IP接到电脑,正常。想查路由器的连接列表,但忘记密码,恢复路由路,可以登陆了,找了几次所有页面,没找到有线网络的设备列表,估计路由器是主打无线路由,有线网络只是附属功能就不显示。如此这般,找了一上午,没进展,问题依旧。L工回去吃饭了。

因为路远,不能回去,打开手机搜索,最近的也要3公里才有吃了。刚想出发,发现门没钥匙,又担心人不在,里面东西不安全。只好叫外卖,又发现手机没外卖软件,去下载,发现网速慢——估计因为地方偏僻,信号不好。等啊等,终于下载好了,注册,填地址。因为平时去外面测试,胃口一般不好,吃不下饭。加粉加菜,加上配送费,叫了份20块钱的粉,奢侈了一把。还没吃完,L工就回来了。于是赶紧吃完继续干活。

问题定位

桩没问题,交换机没问题,路由器没问题,本地服务也没问题,综合猜测,是设备出不了外网,生产环境服务器接收不到设备发送的报文。然而界面上的网络参数是正常的,似乎是没问题导致的网络问题。正无头绪之际,L工提到可以连接到设备,里面也是Linux系统。一语惊醒梦中人,最好的办法,就是到设备系统中查看参数,然后测试能否ping通外网。
在连接之前,问了L工能否登陆系统,因为毕竟我不是对方公司的人,于情于理于法,是不能登陆的。L工说他在场就可以。于是用telnet连接,L工输入账号密码,登陆后,用ifconfig查IP,正常,用route -n查网关,却发现没有默认网关。但有2条错误的路由,大概这样:

1
2
3
4
5
route -n          
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

ping外网,不通。此时,基本确认是网关的配置问题。

手动添加默认网关:route add default gw 192.168.1.1,此时可以ping通生产环境服务器了。web页面也看到设备了。

至此,问题原因定位到:因为设备上的默认网关没有配置,导致设备出不了外网,从而导致后台看到不到设备。

解决方案

找到问题就好办了,跟L工说了方案,L工说反馈给研发。又问我能不能现在就改。我说不方便改,因为我对整个软件系统不了解,怕有问题。L工说没事,先暂时改吧。于是分析启动脚本,发现有个脚本已经配了默认网关。但却不生效,于是找了个/etc目录下的启动脚本,添加进入。然后手动reboot,系统起来后,连接正常。然后叫L工打开设备柜门,手动断电重启后,连接也正常。于是将其它的设备也进行相同的修改。观察半小时,网络连接正常。

一看时间,已经3点半了,于是向甲方经理汇报,顺便问一下钥匙的事。再在公司群里向同事汇报。同事回复说“了解”。接着在钉钉上打卡,填写加班单。最后,骑着电车回家。

从问题出现,我就坚持认为是厂家设备的问题,到今天终于切切实实证实的这个事实,前后一共花了1周左右的时候。

扩展知识

使用route查看路由表信息,如下:

1
2
3
4
5
6
route -n          
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

说一下Flags的几个值。

  • U表示路由是启用的,有效的(U即up),上表三条路由均有效。
  • G表示是默认网关(G即gateway),是后面新加的。
  • H表示目标是IP(H即host),只有最后一条路由是带H,从第一列看到,它就是一个IP(事实上该IP是路由网关)。但是,第二条路由192.18.1.0,不是合法的IP,所以没有H

总结

本文所遇问题是局域网内的设备,无法连接到互联网服务器。排查总结如下:
1、观察路由器、交换机接口是否正常,网口灯不亮说明网线或接口有问题。
2、先在局域网内搭建服务,连接设备,观察是否连通。能连通说明局域网网络正常。
3、局域网内,连接多个设备,观察IP是否存在冲突(本文所遇网络问题有一项是IP冲突)。
4、登陆设备,观察设备IP、网关,测试是否可连通外网。IP正常情况下仍无法连接外网,一般是网关出错:要么设备没有网关(本文即该问题),要么网关与路由器地址不一致。

李迟 2019.04.14 周日

  • 本文作者:李迟
  • 版权声明:原创文章,版权归署名作者,转载建议注明出处(当然不注明亦可)。
  • 本文链接:/code-life/device-network-bug.html