このトピックでは、次の問題の原因と解決策について説明します。curlコマンドを実行してLinux Elastic Compute Service (ECS) インスタンスからMetaserverにアクセスできず、「curl :( 7) Failed to connect to 100.100.XX.XX port 80: Connection timed out」というエラーメッセージが表示されます。
問題の説明
Linuxインスタンスでcurlコマンドを実行し、IPアドレス100.100.XX.XXを使用してMetaserver (メタデータサーバー) に接続すると、接続が失敗し、次のエラーメッセージが表示されます。
curl: (7) Failed to connect to 100.100.XX.XX port 80: Connection timed outエラーメッセージは、前のIPアドレスのポート80への接続がタイムアウトして失敗したことを示します。
LinuxインスタンスがMetaserverにアクセスできない場合、キーペアの設定、ホスト名の初期化、ホストの初期化など、インスタンスの特定の初期化操作が失敗することがあります。
原因
ほとんどの場合、この問題は、Linuxインスタンスのネットワーク環境に例外が存在し、インスタンスが宛先IPアドレスへのネットワーク接続を確立できないために発生します。 Linuxインスタンスのネットワーク環境には、次の例外が存在する可能性があります。
異常なネットワーク設定: Linuxインスタンスがネットワーク接続の確立に失敗する原因となります。 その結果、インスタンスはMetaserverに接続できません。 この問題を解決するには、ネットワーク構成をDynamic Host configuration Protocol (DHCP) にリセットします。 詳細については、このトピックの「ネットワーク設定をDHCPにリセットする」をご参照ください。
Metaserverへのアクセスをブロックするファイアウォールルール: Linuxインスタンスが
100.100.**.**を使用してMetaserverにアクセスできなくなります。 システムファイアウォールの設定を確認し、一時的にシステムファイアウォールを無効にして、ファイアウォールの設定によってLinuxインスタンスがMetaserverにアクセスできないかどうかを確認できます。 詳細については、このトピックの「システムファイアウォールの無効化」をご参照ください。
解決策
ネットワーク設定をDHCPにリセット
この例では、Red Hatシリーズオペレーティングシステムを実行するLinuxインスタンスを使用して、ネットワーク構成をDHCPにリセットする方法を説明します。 他のLinuxディストリビューションでネットワーク構成をDHCPにリセットする方法については、「LinuxイメージでネットワークをDHCPとして構成する方法」をご参照ください。
次のコマンドを実行して、ネットワーク設定ファイルを変更します。
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0次のネットワーク設定を変更します。
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=noEscキーを押して挿入モードを終了します。:wqと入力し、Enterキーを押してファイルを保存して閉じます。ネットワークサービスを再起動します。
インスタンスがCentOS 6またはRed Hat 6を実行している場合は、次のコマンドを実行します。
sudo service network restartインスタンスがCentOS 7、Red H、Anolis 7、またはAlibaba Cloud Linux 2を実行している場合、次のコマンドを実行します。
sudo systemctl restart networkインスタンスがCentOS 8、Red Hat 8、Anolis 8、Fedora 33、Fedora 34、Fedora 35、またはAlibaba Cloud Linux 3を実行している場合、次の操作を実行します。
次のコマンドを実行して、すべてのネットワークインターフェイスコントローラー (NIC) 設定をリロードします。
sudo nmcli c reload次のコマンドを実行してNICを有効にします。
sudo nmcli d connect eth0
システムファイアウォールを無効にする
システムファイアウォールを有効または無効にするために使用されるコマンドは、Linuxディストリビューションによって異なります。 実際のシナリオに基づいて、次のコマンドを変更します。
CentOS 5およびCentOS 6
次のコマンドを実行してシステムファイアウォールを有効または無効にし、CentOS 5およびCentOS 6のシステムファイアウォールのステータスを確認します。
システムファイアウォールを有効にします。
sudo service iptables startシステムファイアウォールを無効にします。
sudo service iptables stopシステムファイアウォールの状態を確認してください。
sudo service iptables status
CentOS 7、Red Hat 7、Alibaba Cloud Linux 2
次のコマンドを実行して、CentOS 7、Red Hat、およびAlibaba Cloud Linux 2でシステムファイアウォールを有効または無効にし、システムファイアウォールのステータスを確認します。
システムファイアウォールを有効にします。
sudo systemctl start firewalld.serviceシステムファイアウォールを無効にします。
sudo systemctl stop firewalld.serviceシステムファイアウォールの状態を確認してください。
sudo firewall-cmd -- state
Ubuntu
次のコマンドを実行して、システムファイアウォールを有効または無効にし、Ubuntuのシステムファイアウォールのステータスを確認します。
システムファイアウォールを有効にします。
sudo ufw enableシステムファイアウォールを無効にします。
sudo ufw disableシステムファイアウォールの状態を確認してください。
sudo ufw status
Debian
デフォルトでは、Debianにファイアウォールはインストールされていません。 ファイアウォールがDebianにインストールされている場合は、すべてのファイアウォールルールを削除してトラフィックのブロックを解除できます。 以下の操作を実行します。
すべてのファイアウォールルールを削除する前に、ルールをバックアップします。
次のコマンドを実行して、ファイアウォールルールをバックアップします。
touch [$Iptables] sudo iptables-save > [$Iptables]説明[$Iptables]は、ファイアウォールルールのバックアップファイルを保存するディレクトリを指定します。次のコマンドを実行して、すべてのファイアウォールルールを削除します。
sudo iptables -F