更新时间:2024-06-21 GMT+08:00

Linux云服务器无法访问外网怎么办?

问题描述

从Linux云服务器访问外部网络,遇到网络不通的情形,即访问公网不通,可参考本节内容进行排查。

排查思路

以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。

如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。

表1 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云服务器卡顿怎么办?进行排查。

检查弹性公网IP的带宽是否超限

弹性云服务器绑定了弹性公网IP时,通过带宽提供公网和弹性云服务器间的访问流量。

如果出现访问公网不通,请排查弹性公网IP带宽是否超过带宽最大上限。

检查DNS配置

使用公共镜像创建的ECS服务器默认使用内网DNS进行解析。内网DNS不影响ECS服务器对公网域名的访问。同时,还可以不经Internet,直接通过内网DNS访问其他云上服务内部地址,如OBS,访问时延小,性能高。

Linux操作系统执行如下命令查看DNS配置。

cat /etc/resolv.conf

回显信息如图1所示说明使用内网DNS进行解析。

图1 DNS配置

若ECS服务器当前DNS不是内网DNS,要使用内网DNS进行解析,需要切换DNS服务器为内网DNS。

检查hosts文件

如果DNS配置正确,但仍无法访问外网,请继续检查云服务器中hosts文件中是否存在错误的映射关系,如果存在需要注释掉错误的解析。

Linux操作系统请执行以下命令查看hosts文件中的配置信息。

vim /etc/hosts

如果存在错误的域名映射关系请注释掉后保存hosts文件。

检查Network或NetworkManager是否正常运行

Network与NetworkManager是两种网络管理工具,如果两种都配置会发生冲突,仅使用其中一个即可。

以CentOS 7操作系统为例,推荐使用NetworkManager。

  1. 执行以下命令检查Network或NetworkManager的运行状态。

    systemctl status network

    systemctl status NetworkManager

  1. 执行以下命令关闭network。

    systemctl stop network

    systemctl disable network

  1. 执行以下命令开启NetworkManager,

    systemctl start NetworkManager

    systemctl enable NetworkManager

检查云服务器安全组

检查弹性云服务器安全组是否有配置错误,安全组出方向规则为白名单(允许),放通出方向网络流量。

检查网络ACL规则

VPC默认没有网络ACL,如果关联了网络ACL,请检查“ 网络ACL”规则。

  1. 查看云服务器对应的子网是否关联了网络ACL。

    如显示具体的网络ACL名称说明已关联网络ACL。

  2. 单击网络ACL名称查看网络ACL的状态。
  3. 将网络ACL与子网取消关联。
    在网络ACL详情页面,单击“关联子网 > 取消关联”。

    需要注意“网络ACL”的默认规则是丢弃所有出入方向的包,若关闭“网络ACL”后,其默认规则仍然生效。

  4. 重试访问公网。

检查弹性公网IP是否被封堵

IP 封堵是指将所有流量指向 NULL。若被封堵,则无法访问外网。

一般情况下,客户被封堵的EIP,若无继续攻击,会在24小时后自动解封。

检查是否可以正常获取私有IP地址

NetworkManager未开启自启动导致dhclient进程未运行、或网卡设备未纳入NetworkManager都可能导致私有IP地址丢失。请按照以下操作步骤进行排查。

以CentOS 7操作系统为例:

  1. 执行以下命令,确认dhclient是否运行。

    ps -ef |grep dhclient |grep -v grep

  2. 如果未找到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管理。

      nmcli device status

      如果显示该网卡为的STATE为unmanaged,则该网卡设备未被NetworkManager管理,执行以下命令进行恢复。

      nmcli device set eth0 managed yes

  3. 执行以下命令重启NetworkManager。

    systemctl restart NetworkManager

  4. 执行以下命令查看ip是否已经获取。

    ip add

检查网卡配置

  1. 执行以下命令,打开/etc/sysconfig/network-scripts/ifcfg-eth0中的配置。

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

  2. 修改/etc/sysconfig/network-scripts/ifcfg-eth0中的配置。

    以CentOS 7操作系统为例:

    DEVICE="eth0"
    BOOTPROTO="dhcp"
    ONBOOT="yes"
    TYPE="Ethernet"
    PERSISTENT_DHCLIENT="yes"
  3. 执行以下命令,重启网络服务。

    service network restart

检查防火墙配置

检查防火墙的状态是否打开,以CentOS 7操作系统为例。

firewall-cmd --state

回显信息:

[root@ecs-centos7 ~]# firewall-cmd --state 
running

您可以执行以下命令关闭防火墙

systemctl stop firewalld.service

防火墙开启和设置安全组是对云服务器的双重保护,如果选择关闭防火墙,建议安全组谨慎开放端口。