最近很多人使用我的监控站,买了机器后发现不通的情况,但是不知道到底是什么问题。到底是机器关机了、防火墙设置出问题了、还是IP在大陆访问方面出现了问题?为了解决大家的困惑,所以想写了这篇文章,教大家如何快速排查。
一般 IP 不可用主要分为三种情况,我们逐一分析。
第一种情况:服务器未开机或系统异常
这是最基础的情况,就是服务器根本没有正常运行。可能是你刚买完还没开机,或者是服务器正在重装系统、甚至是因为由于负载过高卡死了。
在这种情况下,不管是通过 SSH 链接还是使用 Ping 工具,都没办法测试通过。
我们可以使用 itdog.cn 进行在线 Ping 测试,同时配合 XTerminal 等 SSH 工具尝试连接。
表现特征:
Ping 测试: 全球所有节点(包括大陆和海外)全部超时(全红)。

SSH 连接: 直接提示连接失败或 Connection Refused。

第二种情况:IP 被大陆方面封禁(被墙)
这种情况现在非常常见,俗称“被墙”。也就是说,你的服务器在海外是正常的,但是被大陆的防火墙(GFW)拦截了。
表现特征:
Ping 测试: 这里有很明显的区别。大陆方向的节点全是红的(超时),但是海外方向(如美国、香港、日本等)是绿的(可以联通)。
SSH 连接: 在使用国内网络直接连接 SSH 会失败,一直转圈直到超时,和第一种情况很像。
解决方法: 这种情况下,机器本身是好的,只是国内直连过不去。
找一台可以直连的其他服务器作为“跳板机”进行连接。
或者开启科学的方式,让 SSH 工具走代理流量(类似跳板机的操作),这样才能连接上服务器进行设置和操作。

第三种情况:服务器防火墙主动禁用了 Ping
第三种情况比较特殊,很多人会误以为是服务器挂了。这种情况是你(或者商家预设)在服务器的防火墙里设置了“禁 Ping”。
这时候你去 Ping 这个 IP,结果也是全红的,看起来和第一种“服务器不可用”一模一样。但实际上,服务器的网络是完全正常的,SSH 也能正常连接,Web 服务也能打开,仅仅是它不回应 Ping 请求而已。
为什么要主动禁用 Ping?(优点补充)
主动禁用 Ping 其实是一种基础的安全隐患防护手段,主要优点如下:
隐藏服务器存在感: 互联网上有很多全网扫描脚本,禁用 Ping 可以让服务器在简单的 ICMP 扫描中规避一些被扫描的情况,减少被无差别扫描到的概率。
节省资源与带宽: 虽然 Ping 包很小,但在遭受大规模 ICMP Flood 攻击(一种 DDoS 攻击)时,禁用 Ping 可以避免服务器忙于处理这些请求,从而保护带宽资源。
减少日志垃圾: 减少不必要的网络请求干扰,让运维日志更清爽。
如何设置禁用 Ping?
1. Debian/Ubuntu 系统(使用命令):
如果你习惯使用命令行,可以通过修改系统内核参数来禁止 Ping。
临时生效(重启失效):
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all永久生效: 修改配置文件
/etc/sysctl.conf,在末尾添加一行:net.ipv4.icmp_echo_ignore_all = 1然后执行
sysctl -p使其生效。这里需要提醒的是,不熟悉Linux命令的小伙伴,还是不建议去设置防火墙参数,防止出现自己把自己挡在外面,无法通过正常的方式连接SSH的情况,那样只能通过VNC来尝试关闭防火墙,或者重装系统了。
2. 宝塔面板(图形化设置):
如果你使用的是宝塔面板,操作会更简单。 进入宝塔面板 -> 点击左侧【安全】 -> 在顶部找到【禁Ping】的开关,打开即可。

额外的一种情况:用错了的SSH端口
有的时候你会发现,IP是没问题的能ping通,网络检查海内外都是正常的,但是SSH还是出现了连接被拒绝的情况,这个时候不要着急,有的VPS厂商的SSH是“随机”的,或者需要你自己预设其他不常见的端口,然后你使用了默认的22端口去请求连接,这也是无法连接的。
总结
为了方便大家记忆,我把这三种情况的区别整理成了一张表:
希望这篇文章能帮你快速判断手中的 VPS 到底处于什么状态,不再盲目焦虑。
