检查与修复CentOS 7实例和Windows实例IP地址缺失问题

作者阿里云代理 文章分类 分类:图文教程 阅读次数 已被围观 1482

点击查看原图

问题描述

在连续使用ECS实例超过一段时间,且期间未重启过ECS实例,突然发生实例断网、网络瘫痪、无法Ping通公网IP和私网IP的情况。

 

问题原因

初次启动ECS实例时,系统使用DHCP(动态主机设置协议,Dynamic Host Configuration Protocol)方式为弹性网卡自动分配IP地址,并获得IP地址租约到期时间。正常情况下,Linux系统的dhclient进程和Windows系统的DHCP Client服务会定期向DHCP服务器更新租约到期时间,以确保实例IP地址的可用性。

 

由于部分CentOS 7镜像(见适用范围章节)创建的实例会小概率清理dhclient进程,以及Windows Server操作系统的DHCP Client服务存在已知问题,导致您的实例无法自动更新IP地址的续租到期时间。当首次获得续租时间的IP地址到期后,实例的私网IP地址会被释放,导致实例网络不通。

 

适用范围

符合以下条件的ECS实例,并且ECS实例通过DHCP方式为弹性网卡自动分配IP地址,需要根据本文描述修复问题。静态配置的IP地址无需继续阅读文档。

  • 基于以下CentOS 7公共镜像创建的任何类型实例(在2018年5月31日之前创建,并在2018年11月15号之后没有重启的ECS实例)。
    • centos_7_04_64_20G_alibase_20180419.vhd
    • centos_7_04_64_20G_alibase_20180326.vhd
    • centos_7_04_64_20G_alibase_201701015.vhd
    • centos_7_03_64_20G_alibase_20170818.vhd
    • centos_7_02_64_20G_alibase_20170818.vhd
    • centos_7_03_64_40G_alibase_20170710.vhd
    • centos_7_03_64_40G_alibase_20170625.vhd
    • centos_7_03_64_40G_alibase_20170523.vhd
    • centos_7_03_64_40G_alibase_20170503.vhd
  • 运行以下Windows Server操作系统的实例(在2018年11月15日之前创建,并在这之后没有重启过的ECS实例)。
    • Windows Server 2008 R2
    • Windows Server 2012 R2
    • Windows Server 2016
    • Windows Server Version 1709

 

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

您可以根据实际情况,从本文提供的四种解决方法中选择其中一种。

  • 方法1:云助手批量修复。适用于多台实例的场景,可以在ECS控制台上完成,操作方式更简便。
  • 方法2:基于云助手API编写的Python SDK脚本。以地域为修复单位,批量检测您的实例状态并完成自动修复。适用于熟悉脚本化运维的用户。
  • 方法3:提供了Shell和PowerShell脚本,需要您登录到ECS实例中手动修复,适用于在少量实例中轮询或测试的场景。其中,脚本内容和解决方法1一致。
  • 方法4:逐一排查网卡,适用于少量实例的场景。

 

方法1:云助手批量修复

本示例采用云助手为ECS实例执行检查并自动修复的工作,请确保您的实例已经安装了云助手客户端。2017年12月01日之后创建的ECS实例,默认预装云助手客户端。更多详情,请参见云助手客户端

  1. 前往ECS管理控制台云助手页面
  2. 选择地域。
  3. 单击新建命令。更详细的操作步骤请参见文档创建云助手命令
  4. 下载以下Shell或PowerShell脚本,并粘贴到云助手命令内容中。
  5. 找到您已创建的命令,在操作栏中,单击执行,选中受影响的实例批量运行已创建的云助手命令。更详细的操作步骤请参见文档执行命令
    操作流程
  6. 命令运行显示执行完成后,在操作栏中,单击查看结果。更详细的操作步骤请参见文档查询执行结果与状态。下图为CentOS实例和Windows实例的返回结果区分。

 

方法2:Python SDK脚本批量修复

本示例基于云助手API编写Python脚本,能检查并自动修复一个阿里云地域下所有受影响的实例。关于如何安装ECS SDK,请访问阿里云Github仓库安装文档

 

准备工作

参考如下命令,下载相关的Python SDK依赖到本地计算机或者ECS实例中。

pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-ecs

 

操作步骤

  1. 下载autofix_dhclient.py到已做好准备工作的本地计算机或者ECS实例中。
  2. 运行如下命令,查看脚本的使用说明。
    注:此为可选步骤。
    python autofix_dhclient.py
    系统返回类似如下。
    Usage: autofix_dhclient.py <AccessKeyID> <AccessKeySecret> <region-id>
    注:参数说明如下。
    • AccessKeyID:您的AccessKeyId,取值范围请参见创建AccessKey
    • AccessKeySecret:您的AccessKeySecret。
    • region-id:实例所在的地域ID,取值范围请参见地域与可用区
  3. 按使用说明填写AccessKeyIDAccessKeySecretregion-id等参数,以root或者管理员身份运行脚本,例如。
    python autofix_dhclient.py LTAIn*******Py6J kXXIOEoPXXvsYRUd**********TRyU cn-hangzhou

 

