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

ApsaraDB RDS:RDSインスタンスのエンドポイントにpingを送信すると、「Destination Host Unreachable」というエラーメッセージが表示されます。

最終更新日:Nov 08, 2024

ApsaraDB RDSインスタンスに接続できず、インスタンスの内部エンドポイントにpingを送信すると、「Destination Host Unreachable」というエラーメッセージが表示されます。

問題の説明

RDSインスタンスの内部エンドポイントをElastic Compute Service (ECS) インスタンスからpingできず、「Destination Host Unreachable」というエラーメッセージが表示されます。

PING rm-bpxxxx.mysql.rds.aliyuncs.com (172.17.0.31) 56(84) bytes of data.
From xxxx (172.17.0.1) icmp_seq=1 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=2 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=3 Destination Host Unreachable

原因

RDSインスタンスの内部CIDRブロックが、別のサービスのCIDRブロックと競合していること。

問題分析

  1. RDSインスタンスの内部エンドポイントにPingを実行して、インスタンスのプライベートIPアドレスを取得します。 この例では、インスタンスのプライベートIPアドレスは172.17.0.31です。

  2. route-nコマンドを実行して、Linuxシステムのルートを表示します。 例としてLinuxシステムが使用されています。 次の情報が返されます。

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.17.2.253    0.0.0.0         UG    0      0        0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
    172.17.0.0      0.0.0.0         255.255.255.0   U     0      0        0 br-350b446c181a

    コマンド出力は、br-350b446c181a NICのCIDRブロックが172.17.0.0/24であり、RDSインスタンスのプライベートIPアドレスと競合していることを示しています。 その結果、ECSインスタンスからのトラフィックはRDSインスタンスにルーティングできません。

    ほとんどの場合、コンテナサービスのCIDRブロックがRDSインスタンスのCIDRブロックと競合することが原因です。 次のセクションでは、コンテナサービスのルート競合を解決する方法について説明します。

ソリューション

解決策1: コンテナサービスのデフォルトのCIDRブロックを変更する

重要
  • このソリューションは、RDS for SQL Serverインスタンスには適していません。 RDSインスタンスがSQL Serverを実行している場合は、「解決策2: RDSインスタンスのvSwitchの変更」をご参照ください。

  • Dockerサービスを停止するか、DockerサービスのデフォルトCIDRブロックを変更すると、サービスが中断されます。 オフピーク時に操作を実行することを推奨します。

  • DockerサービスのデフォルトのCIDRブロックを変更するときは、接続の問題を防ぐために、新しいCIDRブロックが既存のコンテナーおよびアプリケーションのネットワーク設定と互換性があることを確認してください。

この例では、Linuxが使用されます。

  1. Dockerサービスを停止します。

    sudo systemctl stop docker
  2. Dockerサービスの設定ファイルを変更します。 ほとんどの場合、設定ファイルは /etc/docker/daemon.jsonまたは /etc/docker/daemon.confに保存されます。 ファイル名は異なる場合があります。

    sudo vim /etc/docker/daemon.json

    次のコードスニペットを使用します。

    {
        "bip": "New CIDR block"
    }

    この例では、CIDRブロック192.168.0.0/16が使用されます。

  3. 設定ファイルを保存して閉じます。

  4. 変更を有効にするためにDockerサービスを起動します。

    sudo systemctl start docker

解決策2: RDSインスタンスのvSwitchの変更

RDSインスタンスのvSwitchを変更して、vSwitchのCIDRブロックがコンテナサービスのCIDRブロックと競合しないようにすることができます。

重要

デフォルトでは、異なる仮想プライベートクラウド (VPC) は、内部ネットワークを介して相互に通信することはできません。 RDSインスタンスのVPCは変更しないことを推奨します。 これにより、RDSインスタンスと他のAlibaba Cloudサービス間の内部ネットワークベースの接続は影響を受けません。

参照