AWS EC2 インスタンスの再起動後に、yum アップデートができなくなったり、外部公開ドメインへの ping が通らなくなった場合、以下の内容をお試しください。
問題の確認方法
下記の内容にすべて該当した場合、今回の問題に該当します。
管理者権限で各項目を確認してみてください。
1. 外部の公開ドメインへの ping に失敗する。
外部の公開ドメインに対し ping コマンドを実行します。
下記では `google.com` を例にしています。
ping google.com
下記のエラーメッセージが表示された場合、外部ネットワークへの名前解決ができていません。
ping: google.com: Name or service not known
2. リゾルバに nameserver が記載されていない。
リゾルバの内容を確認するため、下記コマンドを実行します。
cat /etc/resolv.conf
コマンド実行結果の中に、 `nameserver` の行がない場合、外部ネットワークへの名前解決ができません。
Generated by NetworkManager search ap-northeast-1.compute.internal
問題がない場合は、下記のように `nameserver` の行が含まれます。
; generated by /usr/sbin/dhclient-script search ap-northeast-1.compute.internal nameserver 172.31.0.2
3. cloud-init のバージョンが 19.4 以降である。
下記のコマンドを実行し、バージョン情報を取得します。
cloud-init -v
下記のようにバージョン情報を取得できます。
バージョン番号が 19.4 以降であれば対象となります。
/bin/cloud-init 19.4
4. NetworkManager がインストールされている。
下記のコマンドを実行し、バージョン情報を取得します。
NetworkManager -V
下記のようにバージョン情報を取得できた場合は、NetworkManager がインストールされています。
1.18.8-2.el7_9
解決方法について
3通りの解決方法があります。
いずれも管理者権限で実行してください。
[注意] 作業は必ずバックアップを行った上で行ってください。
- a. (推奨) NetworkManager を削除
- b. NetwrokManager の設定を変更し、リゾルバの書き換えを行わないようにする
- c. (暫定対応) ネームサーバーの一時追加
a. (推奨) NetworkManager を削除
※ AWS が提供している Amazon Linux 2 など NetworkManager はインストールされていません。
NetworkManager を削除するため、下記コマンドを管理者権限で実行します。
yum remove NetworkManager -y
インスタンスの再起動後に `ping` で外部の公開ドメインの名前解決ができることを確認してください。
インスタンスの再起動を行いにくい場合は、再起動までの暫定対応として c. も合わせて対応してください。
b. NetwrokManager の設定を変更し、リゾルバの書き換えを行わないようにする
`NetworkManager.conf` ファイルを開きます。
vi /etc/NetworkManager/NetworkManager.conf
[main] と記述されたところを探し、下記を参考に `dns=none` を追記します。
[main] #plugins=ifcfg-rh,ibft dns=none
`resolv.conf` ファイルにネームサーバーを追記します。
例では、ネームサーバーを `8.8.8.8` に指定している例です。
(vi で修正する場合には、c. を参考にしてください。)
sed -e '$a nameserver 8.8.8.8' -i /etc/resolv.conf
インスタンスの再起動後に `ping` で外部の公開ドメインの名前解決ができることを確認してください。
c. (暫定対応) ネームサーバーの一時追加
この手順は暫定対応となります。
a. もしくは b. の手順を行っていない場合は、インスタンスの再起動後に同様の現象が再発しますのでご注意ください。
`/etc/resolv.conf` ファイルを開きます。
vi /etc/resolv.conf
最後の行にネームサーバーを追記します。ネームサーバーを追記します。
例では、ネームサーバーを `8.8.8.8` に指定している例です。
nameserver 8.8.8.8
`ping` で外部の公開ドメインの名前解決ができることを確認してください。