2020年2月26日水曜日

RHEL 8 (CentOS 8)のifup / ifdownの中身はnmcliだった話

以前からクセで、ネットワークインターフェースの設定反映をifup/ifdownコマンドを使って実施していた。ただ、RHEL 7 (CentOS 7)以降はnmcli (nmtui)コマンドを使ったNetworkManagerによる操作が推奨されている。

RHEL 8 (CentOS 8)も登場したということで、そろそろ真面目にnmcliで反映させるようにしようとコマンドを確認していたところ、nmcliを使ってもifupifdownを使っても、表示される内容が同一であることに気が付いた。

以下、ens192のインターフェースをdown/upさせ、設定反映を行うコマンドとなる。

nmcliコマンドの場合

# nmcli c down ens192 && nmcli c up ens192
接続 'ens192' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)

ifup/ifdownコマンドの場合

# ifdown ens192 && ifup ens192
接続 'ens192' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/6)
気になったので、コマンドの中身を見てみた。

ifupとifdownの中身

RHEL 8 (CentOS 8)の場合

whichコマンドを使ってコマンドのパスを確認する。
# which ifup
/usr/sbin/ifup
# which ifdown
/usr/sbin/ifdown
結論から言うと、ifupifdownの中身は、nmcliだった。RHEL 8 (CentOS 8)の場合は、どちらを使っても同じ効果が得られるので、特に気にはしなくてよさそうだ。
#!/bin/sh
nmcli connection load "/etc/sysconfig/network-scripts/ifcfg-$1" &&
exec nmcli connection up filename "/etc/sysconfig/network-scripts/ifcfg-$1"

# cat /usr/sbin/ifdown
#!/bin/sh
nmcli connection load "/etc/sysconfig/network-scripts/ifcfg-$1" &&
exec nmcli connection down filename "/etc/sysconfig/network-scripts/ifcfg-$1"

RHEL 7 (CentOS 7)の場合

同様に、whichコマンドを使ってコマンドのパスを確認する。パスはRHEL 8 (CentOS 8)と同じとなる。
[root@t3024ce73 ~]# which ifup
/usr/sbin/ifup
[root@t3024ce73 ~]# which ifdown
/usr/sbin/ifdown
こちらは、明らかにnmcliと内容が違う。2009年のスクリプトとなっているようで、中身は/etc/sysconfig/network-scriptsの設定ファイルを読み込むような内容に見える。NetworkManagerを使っている場合は、使わないほうが安全そうだ。
[root@t3024ce73 ~]# cat /usr/sbin/ifup
#!/bin/bash
# Network Interface Configuration System
# Copyright (c) 1996-2009 Red Hat, Inc. all rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

unset WINDOW # defined by screen, conflicts with our usage

. /etc/init.d/functions

cd /etc/sysconfig/network-scripts
. ./network-functions

[ -f ../network ] && . ../network

~(以下略)~

RHEL 8とRHEL 7のマニュアル上の記載

マニュアルの記載も確認してみた。

まず、RHEL 8におけるネットワーク設定推奨の記載は以下となり、そもそもネットワークスクリプトによる設定は非推奨と明確に記載されている。

第9章 ネットワーク
Red Hat Enterprise Linux 8 では、ネットワークスクリプトが非推奨となっており、デフォルトでは提供されなくなりました。基本インストールでは、nmcli ツールを介して NetworkManager を呼び出す ifup スクリプトおよび ifdown スクリプトの新しいバージョンが提供されます。Red Hat Enterprise Linux 8 で ifup スクリプトおよび ifdown スクリプトを実行する場合は、NetworkManager が起動している必要があります。
一方、RHEL 7におけるネットワーク設定推奨の記載は以下となり、NetworkManagerがデフォルトで使用されるが、ネットワークスクリプトもサポートすると記載がある。

Red Hat Enterprise Linux におけるネットワークの設定と管理
Red Hat Enterprise Linux 7 では、NetworkManager がデフォルトのネットワークサービスを提供します。これは動的なネットワーク制御および設定デーモンで、ネットワークデバイスと接続が利用可能な間は、これらをアクティブな状態に保ちます。従来の ifcfg タイプの設定ファイルも、サポートが継続されます。詳細は、「ネットワークスクリプトによる NetworkManager の使用」を参照してください。

まとめ

以上の結果をまとめると以下となる。
OS ifup/ifdownの中身 OS推奨
RHEL 8 (CentOS 8) nmcliを使っている nmcli必須
RHEL 7 (CentOS 7) nmcliを使っていない nmcli推奨
ifup / ifdownは互換性維持のためにあるようなものと理解し、極力nmcliを使ってインターフェースの操作や設定は実施すべきだろう。

0 件のコメント:

コメントを投稿

人気の投稿