记一次奇怪的服务器“事故”

Last Updated At: 2017-03-31

游戏名目

2017.03.30 一大早,正想从实验室FTP服务器下载一些毕业照下来,发现服务器无法连接,本能地使用浏览器打开实验室主页,发现也无法访问,与此同时实验室的同学也反映无法访问服务器的情况。ping 实验室主机地址,持续出现 Request timeout for icmp_seq 100% 丢包错误。网络中心重启了主机后仍然无法访问,和实验室小伙伴配合到现在(Fri Mar 31 16:34:34 CST 2017 )才总算搞明白了如何回事,记录如下。

记录过程

  1. 2017.03.30 晨,所有远程服务熄灭,ping 服务器 100% 丢包,判定为服务器离线;
  2. 网络中心重启,仍然不能访问,但是重启过程中出现了短暂了连线状态,有几个包通信成功,但是随即又进入100%丢包;
  3. 到机房可物理登录主机,但 root 账户无法登录,开始怀疑外部因素;
  4. 登录了具有 sudo 权限的账号,使用 who 查看已登录用户,使用 last 查看登录记录,使用 journalctl 查看 ssh 服务器守护进程日志,均未发现异常;
  5. ip addr, ip route 查看网络配置信息,网络中心给的固定 IP 在列,但是有一个 192.168 开头的地址和对应的网关出现在了配置中;
  6. flush 掉所有的网络配置,重新配置静态 IP 之后恢复访问(2017.03.30 下午);
  7. 短暂时间后服务器再次离线,再次 flush 所有网络配置后,服务器短暂恢复访问,网络中心下班,为了保险,卸载了 openssh 服务,以防被外部远程登入;
  8. 实验室网站 Nginx 服务运行正常;
  9. 网站服务器再次熄灭(2017.03.30 傍晚),感到有点恐慌,难道真的是被攻击了?
  10. 2017.03.31 晨尝试了几次更新网络配置,均未修复;
  11. 开始拷贝数据,以防万一出现数据丢失;
  12. 在拷贝数据的时候,再次查看网络配置信息,终于发现了端倪! ip addr 输出 ip route输出 这个 192.168.1.1 网关和 192.168.1.200 的地址,本能地 ping 网关,全中 所以服务器当前一定是在另外一个子网当中!并且被分配了一个有效的子网 IP 地址,这个地址要不是被手动指定的,就是子网路由自动分配 DHCP 的。打开 Arch Wiki - Network Configuration 查看所有可配置 DHCP 的方法,最后定位到 dhcpcd.service 原来有一个 dhcpcd 守护进程给服务器分配了子网地址!暴躁卸载掉 dhcpcd,重启,服务器正常上线!

故事开始

所以这个故事是这样的:

小半年前,服务器到实验室后,先在实验室装了系统,为了方便,我就给安装了一个 dhcpcd 来自动从实验室路由器获取IP地址。

后来,服务器迁移去了网络中心机房,网络中心机房的管理规则是给主机分配固定IP,于是到机房按照给定的固定网络配置信息,配置好了服务器网络。

时间过得很快,服务器正常工作了小半年。

2017.03.30 晨,网络中心在机房交换机上接入了一台路由器,然后触发了 dhcpcd 守护进程自动从路由器获取了一个子网IP地址,与固定IP配置发生冲突,导致服务器离线。

日常甩锅

这个事情,原因在于小半年前时迁移服务器到网络中心时,没有删除掉在实验室配置的 DHCP 配置。由于网络中心一直使用的交换机子网分配固定IP的策略没有改变,所以这小半年服务器一直工作正常。直到交换机子网中出现了一台可以给别的机器做DHCP的路由器。

所以为什么采用固定IP策略的子网中会出现一台DHCP的路由器呢?!我想网络中心机房出问题的服务器大概不只我们的一台吧,立个 flag 以备检验。

还有那个 root 账户无法登录的问题,大概是我记错了密码了,也产生了很大的干扰。