すべてのプロダクト
Search
ドキュメントセンター

:CentOS 7 と Windows での IP アドレス喪失の修正

最終更新日:Jun 22, 2026

症状

Elastic Compute Service (ECS) インスタンスが再起動せずに長期間実行されると、ネットワーク接続の問題が発生することがあります。症状には、完全なネットワーク障害や、インスタンスのパブリック IP アドレスおよびプライベート IP アドレスへの ping の失敗が含まれます。

原因

ECS インスタンスが最初に起動されると、システムは Dynamic Host Configuration Protocol (DHCP) を使用して、伸縮自在なネットワークインターフェースに IP アドレスを自動的に割り当て、リースの有効期間を取得します。通常の状態では、Linux システムの dhclient プロセスと Windows システムの DHCP Client サービスは、DHCP サーバーとの間でこのリースを定期的に更新し、IP アドレスの有効性を維持します。しかし、特定の CentOS 7 イメージから作成されたインスタンスでは、dhclient プロセスが予期せず終了することがあるため、この問題が発生します。さらに、一部の Windows Server オペレーティングシステムの DHCP Client サービスには既知の問題が存在します。その結果、インスタンスは IP アドレスのリースを自動的に更新できなくなります。最初のリースの有効期間が切れると、インスタンスのプライベート IP アドレスが解放され、ネットワーク障害が発生します。

対象範囲

この記事は、以下の基準を満たし、DHCP を使用して伸縮自在なネットワークインターフェースに IP アドレスを自動的に割り当てる ECS インスタンスに適用されます。静的 IP アドレスが設定されているインスタンスでは、操作は不要です。

  • 2018 年 5 月 31 日より前に作成され、2018 年 11 月 15 日以降に再起動されていない、以下の CentOS 7 パブリックイメージから作成された任意のタイプのインスタンス。

    • centos_7_04_64_20G_alibase_20180419.vhd

    • centos_7_04_64_20G_alibase_20180326.vhd

    • centos_7_04_64_20G_alibase_20171015.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

  • 2018 年 11 月 15 日より前に作成され、それ以降再起動されていない、以下の Windows Server オペレーティングシステムを実行しているインスタンス。

    • Windows Server 2008 R2

    • Windows Server 2012 R2

    • Windows Server 2016

    • Windows Server Version 1709

ソリューション

説明
  • インスタンスやデータの変更など、リスクの高い操作を実行する前に、ディザスタリカバリとフォールトトレランスの対策が講じられていることを確認してください。

  • ECS や RDS などのインスタンスの設定やデータを変更する前に、スナップショットを作成するか、RDS のログバックアップなどの機能を有効にしてください。

  • Alibaba Cloud プラットフォーム上でユーザー名やパスワードなどの機密情報を送信した場合は、すぐに変更してください。

ニーズに応じて、以下の 4 つの方法から 1 つを選択してください。

  • 方法 1:Cloud Assistant を使用した一括修正。この方法は複数のインスタンスの管理に適しており、ECS コンソールから簡単に実行できます。

  • 方法 2:Python SDK スクリプトを使用した一括修正。この方法はインスタンスの状態をチェックし、リージョン全体で自動修正を実行します。この方法は、スクリプトに精通しているユーザー向けです。

  • 方法 3:Shell および PowerShell スクリプトを使用した修正。この方法では、各 ECS インスタンスにログインして手動で修正を適用する必要があります。少数のインスタンスのテストや更新に適しています。スクリプトは方法 1 で使用されるものと同じです。

  • 方法 4:ネットワークインターフェイスカードの手動チェック。この方法は、少数のインスタンスに適しています。

方法 1:Cloud Assistant を使用した一括修正

この例では、Cloud Assistant を使用して ECS インスタンスをチェックし、自動的に修復します。インスタンスに Cloud Assistant Agent がインストールされていることを確認してください。Cloud Assistant Agent は、2017 年 12 月 1 日以降に作成された ECS インスタンスにはデフォルトでインストールされています。詳細については、Cloud Assistant Agent および「Cloud Assistant Agentのインストール」をご参照ください。

  1. Cloud Assistant コマンドを作成します。詳細な手順については、「Cloud Assistantコマンドの作成」をご参照ください。

  2. 適切な Shell または PowerShell スクリプトをダウンロードし、その内容を ECS コンソールの [コマンド内容] フィールドに貼り付けます。

  3. 対象の ECS インスタンスを選択し、コマンドを実行します。詳細な手順については、「コマンドの実行」をご参照ください。

  4. コマンドが正常に実行されたことを確認します。詳細な手順については、「コマンドの実行結果とステータスの表示」をご参照ください。以下の例は、CentOS と Windows インスタンスのコマンド出力を示しています。

    [INFO] [2019-04-28 11:13:00] start check and fix
    [INFO] [2019-04-28 11:13:00] log file /tmp/dhcp_fix_20190428-11:13:00.log
    [INFO] [2019-04-28 11:13:00] start checking eth0
    [INFO] [2019-04-28 11:13:00] eth0 state is up
    [INFO] [2019-04-28 11:13:00] ip a show dev eth0
    [INFO] [2019-04-28 11:13:00] eth0 valid_lft 315359644
    [INFO] [2019-04-28 11:13:00] no need fix, dhclient eth0 is running
    [1;32;40m[SUCCESS] [0m [2019-04-28 11:13:00] check and fix success
    [1;32;40m[SUCCESS] [0m [2019-04-28 11:13:00] return code: 0
    [1;33;40m[WARN] [0m [2019-04-28 11:14:17] need fixing eth0
    [INFO] [2019-04-28 11:14:17] start fixing eth0
    [INFO] [2019-04-28 11:14:17] ip a show dev eth0
    [INFO] [2019-04-28 11:14:17] ifup eth0
    RTNETLINK answers: File exists
    [INFO] [2019-04-28 11:14:19] ip a show dev eth0
    [INFO] [2019-04-28 11:14:19] ok, dhclient eth0 is running now
    [1;32;40m[SUCCESS] [0m [2019-04-28 11:14:19] check and fix success
    [1;32;40m[SUCCESS] [0m [2019-04-28 11:14:19] return code: 0
    No ip will expire in recent 500 days. Then no need fix.
    Nic info: \\E2ETesthxxx...xxxterConfiguration.Index=3
    Found one ip will expire in 500 days. We need fixing it!!!
    Fix it now...
    Nic info: \\E2ETesthxxx...xxxpterConfiguration.Index=3
    fix success.
    ]]]]]]]]]]