执行结果

以下为脚本运行结果示意图。

PyhtonSDKResult

实例状态检查的详细说明如下。

  • Cloud Assistant:该检查项查看您的实例是否安装了云助手客户端。
    • Installed:表示实例已安装了云助手客户端。
    • Not Installed:表示云助手客户端缺失,您可以安装云助手客户端后继续修复工作。
  • NeedFix:该检查项查看实例是否需要修复dhclient进程或DHCP Client服务。
    • Yes:表示需要继续修复,脚本会自动完成后续工作。
    • No:表示无需修复。
    • Unknown:表示脚本无法判断,需要您手动执行。
  • FixResult:该检查项汇报脚本修复结果。
    • Success:表示成功修复dhclient进程或DHCP Client服务。
    • Failed:表示修复失败。
    • NoChange:表示无需修复。
    • Unknown:表示脚本无法判断,需要您手动执行。

 

方法3:Shell/PowerShell脚本修复

该方法需要您登录到受影响的实例中,逐一排查问题,因此适用于少量实例的场景。

 

CentOS实例操作步骤

  1. 远程登录ECS实例。连接方式可参见连接方式导航
  2. 获取脚本linux_fix_dhclient.sh到任意目录。
  3. 切换到脚本所在的工作目录,以root身份运行脚本。
    sudo bash linux_fix_dhclient.sh
    注:
    • 返回结果为“0”时,脚本已完成检查和修复工作。
    • 返回其他状态表明修复失败。

 

Windows实例操作步骤

  1. 远程登录ECS实例。连接方式可参见连接方式导航
  2. 获取修复win_fix_dhclient.ps1脚本到任意目录。
  3. 以管理员权限打开PowerShell,执行如下命令。
    powershell -executionpolicy bypass -file C:\win_fix_dhclient.ps1
    注:
    • 您需要将C:\win_fix_dhclient.ps1替换成实际的文件路径。
    • 当返回“No ip will expire in recent 500 days. Then no need fix.”时,表示实例的DHCP Client服务无异常情况,无需修复。
    • 当返回“Found one ip will expire in 500 days. We need fixing it!!! Fix it now... Fix success.”时,表示实例的DHCP Client服务异常,脚本已完成修复工作。
    • 返回其他状态表明修复失败。

 

方法4:逐一排查网卡

该方法需要您自行检查和修复检查每张网卡对应的dhclient进程(CentOS实例)或IP地址租约到期时间(Windows实例)。

 

CentOS实例操作步骤

  1. 远程登录实例。
  2. 运行ls -al /sys/class/net/命令检查实例的所有网卡。
  3. 运行cat /etc/sysconfig/network-scripts/ifcfg-eth0命令,检查eth0网卡是否使用DHCP分配IP地址。
    • BOOTPROTO=dhcp表示网卡使用DHCP分配IP地址。
      etho
    • 若不是使用DHCP分配IP地址,可以忽略本文剩余描述前往步骤7。
  4. 运行ps aux | grep dhclient | grep eth0命令检查eth0网卡对应的dhclient进程运行情况。
    • 返回空结果表示dhclient进程异常。
    • 返回如下结果表示dhclient进程正常运行,可以忽略本文剩余描述前往步骤7。
      root 15340 0.0 0.3 113372 12788 ? Ss 14:16 0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H izuf695ygwh32u2i******z eth0
  5. 运行ifup eth0命令重新启动dhclient。
    注:您需要将命令中的eth0替换成网卡实际的标识符。
  6. 再次检查网卡对应的dhclient进程运行情况。
  7. 重复步骤3-步骤6,检查并修复剩余所有网卡的dhclient进程运行情况。

 

Windows实例操作步骤

  1. 远程登录实例。
  2. 以管理员身份打开命令提示符CMD。
  3. 运行以下命令查看描述为 Red Hat VirtIO Ethernet Adaptor 的网卡的 DHCP 已启用 项是否为 ,及其 租约过期的时间
    ipconfig /all
    系统显示类似如下。
    WindowsEachNIC
    注:Red Hat VirtIO Ethernet Adaptor为ECS实例的主网卡和辅助弹性网卡,您自定义配置的VPN或者LoopBack网卡等不在受影响范围内。此外,未启用DHCP服务的网卡不在受影响范围内。
  4. 如果租约过期的时间显示在一年之内,继续运行以下命令更新租约过期的时间。
    ipconfig /renew
  5. 运行ipconfig /all命令返回的租约过期的时间更新为十年之内说明已经完成修复。
  6.  
    如果您有其他问题,可以联系北京志远天成阿里云代理商,为您提供一对一专业全面的技术服务,同时新老阿里云会员,均可享受我公司代理商价格,欢迎咨询欢迎咨询.gif

 

本公司销售:阿里云新/老客户,只要购买阿里云,即可享受折上折优惠!>

我有话说: