昨天下午,我发现自己的网站无法正常访问,具体表现为:IP 地址 ping 不通,SSH 端口也无法访问,通过 ping.pe 在线工具检查服务器状态,全球各测试站均显示“100% Loss”(100%丢包)。今年的六月,也出现过类似的故障。
之前 GreenCloud (绿云)曾向我发送过邮件,称月底将升级网络,更换万兆网卡,可能还在维护中,或者升级过程中导致我的 VPS 配置出错?尝试用工单联系技术部门,响应速度倒很快,但客服向我索要 root 密码,我以数据可能泄露的原因放弃向运营商求助。
经过搜索引擎一番查找,可能是 DHCP 租约过期或丢失的原因,导致默认路由(Default Route)失效。我登录了 VPS 的管理后台,使用 VNC 登录自己的账号密码,仅运行以下代码,VPS竟然瞬间恢复正常了——
dhclient
故障原因推测
大多数 VPS 提供商使用 DHCP 来为 VPS 分配网络配置。这不仅包括分配 IP 地址,更重要的是提供网关(Gateway)信息——即数据包发出后应该送往何处才能进入互联网。当这条网关消失或出错时,服务器就变成了网络世界的"盲人"——它能收到数据包(因此可能还能 ping 通自己),但不知道如何将响应发送回去,也不知道如何接收数据,导致 SSH 和网站服务都无法正常通信。
为什么路由与网关会消失?
DHCP 租约过期:DHCP配置有租期限制,需要定期续约。如果因系统繁忙、网络出错或网络抖动导致续约失败,租约就会失效。
DHCP 客户端进程异常:负责维护租约的 dhclient 进程可能意外崩溃。
云平台维护:VPS提供商进行底层网络维护可能会影响网络连接。
配置冲突:手动配置的静态网络设置可能与DHCP发生冲突。
dhclient 的工作原理
当你执行 dhclient 时,发生了以下事情:
1.向网络中的 DHCP 服务器发送请求
2.服务器重新分配 IP 地址、子网掩码和关键的网络网关信息
3.dhclient 调用系统脚本应用这些配置
4.重新添加丢失的默认路由
路由恢复后,网络连接自然就恢复正常了。
永久解决的方法
运行 dhclient 命令,只是临时修复的方法,治标不够,还需要治本!
编辑 DHCP 客户端配置文件,设置超时后重试机制:
nano /etc/dhcp/dhclient.conf
添加如下配置:
timeout 300; #设置客户端等待服务器响应的超时时间为300秒 retry 60; #设置重试间隔为60秒 persist true; #让dhclient在失败后持续在后台运行并重试
这样配置后,DHCP 客户端会在超时后不断重试,而不是直接放弃导致失效。
文章评论