记录一次ubuntu 云服务器 ssh无法连接、断网排查

1. 场景

场景:将机器重启后,就没有及时关注,过两天后连ssh 发现连不上了。

首先检查本地电脑是否有网络,确认没有问题。然后登陆vnc,检查ssh服务状态。

代码语言:bash
复制
sudo systemctl status ssh

服务正常启动,ssh配置文件应该不会有改动。云服务器的防火墙,是在控制台控制的,机器本身的防火墙默认是关闭的。

检查机器的防火墙:

代码语言:bash
复制
sudo iptables -L -n -v 

防火墙也没有什么问题。

这就有点奇怪了,在本地电脑上尝试ping云服务器的ip,发现ping 也ping不通?! vnc 登陆云服务器下,在云服务上,ping 8.8.8.8 也是ping不通的,现在可以判断,云服务器是断网了。。。

2. 解决过程

2.1 问题排查

还是使用vnc 登陆云服务器。

1. 确定网线是否联通

代码语言:bash
复制
ip -br link show

发现 eth0 是断开的。

eth0 打开:

代码语言:bash
复制
ip link set eth0 up

再次查看 eth0 是否打开:

代码语言:bash
复制
ip -br link show

确认打开了,查看 eth0 是否能收发数据包:

代码语言:bash
复制
ip -s link show eth0

收发数据包正常,现在可以确定物理网络连接没有问题

2. 确定是否有ARP数据

ARP(地址解析协议) 可以确定,本机是否与上游路由器相互识别。

代码语言:bash
复制
ip neighbor show

我的ARP是空的,这台服务器没有得到正确的ip地址?!

查看网络配置信息:

代码语言:bash
复制
ifconfig -a

此时,我才发现我的 eth0 根本没有ipv4地址 。

3. 问题解决

尝试:

代码语言:bash
复制
sudo dhclient eth0

自动获取ipv4地址,一切正常了,但是为什么会没有ipv4地址呢? 之前也没有啥问题。。。

ubuntu 使用netplan管理网络配置,cd /etc/netplan,查看配置文件,对比之下,配置一切正常,没有什么问题。

使用 dhclinet eth0 可以使网络连接正常,但是重启之后,就无效了。于是尝试:

代码语言:bash
复制
sudo  netplan apply 

netplan command not found .... netplan啥时候没了?

安装 netplan.io:

代码语言:bash
复制
sudo apt install netplan.io 

然后再sudo netplan apply 一次,一切正常了。

netplan 依赖python 环境, 我之前用homebrew安装了python,后面因为homebrew安装llvm等有许多依赖问题,又把homebrew 卸掉了(以后再也不用了,linux上问题挺多),不知道是不是和这个有关系。

3. 总结

linux 只是内核,然后它的发行版众多,之间差别也很多。我还是更喜欢和更了解opensuse 的,但轻量云服务器不提供 opensuse 的镜像,我之前考虑过把云服务器装上opensuse,后来想想还是用ubuntu 算了,就不折腾了。目前来看,这个问题要重新考虑了,后续有时间把ubuntu 换成 opensuse 吧。

我用homebrew 装llvm 和 dotnet,总是遇到各种问题,后来把 homebrew 卸掉,这之后又碰到一系列的问题。netplan没了,估计也和这件事情有关,使用homebrew 是因为,它可以很方便的获取最新的软件发行包,不过后面我要把云服务器系统换成滚动发行的 opensuse trumbleweed,homebrew 就基本不需要了。。。

3. 参考

  1. https://zhuanlan.zhihu.com/p/3705072432
  2. https://superuser.com/questions/237057/how-do-i-make-ubuntu-server-get-ipv4-address