以下の事象に該当していないかご確認ください。
該当している場合は、後述の対応策を実施してください。
■発生条件
以下条件にすべて当てはまる仮想マシンにおいて、本事象が確認されています。
- CentOS7 系 (RHEL 含む)
- 複数 NIC を持っている
- OS 上でスタティックルートを設定している
■事象内容
発生条件に当てはまる仮想マシンにて、IDCF クラウドコンソール画面よりデフォルト NIC (デフォルトネットワーク)の変更を実施すると、通信が不安定となります。
また、/var/log/messages に以下のようなエラーメッセージが発生します。
Mar 2 11:53:41 localhost NetworkManager[XXX]: <error> [XXXXXXXXXXXX] platform-linux: do-add-ip4-route[2: 10.XX.XX.XX/XX 100]: failure 101 (Network is unreachable)
ルーティングテーブルとインタフェース状態が、デフォルト NIC 変更前後で以下例のように変化が発生します。
- ens192 が切断状態になる
- ens160 と ens192 それぞれに付与された IP アドレスが逆に設定される。 そのため、ルーティングテーブル上 (★) のデフォルトゲートウェイの IP アドレスが変更されたにもかかわらず、ルーティングファイル名に含まれる NIC 名に変更はない。
【デフォルト NIC 変更前】
# nmcli d
DEVICE TYPE STATE CONNECTION
ens160 ethernet 接続済み ens160
ens192 ethernet 接続済み 有線接続 1
# ip route show
default via 192.168.7.254 dev ens160 proto dhcp metric 100 ★
10.34.0.0/21 dev ens192 proto kernel scope link src 10.34.0.216 metric 101
192.168.0.0/21 dev ens160 proto kernel scope link src 192.168.0.50 metric 100
172.16.0.0/21 via 192.168.7.254 dev ens160 proto static metric 100
<ルーティングファイル一覧 出力例>
# ls /etc/sysconfig/network-scripts/route-*
/etc/sysconfig/network-scripts/route-ens160
【デフォルト NIC 変更後】
# nmcli d
DEVICE TYPE STATE CONNECTION
ens160 ethernet 接続中(IP 設定を取得中) ens160
ens192 ethernet 切断済み --
# ip route show
default via 10.34.0.1 dev ens160 proto dhcp metric 100 ★
10.34.0.0/21 dev ens160 proto kernel scope link src 10.34.0.216 metric 101
192.168.0.0/21 dev ens192 proto kernel scope link src 192.168.0.50 metric 100
172.16.0.0/21 via 192.168.7.254 dev ens192 proto static metric 100
<ルーティングファイル一覧 出力例>
# ls /etc/sysconfig/network-scripts/route-*
/etc/sysconfig/network-scripts/route-ens160 #変更前とルーティングファイル名の NIC 名が変わっていない
上記のルーティングファイル一覧 出力例にて、デフォルト NIC 変更前は、 ens160 側のルーティングファイルが設定されていることがわかります。
しかし、デフォルト NIC 変更後は、もともと ens160 に付与されていた IP アドレスが ens192 に付与されています。
■原因
CentOS7 系(RHEL 含む)の挙動として、デフォルト NICを変更すると、同時に OS 内の NIC 名が変更されてしまいます。
それにともなってルーティングファイルのファイル名も NIC 名に合わせて変更されることを期待されますが、ファイル名は変更されません。
これにより NIC 名をもとに設定を読み込んでいるルーティング設定が適切に反映されません。
■対応策
OS 上でルーティングファイル名の変更が必要です。
手順を以下に記載します。
1. ルーティングファイルの中身を参照し、切断状態の NIC(本例では ens192 )のルーティング設定が記述されていることを確認します。
[root@localhost network-scripts]# cat route-ens160
ADDRESS0=172.16.0.0
NETMASK0=255.255.248.0
GATEWAY0=192.168.7.254 # ens192 のゲートウェイとなっている
2. 以下コマンドで、正しい NICのルーティングファイル名を変更します。
本例では、ルーティングファイル名に含まれる NIC 名を ens160 から ens192 に変更します。
# mv route-ens160 route-ens192
3. ネットワークを再起動します。
# systemctl restart network
4. 以下コマンドを再度実行し、接続ができるようになったことを確認できます。
# nmcli d
DEVICE TYPE STATE CONNECTION
ens160 ethernet 接続済み ens160
ens192 ethernet 接続済み 有線接続 1
以上で対応策は完了です。