方法 2:Python SDK スクリプトを使用した一括修正

この方法では、Cloud Assistant API に基づく Python スクリプトを使用して、Alibaba Cloud リージョン内のすべての影響を受けるインスタンスをチェックし、自動的に修正します。ECS SDK のインストール手順については、Alibaba CloudのGitHubリポジトリにあるインストールガイドをご参照ください。

前提条件

次のコマンドを実行して、ローカルマシンまたは ECS インスタンスに Python SDK の必要な依存関係をインストールします。

pip install alibabacloud_ecs20140526

手順

  1. autofix_dhclient.py ファイルを ECS インスタンスにダウンロードします。

  2. 次のコマンドでスクリプトを実行します。

    sudo python autofix_dhclient.py <AccessKeyID> <AccessKeySecret> <region-id>
    説明

    コマンド内の <AccessKeyID><AccessKeySecret>、および <region-id> を置き換える必要があります。

    • AccessKey ID:Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID

    • AccessKey Secret:Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。

    • リージョン ID:インスタンスが所在するリージョンの ID。リージョン ID のリストについては、「リージョンとゾーン」をご参照ください。

結果

以下にスクリプトの出力例を示します。

Performing the scan and this will take some time, please wait...
Scan done.
Instance Status details:
+----------------------------+----------------+---------------+---------------+
|        InstanceID          | Cloud Assistant|    NeedFix    |   FixResult   |
+----------------------------+----------------+---------------+---------------+
|  i-uf639pxxxye4ldb         |   Installed    |      No       |   NoChange    |
+----------------------------+----------------+---------------+---------------+
|  i-uf69mdxxxk6sahw         |   Installed    |      Yes      |   Success     |
+----------------------------+----------------+---------------+---------------+
Summary:
================================
Total instances scanned: 2
Fixed: 1
Unknown: 0
Failed: 0

出力フィールドの説明は次のとおりです:

  • Cloud Assistant:このチェックは、Cloud Assistant Agent がインスタンスにインストールされているかどうかを確認します。

    • Installed:Cloud Assistant Agent はインストールされています。

    • Not Installed:Cloud Assistant Agent がインストールされていません。「Cloud Assistant Agentのインストール」を参照してエージェントをインストールしてから、スクリプトを再度実行してください。

  • 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. ECS インスタンスにログインします。詳細については、「接続方法」をご参照ください。

  2. 次のコマンドを実行して、インスタンス上のすべてのネットワークインターフェイスカードを確認します。

    ls -al /sys/class/net/
  3. 次のコマンドを実行して、eth0 ネットワークインターフェイスカードが DHCP を使用して IP アドレスを取得しているかどうかを確認します。

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

    次のような出力が表示されます。BOOTPROTO=dhcp は、ネットワークインターフェイスカードが DHCP を使用して IP アドレスを割り当てることを示します。DHCP を使用して IP アドレスが割り当てられない場合は、ステップ 7 に進んでください。

    [root@xxx ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes
    [root@xxx ~]#  grep 'BOOTPROTO=dhcp' /etc/sysconfig/network-scripts/ifcfg-eth0
    BOOTPROTO=dhcp
  4. 次のコマンドを実行して、eth0 ネットワークインターフェイスカードの dhclient プロセスのステータスを確認します。

    ps aux | grep dhclient | grep eth0
    • 出力が空の場合は、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 izuf****************** eth0
  5. 次のコマンドを実行して、dhclient プロセスを再起動します。

    ifup eth0
    説明

    この例ではeth0を使用しています。eth0 を実際のネットワークインターフェイスカードの識別子に置き換えてください。

  6. dhclient プロセスのステータスを再度確認し、実行中であることを確認します。

  7. 手順3〜6を繰り返して、残りのすべてのネットワークインターフェイスカードの dhclient プロセスを確認し、修正します。

Windows インスタンスの手順

  1. ECS インスタンスにログインします。詳細については、「接続方法」をご参照ください。

  2. 管理者としてコマンド プロンプト (CMD) を開きます。

  3. 次のコマンドを実行して、[Red Hat VirtIO Ethernet Adaptor] と表示されているネットワークインターフェイスカードの [DHCP Enabled][Yes] に設定されているかどうかを確認し、その [Lease Expires] 時刻を表示します。

    ipconfig /all
    説明

    Red Hat VirtIO Ethernet Adaptor は、ECS インスタンスのプライマリネットワークインターフェイスカードまたはセカンダリの伸縮自在なネットワークインターフェースとして機能します。VPN やループバックアダプターなどのカスタム設定は影響を受けません。DHCP サービスが有効になっていないネットワークインターフェイスカードも影響を受けません。

  4. リースが 1 年以内に失効する場合は、次のコマンドを実行して更新します。

    ipconfig /renew
  5. ipconfig /all コマンドを実行します。リース有効期限が 10 年以内であれば、修正が完了したことを示します。

適用対象

  • ECS