服务器上的 MTU 意外设置为 0,无法通过 ssh 进入?

服务器上的 MTU 意外设置为 0,无法通过 ssh 进入?

我的服务器在 ssh 方面出现了一些问题,我无法上传大于 10 KB 的文件,因为 scp 在复制过程中会挂起。我找到了解决这个问题的方法这里,而我正在更改 MTU,这时我不小心更改了sudo ip link set eth0 mtu 0

现在没有人可以 ssh 进入服务器。我该怎么办?

答案1

连接到控制台并将 MTU 改回。如果您没有控制台访问权限,请重新启动服务器。

答案2

不清楚您使用的是哪种操作系统。我在两个不同版本的 Linux 上测试了您的特定命令,每个版本都给出了错误消息:

RTNETLINK answers: Invalid argument

如果您发现某个系统允许您将 MTU 设置为 0,我会认为这是一个内核错误。不过,也有可能存在这样的系统,将 MTU 设置为 0 有其他含义,例如自动检测 MTU。

IPv4 要求所有节点的 MTU 至少为 68。Linux 知道这一点,如果 MTU 设置为较低的值(例如 67),则会在接口上禁用 IPv4。这样一来,您就有可能被锁定在系统之外。这很不方便,如果只要接口有任何需要更高 MTU 的 IP 地址,内核就会拒绝 MTU 更改,我认为这是一种更好的设计。

如果您意外地禁用了网络接口上的 IPv4 和 IPv6,则您不太可能找到任何通过该网络接口远程管理计算机的方法。如果服务器有任何其他网络接口,您可能能够通过这种方式访问​​它。即使其他网络接口尚未配置,它仍可能具有 IPv6 链接本地地址,可以从同一网段上的其他主机通过 ssh 访问该地址。否则,串行控制台仍是一种选择,因为串行控制台完全独立于主机的网络配置。最终,您可以重新启动计算机,如果您有权远程执行此操作。只要您没有将错误的更改写入任何配置文件,重新启动就可以解决问题。

相关内容