안녕하세요, 오픈소스컨설팅에서 리눅스를 담당하고 있는 강주희입니다.
RHEL(Red Hat Enterprise Linux) 8 버전은 2019년 5월 7에 8.0이 처음 릴리즈되고, 2022년 11월 9일에는 RHEL8.7 릴리즈 되었습니다. RHEL8 릴리즈 버전이 중반기를 지나면서 프로덕션 환경에서도 사용되고 있는 것을 자주 볼 수 있습니다. 레드햇 Life Cycle Planning 에 의하면 2023년 중반부에는 RHEL9.4 버전이 릴리즈 되는데, 해당 시기에는 RHEL9도 신규 장비에 주로 도입될 거라고 예상됩니다.
2022년 5월 17일에 RHEL9 버전이 릴리즈되면서 Network 관리 도구의 추세가 변화하고 있다는 것을 알 수 있습니다. 네트워크 Initscripts
방식은 더 이상 사용하지 않게 되면서 NetworkManager
를 통해서만 네트워크를 설정 및 관리하게 되었습니다.
이러한 추세는 RHEL8 부터 체감할 수 있었습니다.
RHEL7에는 Initscripts
와 NetworkManager
를 모두 지원하였지만 RHEL8 부터는 Initscripts
가 기본 패치에서 제외되어 별도의 패키지를 설치해야 사용할 수 있었습니다.
이번 포스팅에서는 네트워크 관리 도구 별 특징과 Red Hat에서 추구하는 네트워크 관리 도구의 방향성에 대해 다루어보려고 합니다.
1. 네트워크 관리 도구 별 특징
1) Initscripts 란?
initscripts는 ifup
과 ifdown
명령어와 SysV-style init service인 network
를 제공합니다.
Fedora와 RHEL에서는 /etc/sysconfig/network-scripts
경로의 ifcfg-rh 파일 형식으로 네트워크를 구성합니다. initscripts
의 network-scripts
부분은 ifcfg-rh 파일을 구문 분석하고, 네트워크를 구성하는 쉘 스크립트 묶음입니다. 커널에서 인터페이스와 IP 주소를 설정하기 위해 iproute2를 호출합니다.
initscripts
는 다음의 기능을 포함하고 있습니다.
network-scripts
– legacy scripts for manipulating of network devicesreadonly-root
– service for configuring the read-only root supportnetconsole
– service for initializing of network console logging
2) NetworkManager 란?
NetworkManager
는 Linux에서 네트워크를 구성하기 위한 데몬입니다.
NetworkMnager
는 네트워크를 편리하게 구성하기 위해 CLI 도구인 nmcli
와 GUI 도구인 nmtui
를 지원합니다.
NetworkManager
는 INI 형식(keyfile)의 파일이나 ifcfg-rh 파일 형식으로 파일을 구성할 수 있습니다.
우선, INI 파일은 속성을 키-값 쌍(key-value pairs) 형식의 구성 파일입니다. INI 형식의 구성 파일은 /{etc,run,usr/lib}/NetworkManager/system-connections
경로에 정의 되며, 사용자는 /etc/NetworkManager/system-connections
경로에서 네트워크를 구성할 수 있습니다. 예를 들어 DHCP를 사용하는 ethernet device는 다음과 같이 구성할 수 있습니다.
# cat /etc/NetworkManager/system-connections/example.nmconnection
[connection]
id=example_connection
type=ethernet
autoconnect=true
[ipv4]
method=auto
[ipv6]
method=auto
[ethernet]
mac-address=00:53:00:8f:fa:66
NetworkManager
는 네트워크 구성 파일을 /etc/sysconfig/network-scripts
경로의 ifcfg-rh 파일로 함께 사용합니다.
NetworkManager
가 어떤 파일을 우선으로 사용하는 지는 /etc/NetworkManagerNetworkManager.conf
파일의 main.plugins
설정값으로 결정합니다. 앞에 위치한 값 일수록 우선으로 사용하는 파일 형식입니다. 예를 들어 main.plugins=keyfile,ifcfg-rh
이라면 keyfile 형식을 우선으로 사용하고, ifcfg-rh는 차순위로 사용됩니다. RHEL8 버전은 ifcfg-rh 파일이 선 순위로 사용하는 것이 기본값이고, RHEL9 버전에는 keyfile 파일을 선 순위로 사용하는 것이 기본값입니다.
- RHEL8.4 의
NetworkManager.conf
의main.plugins
설정값
[root@rhel84 ~]# cat /etc/NetworkManager/NetworkManager.conf |grep -A1 '\[main\]'
[main]
#plugins=ifcfg-rh
- RHEL9.1 의
NetworkManager.conf
의main.plugins
설정값
[root@rhel91 ~]# cat /etc/NetworkManagerNetworkManager.conf |grep -A1 '\[main\]'
[main]
#plugins=keyfile,ifcfg-rh
2. RHEL8과 9에서 ifup / ifdown 이 동작하는 방식이 다르다?
Fedora는 Red Hat Enterprise Linux(이하 RHEL) 버전의 업스트림 역할을 합니다. RHEL은 Fedora 레포지토리로 부터 파생되며, 안정성과 품질 보증을 거쳐 릴리즈 됩니다. 따라서 RHEL의 네트워크 관리 도구의 방향성을 이해하려면 Fedora의 방향성을 이해할 필요가 있습니다. RHEL는 다음과 같이 Fedora 버전을 기반으로 배포됩니다.
Fedora Linux 와 RHEL 의 관계
- Fedora 19, 20 → Red Hat Enterprise Linux 7
- Fedora 28 → CentOS Stream 8 → Red Hat Enterprise Linux 8
- Fedora 34 → CentOS Stream 9 → Red Hat Enterprise Linux 9
Fedora 29에서 network-scripts
패키지가 initscripts
패키지로부터 분리되었습니다.
Fedora 29 이전 버전은 network-scripts
가 initscripts
패키지에서 지원하고, Fedora 29 이후 버전은 network-scripts
가 NetworkManager
에서 지원됩니다. 앞서 설명하였듯이 initscripts
는 쉘스크립트 묶음이고, NetworkManager
는 데몬입니다.
따라서 ifup
/ ifdown
은 Fedora 28의 다운스트림인 RHEL8에서는 쉘스크립트인 initscripts
를 통해서 동작하고, Fedora 34의 다운스트림인 RHEL9에서는 데몬인 NetworkManger
동작합니다.
RHEL8, 9에서 ifup
명령어가 어떻게 동작하는 지 확인해 보면 알 수 있습니다.
1) RHEL9에서 ifup 은 어떻게 동작할까?
[root@rhel91 ~]# dnf provides *bin/ifup
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Last metadata expiration check: 2:46:51 ago on Wed 14 Dec 2022 02:31:11 PM KST.
NetworkManager-initscripts-updown-1:1.40.0-1.el9.noarch : Legacy ifup/ifdown
...: scripts for NetworkManager that replace initscripts (network-scripts)
Repo : BaseOS
Matched from:
Other : *bin/ifup
(... 생략 ...)
[root@rhel91 ~]# dnf list NetworkManager-initscripts-updown
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Last metadata expiration check: 2:47:56 ago on Wed 14 Dec 2022 02:31:11 PM KST.
Available Packages
NetworkManager-initscripts-updown.noarch 1:1.40.0-1.el9 BaseOS
[root@rhel91 ~]# dnf install NetworkManager-initscripts-updown.noarch
(... 생략 ...)
[root@rhel91 ~]# rpm -qi NetworkManager-initscripts-updown.noarch
Name : NetworkManager-initscripts-updown
Epoch : 1
Version : 1.40.0
Release : 1.el9
Architecture: noarch
Install Date: Wed 14 Dec 2022 05:29:23 PM KST
Group : System Environment/Base
Size : 2163
License : GPLv2+ and LGPLv2+
Signature : RSA/SHA256, Mon 29 Aug 2022 06:46:39 PM KST, Key ID 199e2f91fd431d51
Source RPM : NetworkManager-1.40.0-1.el9.src.rpm
Build Date : Sat 27 Aug 2022 06:33:44 AM KST
Build Host : aarch64-001.build.eng.bos.redhat.com
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor : Red Hat, Inc.
URL : https://networkmanager.dev/
Summary : Legacy ifup/ifdown scripts for NetworkManager that replace initscripts (network-scripts)
Description :
Installs alternative ifup/ifdown scripts that talk to NetworkManager.
This is only for backward compatibility with initscripts (network-scripts).
Preferably use nmcli instead
[root@rhel91 ~]# rpm -ql NetworkManager-initscripts-updown
/usr/libexec/nm-ifdown
/usr/libexec/nm-ifup
/usr/sbin/ifdown
/usr/sbin/ifup
[root@rhel91 ~]# ls -al /usr/sbin/ifup
lrwxrwxrwx. 1 root root 22 Dec 14 17:29 /usr/sbin/ifup -> /etc/alternatives/ifup
[root@rhel91 ~]# ls -al /etc/alternatives/ifup
lrwxrwxrwx. 1 root root 20 Dec 14 17:29 /etc/alternatives/ifup -> /usr/libexec/nm-ifup
[root@rhel91 ~]# ls -al /usr/libexec/nm-ifup
-rwxr-xr-x. 1 root root 1066 Aug 26 22:25 /usr/libexec/nm-ifup
- RHEL9에서는
ifup
를NetworkManager-initscripts-updown
패키지에서 지원합니다. NetworkManager-initscripts-updown
패키지는 BaseOS 레포지토리에서 지원합니다.NetworkManager-initscripts-updown
패키지 정보를 보면ifup
/ifdown
스크립트는NetworkManager
와 통신하여 동작한다고 설명되어 있습니다.NetworkManager-initscripts-updown
는/usr/sbin/ifdown
,/usr/sbin/ifup
을 제공합니다./usr/sbin/ifup
은/usr/libexec/nm-ifup
에 링크되어 있습니다.
2) RHEL8에서 ifup 은 어떻게 동작할까?
[root@rhel84 ~]# dnf provides ifup
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 2:29:46 ago on Fri 16 Dec 2022 10:11:37 PM KST.
NetworkManager-1:1.30.0-7.el8.x86_64 : Network connection manager and user applications
Repo : @System
Matched from:
Filename : /usr/sbin/ifup
network-scripts-10.00.15-1.el8.x86_64 : Legacy scripts for manipulating of network devices
Repo : @System
Matched from:
Filename : /usr/sbin/ifup
[root@rhel84 ~]# dnf install network-scripts
(... 생략 ...)
[root@rhel84 ~]# rpm -qi network-scripts
Name : network-scripts
Version : 10.00.15
Release : 1.el8
Architecture: x86_64
Install Date: Tue 30 Nov 2021 05:40:59 PM KST
Group : Unspecified
Size : 176186
License : GPLv2
Signature : RSA/SHA256, Thu 18 Feb 2021 04:11:05 PM KST, Key ID 199e2f91fd431d51
Source RPM : initscripts-10.00.15-1.el8.src.rpm
Build Date : Tue 16 Feb 2021 12:30:56 AM KST
Build Host : x86-vm-56.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor : Red Hat, Inc.
URL : https://github.com/fedora-sysv/initscripts
Summary : Legacy scripts for manipulating of network devices
Description :
This package contains the legacy scripts for activating & deactivating of most
network interfaces. It also provides a legacy version of 'network' service.
The 'network' service is enabled by default after installation of this package,
and if the network-scripts are installed alongside NetworkManager, then the
ifup/ifdown commands from network-scripts take precedence over the ones provided
by NetworkManager.
If user has both network-scripts & NetworkManager installed, and wishes to
use ifup/ifdown from NetworkManager primarily, then they has to run command:
$ update-alternatives --config ifup
Please note that running the command above will also disable the 'network'
service.
[root@rhel84 ~]# ls -al /usr/sbin/ifup
lrwxrwxrwx. 1 root root 22 Nov 24 2021 /usr/sbin/ifup -> /etc/alternatives/ifup
[root@rhel84 ~]# ls -al /etc/alternatives/ifup
lrwxrwxrwx. 1 root root 35 Nov 30 2021 /etc/alternatives/ifup -> /etc/sysconfig/network-scripts/ifup
[root@rhel84 ~]# ls -al /etc/sysconfig/network-scripts/ifup
-rwxr-xr-x. 1 root root 5463 Feb 16 2021 /etc/sysconfig/network-scripts/ifup
- RHEL8에서는
ifup
명령어를network-scripts
와Network-Manager
에서 같이 제공한다는 것을 알 수 있습니다. network-scripts
패키지 정보를 보면 이 패키지를 설치하면network
서비스가 기본적으로 활성화됩니다.network-scripts
가Network-Manager
와 함께 설치된 경우network-scripts
에서 제공하는ifup
/ifdown
명령이 우선으로 적용된 다는 것을 확인 할 수 있습니다./usr/sbin/ifup
은/etc/sysconfig/network-scripts/ifup
에 링크되어 있습니다.
3) 정리
명령어로 확인한 RHEL8, 9의 ifup
동작 방식을 정리하자면 다음 표와 같습니다.
RHEL8 | RHEL9 | |
---|---|---|
/usr/sbin/ifup 동작 방식 | /etc/sysconfig/network-scripts/ifup 에 링크되어 실행된다. | /usr/libexec/nm-ifup 가 링크되어 실행된다. |
ifup 명령어를 지원하는 패키지 | network-scripts 와 Network-Manager 패키지 | NetworkManager-initscripts-updown 패키지 |
ifup 명령어를 지원하는 패키지 정보 (rpm -qi 로 확인한 결과) | network-scripts 패키지 정보를 보면 이 패키지를 설치하면 network 서비스가 기본적으로 활성화한다.network-scripts 가 Network-Manager 와 함께 설치된 경우 network-scripts 에서 제공하는 ifup / ifdown 명령이 우선으로 적용된 다는 것을 확인 할 수 있다. | NetworkManager-initscripts-updown 패키지는 BaseOS 레포지토리에서 지원한다.NetworkManager-initscripts-updown 패키지 정보를 보면 ifup / ifdown 스크립트는 NetworkManager 와 통신하여 동작한다고 설명되어 있다. |
3. Red Hat에서 추구하는 네트워크 관리 도구의 방향성
RHEL7에는 Initscripts
와 NetworkManager
를 OS에 기본 패치하여 지원하였지만 RHEL8 부터는 Initscripts
가 기본 패치에서 제외되어 기본적으로 NetworkManager
를 통해서 네트워크를 관리할 수 있습니다. RHEL8, 9에서도 network-scripts
에서 제공하는 ifup
과 ifdown
을 사용할 수 있는 방법은 있습니다. 비록 RHEL8, 9 의 기본 패치에서 제외되었지만 이전 버전과의 호환성을 위해 별도로 패키지 설치해서 사용할 수 있습니다. RHEL8 에서는 network-scripts
패키지에서 ifup
과 ifdown
명령어와 SysV-style init service인 network
서비스를 제공합니다. RHEL9에서는 NetworkManager-initscripts-updown
패키지에서 ifup
, ifdown
명령어만을 제공합니다. 즉, RHEL9 에서는 모든 네트워크 관리를 NetworkManager
서비스가 전담하는 것을 알수 있습니다.
이렇게 Initscripts
가 RHEL8, 9 의 기본 패치에서 제외된 이유가 있습니다. Initscripts
는 systemd가 아닌 init script로 구성되어 있습니다. 따라서 동기식으로 로드되도록 설계되었습니다.
[root@rhel84 ~]# systemctl status network
● network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; generated)
Active: active (exited) since Fri 2022-12-16 21:31:41 KST; 2h 20min ago
Docs: man:systemd-sysv-generator(8)
Process: 855 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)
(... 생략 ...)
[root@rhel84 ~]# ls -al /etc/init.d/network
-rwxr-xr-x. 1 root root 8069 Feb 16 2021 /etc/init.d/network
대부분의 주요 Linux 배포판은 이미 systemd 로 전환되었습니다. Red Hat에서는 RHEL7 버전부터 부팅 프로세스가 systemd로 인해 병렬화 되어 서비스를 병렬로 제어가 가능합니다. 하지만 Initscripts
는 병렬로 로드되지 않기 때문에 시스템 부팅 속도를 늦추게 하는 원인으로 지목되고 있습니다.
정리하자면 Initscripts
는 systemd의 주요 이점인 서비스의 병렬적인 제어에 상반되는 특징을 가지므로 이를 개선하기 위해 NetworkManager
를 중심으로 네트워크를 관리하는 것을 권장하는 추세라는 것을 알 수 있습니다.
4. 참고 문서
[1] Life Cycle: RHEL 9 Planning Guide
https://access.redhat.com/support/policy/updates/errata#RHEL8_Planning_Guide
[2] What’s the difference between Network Initscript and NetworkManager in RHEL 7
https://access.redhat.com/solutions/783533
[3] Initscript 개념
https://github.com/fedora-sysv/initscripts
[4] Fedora와 RHEL 릴리즈
https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Relationship_with_Fedora_Linux
https://access.redhat.com/articles/3078
[5] Initscripts’ ifcfg-rh Format in NetworkManager and its Future
https://blogs.gnome.org/thaller/2021/02/02/initscripts-ifcfg-rh-format-in-networkmanager-and-its-future/
One reply on “[인사이트] RHEL9 에서 본 네트워크 관리 도구의 사용 추세 ”
[…] [인사이트] RHEL9 에서 본 네트워크 관리 도구의 사용 추세 […]