Linux云服务器无法访问外网怎么办?
问题描述
从Linux云服务器访问外部网络,遇到网络不通的情形,即访问公网不通,可参考本节内容进行排查。
排查思路
以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。
如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。
可能原因 |
处理措施 |
---|---|
资源状态异常:资源冻结;未开机;未绑定弹性IP。 |
云服务器状态为“运行中”,且绑定弹性IP才可以访问公网,详细操作请参考检查资源状态是否正常。 |
云服务器负载过高。 |
云服务器的带宽和CPU利用率过高导致网络断开,详细操作请参考检查云服务器负载是否过高。 |
弹性IP的带宽超限。 |
请扩大带宽后重试,详细操作请参考检查弹性IP的带宽是否超限。 |
DNS配置不正确。 |
请切换DNS服务器为内网DNS,详细操作请参考检查DNS配置。 |
hosts文件中添加了指定解析。 |
检查hosts文件中是否存在错误的映射关系,详细操作请参考检查hosts文件。 |
同时运行了Network或NetworkManager。 |
两者并存导致网络配置冲突,请使用其中之一,详细操作请参考检查Network或NetworkManager是否正常运行。 |
安全组配置不正确。 |
检查安全组是否放通出方向网络流量,详细操作请参考检查云服务器安全组。 |
检查网络ACL规则。 |
请取消关联的网络ACL后重试,详细操作请参考检查网络ACL规则。 |
弹性IP被封堵。 |
IP若被封堵,则无法访问外网,详细操作请参考检查弹性IP是否被封堵。 |
私有IP丢失。 |
dhclient进程未运行可能导致私有IP丢失,详细操作请参考检查是否可以正常获取私有IP地址。 |
网卡配置不正确。 |
检查网卡配置、DNS配置是否正确,详细操作请参考检查网卡配置。 |
云服务器开启了防火墙。 |
测试防火墙关闭后是否可以正常访问,请参考检查防火墙配置。 |
检查资源状态是否正常
- 请在控制台检查云服务器资源状态是否为“运行中”。
- 检查云服务器是否已绑定弹性IP。
绑定弹性IP才可以实现访问公网,请检查弹性云服务器是否绑定了弹性IP。
绑定弹性IP请参考绑定弹性公网IP。
检查云服务器负载是否过高
当云服务器出现网络断开的情况,则可能是云服务器的带宽和CPU利用率过高导致。
如果您已经通过云监控服务创建过告警任务,当CPU或带宽利用率高时,系统会自动发送告警给您。
Linux弹性云服务器带宽流量过高或CPU利用率高,请参考Linux云服务器卡顿怎么办?进行排查。
检查DNS配置
使用公共镜像创建的ECS服务器默认使用内网DNS进行解析。内网DNS不影响ECS服务器对公网域名的访问。同时,还可以不经Internet,直接通过内网DNS访问其他云上服务内部地址,如OBS,访问时延小,性能高。
Linux操作系统执行如下命令查看DNS配置。
cat /etc/resolv.conf
回显信息如图1所示说明使用内网DNS进行解析。
若ECS服务器当前DNS不是内网DNS,要使用内网DNS进行解析,需要切换DNS服务器为内网DNS。
详细操作请参考怎样配置弹性云服务器的DNS和NTP信息?。
检查hosts文件
如果DNS配置正确,但仍无法访问外网,请继续检查云服务器中hosts文件中是否存在错误的映射关系,如果存在需要注释掉错误的解析。
Linux操作系统请执行以下命令查看hosts文件中的配置信息。
vim /etc/hosts
如果存在错误的域名映射关系请注释掉后保存hosts文件。
检查Network或NetworkManager是否正常运行
Network与NetworkManager是两种网络管理工具,如果两种都配置会发生冲突,仅使用其中一个即可。
以CentOS 7操作系统为例,推荐使用NetworkManager。
检查是否可以正常获取私有IP地址
NetworkManager未开启自启动导致dhclient进程未运行、或网卡设备未纳入NetworkManager都可能导致私有IP地址丢失。请按照以下操作步骤进行排查。
以CentOS 7操作系统为例:
- 执行以下命令,确认dhclient是否运行。
- 如果未找到dhclient进行,则确认dhclient进程未运行,执行以下命令,继续排查NetworkManager是否运行。
systemctl status NetworkManager
- 如果NetworkManager的状态为Active: inactive (dead),则NetworkManager未启动,执行以下命令,检查该服务是否开机自启。
systemctl is-enabled NetworkManager
结果为disabled则确认为NetworkManager为设置开机自启导致,执行以下命令进行恢复。
systemctl enable NetworkManager && systemctl start NetworkManager
- 如果NetworkManager的状态为Active: active (running),执行以下命令查看网卡设备是否被NetworkManager管理。
如果显示该网卡为的STATE为unmanaged,则该网卡设备未被NetworkManager管理,执行以下命令进行恢复。
nmcli device set eth0 managed yes
- 如果NetworkManager的状态为Active: inactive (dead),则NetworkManager未启动,执行以下命令,检查该服务是否开机自启。
- 执行以下命令重启NetworkManager。
- 执行以下命令查看ip是否已经获取。