みなさんこんにちは。サーバの構築業務を担当している川合です。
今回も実際の構築業務でつまずいてしまった内容で記事を書かせていただきました。
前回はMySQLについてでしたが、今回はOS周りについてです。
同じ問題で悩んでいる方の解決のヒントになれば幸いです。
概要
CentOS7系でNICの名前をeth~に変更している時に新しいNICを追加した場合
NICの認識順序が変わる・仮想マシンと正常に通信できないなどの問題が発生します。
NICの命名規則の変更から実際に新しいNICを追加してみて
現象の確認から解決方法まで解説していきたいと思います。
今回利用する環境は、VMware ESXi 6.5.0 Update1(Build 5969303)上に
CentOS Linux release 7.4.1708 (Core)を用意しています。
NetworkManagerは停止させ設定ファイルをそのまま編集する方法をとります。
現象の確認の準備
それでは、ifconfigコマンドを利用してネットワークの状態を確認してみます。
ifconfig -a
一部抜粋
----------------------------------------------------------------------------------------
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.XX.XX netmask 255.255.255.0 broadcast 172.16.XX.XX
ether XX:XX:XX:XX:XX:44 txqueuelen 1000 (Ethernet)
----------------------------------------------------------------------------------------
CentOS7系からは、従来のeth~という名前からens~という名前に変わっています。
従来の形式の方が管理しやすく慣れているのでeth~に元に戻したいという場合は、以下の方法を実施して元に戻すことが可能です。
編集するファイルは、/etc/default/grub です。
cat /etc/default/grub
------------------------------------------------------------------------------------
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
------------------------------------------------------------------------------------
GRUB_CMDLINE_LINUXの部分に net.ifnames=0 biosdevname=0 を追加します。
------------------------------------------------------------------------------------------------------------------------
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"
------------------------------------------------------------------------------------------------------------------------
設定の追加が完了すれば、以下のコマンドで設定内容を反映させます。
grub2-mkconfig -o /boot/grub2/grub.cfg
これで名前を変更する準備は整いました。
それでは、実際に名前を変更していきます。
mv /etc/sysconfig/network-scripts/ifcfg-ens192 /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network-scripts/ifcfg-eth0
⇒NAMEとDEVICEにも記載がある場合は修正します
その後設定適用のため、サーバを一度再起動します。
サーバ再起動後、ens192からeth0に名前が変わっていれば完了です。
ifconfig -a
----------------------------------------------------------------------------------------
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.XX.XX netmask 255.255.255.0 broadcast 172.16.XX.XX
ether XX:XX:XX:XX:XX:44 txqueuelen 1000 (Ethernet)
----------------------------------------------------------------------------------------
これで現象を確認する準備は整いましたので
実際にNICを追加してみてどのような現象が発生するか確認します。
現象の確認
それでは、一度仮想マシンを停止してネットワークアダプタを追加してみます。
処理が完了すればサーバに新しいNICが追加されますので仮想マシンを起動します。
そうするとサーバと通信ができない状態になりました。
サーバにログイン出来ませんので、VMware Remote Console でサーバに接続し状態を確認してみます。
ifconfig -a
一部抜粋
--------------------------------------------------------------------------------------
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.XX.XX netmask 255.255.255.0 broadcast 172.16.XX.XX
ether XX:XX:XX:XX:XX:3a txqueuelen 1000 (Ethernet)
eth1: flags=4098<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:44 txqueuelen 1000 (Ethernet)
---------------------------------------------------------------------------------------
ハードウェア構成からネットワークデバイスのMACアドレスを確認するとeth0とeth1のMACアドレスが逆になっていることが確認できました。
元々のNICと追加したNICのPCIバスが昇順に並んでいないことが原因です。
PCIバスの順番でNICを認識してしまい、本来関連付けされるNICが別のNICと関連付けられてしまい通信ができなくなっています。
PCIバスの状態は以下のようになっています。
ethtool -i eth0 |grep bus-info
---------------------------
bus-info: 0000:0b:00.0
---------------------------
ethtool -i eth1 |grep bus-info
---------------------------
bus-info: 0000:13:00.0
---------------------------
元々eth0と関連付けされていたのは、0000:13:00.0 です。
MACアドレスとPCIバスが入れ替わってしまっているので設定ファイルを用意して
認識を正常な状態に戻してみます。
vi /etc/udev/rules.d/70-my-net-names.rules
-------------------------------------------------------------------------------------------------------------------------------------------
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="XX:XX:XX:XX:XX:44",,NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="XX:XX:XX:XX:XX:3a",,NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", KERNEL=="ens*", SUBSYSTEMS=="pci", KERNELS=="0000:13:00.0", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", KERNEL=="ens*", SUBSYSTEMS=="pci", KERNELS=="0000:0b:00.0", NAME="eth1"
-------------------------------------------------------------------------------------------------------------------------------------------
設定反映の為、サーバを再起動して確認してみますがサーバと通信できない問題は解消されません。
(MACアドレスだけ、PCIバスだけと個別に設定してみても同じです)
解決方法
名前をethとは別のものに設定することで問題を解決できます。
今回はlan~という名前で設定してみます。
MACアドレスの設定については、先ほど利用しました 70-my-net-names.rules を利用します。
--------------------------------------------------------------------------------------------------------
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="XX:XX:XX:XX:XX:44",,NAME="lan0"
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="XX:XX:XX:XX:XX:3a",,NAME="lan1"
--------------------------------------------------------------------------------------------------------
PCIバスの指定はせず、MACアドレスの紐付けのみ記載します。
ifcfgファイルの名前と設定ファイル内の記載も eth から lan に変更します。
その後サーバを再起動して正常に通信できること、名前がlan~になっていることが確認できれば作業は完了です。
まとめ
CentOS7系からNICの名前が従来のethからensに変更になったようにethを利用することは推奨されなくなったようです。
NICが1つしかない場合は、他のものと競合することがないのでethで設定しても問題なく動作しますが
今後のことも考え予め別の名前でセットアップしておくことをおすすめします。
プロフィール
サーバ構築周り全般を対応しております。
LINK
クラウドベリージャム:プロフィールページ