Ifup/down, NetworkManager, networkd 그리고 Clear Linux

1.
보통 Centos/RHEL으로 어플리케이션을 설치한 후 가장 먼저 작업을 하는 것이 네트워크환경입니다. 일반적으로 인터넷환경인 경우 DHCP을 이용하기 때문에 별도의 설정을 하는 경우는 거의 없습니다. 그렇지만 금융회사 DMA를 통해 운용하는 서버의 경우 고정IP를 설정하여야 운용가능합니다. 보안규정때문입니다. 이 때 Centos나 Redhat의 경우 /etc/sysconfig/network-scripts 밑에 Device별로 관련한 설정파일을 만들어주는 방식으로 작업합니다.

CentOS나 RHES의 경우 네트워크 서비스는 NetworManager를 사용합니다.

nmcli라는 명령어는 NetworkManager의 클라이언트로써 터미날환경에서 네트워크 조회 및 설정을 할 수 있도록 합니다. 예를 들면 아래와 같습니다.

이중 cfg파일을 보면 다음과 같습니다.

문서를 보면 Centos*부터 NetworkManager를 지원하지 않는다고 합니다만 설치를 하면 가능합니다. 또한 network-scripts 패키지를 설치할 경우 Script를 통한 네트워크설정이 가능하다고 하네요. 일반적으로 Linux에서 Network환경을 관리하는 방법은 어떻게 될가요? 크게 세가지로 나눌 수 있습니다.

ifup/down
NetworkManager
systemd-networkd

앞서 network-script로 하는 방식은 ifup/down을 이용한 방식입니다. 아주 오랜 방법입니다. 이와 관련한 자세한 소개는 How exactly are NetworkManager, networkd, netplan, ifupdown2, and iproute2 interacting?에서 확인할 수 있습니다. 글 아래에 관련한 부분을 옮겼습니다.

2.
얼마전 이런저런 시험을 하였던 Clear Linux. 고객과 협의하여 Clear Linux와 Mellanox VMA을 이용한 시스템을 구성하여 고객이 거래하는 증권사에 입고하였습니다. 입고하고 하루가 지난 후 연락이 왔습니다.

“어떻게 네트워크 설정을 하나요?

처음 받은 질문이라 당황하였습니다.Command-Line 설정을 위해 조사를 해보니까 ifup/donw은 지원하지 않고 NetworkManager나 systemd-networkd를 이용한 방식이 가능합니다. 따라서 Centos/RHES와 같은 방식으로 설정하면 될 것으로 예상하면 오산입니다. network-scripts라는 디렉토리가 존재하지 않습니다.

Clear Linux의 문서에 네트워크설정과 관련한 문서가 자세하지 않습니다. Assign a static IP address에 간단히 나와 있습니다. 우선 Systemd-networkd와 NetworkManager중 무엇을 이용하는지에 대한 설명입니다.

New installations of Clear Linux* OS use NetworkManager as the default network interface manager for all network connections

NetworkManager를 이용한다고 합니다만 제가 설치한 서버를 보면 systemd-networkd로 같이 사용을 합니다. 우선 Assign a static IP address릏 따라가겠습니다. 먼저 ‘nmcli device status’를 실행하라고 합니다. 결과값에서 STATE값을 확인하여야 합니다.

If the STATE column for the device shows connected or disconnected, the network configuration is being managed by NetworkManager, then use the instructions for using NetworkManager.

조금더 나아가면 nmcli device managed yes|no 로 NetworkManager가 관리하거나 하지 않을 수 있고 nmcli device connect|disconnect로 State를 변경할 수 있습니다. connected|disconnected로 상태값이 보여진 device에 대하여 IP 주소를 변경하는 방법입니다.

Modify the connection to use a static IP address. Replace the variables in brackets with the appropriate values. Replace [CONNECTION_NAME] with the NAME from the command above.For advanced configurations, the /etc/NetworkManager/system-connections/*.nmconnection. can be edited directly.

sudo nmcli connection modify “[CONNECTION_NAME]” ipv4.method “manual” ipv4.addresses “[IP_ADDRESS]/[CIDR_NETMASK]” ipv4.gateway “[GATEWAY_IP_ADDRESS]” ipv4.dns “[PRIMARY_DNS_IP],[SECONDARY_DNS_IP]”

nmcli의 변수값은 아래와 같은 명령어를 통하여 확인할 수 있습니다. ipv4.method과 같은 값이 변수명이고 modify를 통하여 변경가능합니다.

이미 있는 profile의 값중에서 신규로 추가하고자 할 경우 +를 사용합니다.

3.
다음은 systemd-networkd를 이용하는 경우입니다. 앞서 nmcli 명령어로 상태값을 확인한 내용중 unmanaged로 되어 있는 경우 networkctl list를 실행합니다.

If the SETUP column for the device shows configured, the network configuration is being managed by systemd-networkd, then use the instructions for using systemd-networkd.

왜 networkctl을 실행하라고 할까요? NetworkManager와 nmcli가 짝을 이룬다고 하면 networkd와 networkctl이 짝을 이루기 때문입니다. networkd를 통하여 관리하는 네트워크정보를 networkctl을 통하여 조회할 수 있기때문입니다. 그래서 systemd-networkd가 동작하는 경우와 아닌 경우 값에서 차이가 발생합니다. OPERATIONAL을 보면 다릅니다.

systemd-networkd를 이용하여 고정IP를 설정하는 경우 /etc/systemd/network 아래 .network 파일을 생성하여 설정하라고 합니다. 예를 들면 다음과 같습니다.

NetworkManager보다 간편합니다.

이상을 정리해보겠습니다. Network-Script를 이용한 설정은 /etc/sysconfig/network-scripts/ifcfg-* = init scripts still used for legacy, it is processed by systemd anyways을 참고하시고, NetworkManager의 Connection Profile와 관련한 설정은 /etc/NetworkManager/system-connections/*.nmconnection = network manager configuration keyfiles를 참고하시길 바랍니다.

여기서 잠깐 systemd-networkd와 NetworkManager의 차이가 무엇인지 살펴보겠습니다. 저같은 경우 Solaris를 사용하던 때 Ifconfig를 이용하여 네트워크 설정을 하였는데 유닉스와 리눅스의 역사에 네트워크관리가 어떻게 변화해왔는지 잘 몰랐는데 아래를 보면서 이해를 할 수 있었습니다.

How exactly are NetworkManager, networkd, netplan, ifupdown2, and iproute2 interacting?

좀 길지만 옮기겠습니다.

1.The old network interfaces configuration file, and it’s ifup & ifdown commands:

The /etc/network/interfaces network configuration file seems to be fairly old, but is still used by ifup, ifdown and ifquery.

These seem to be the old way to bring network ‘interfaces’ (MAC based links) and ‘connections’ (IP based connections) up and down.

man 8 ifup says:

DESCRIPTION
The ifup and ifdown commands may be used to configure (or, respectively, deconfigure) network interfaces based on interface definitions in the file /etc/network/interfaces.

The important implication is this:

if an interface isn’t defined in /etc/network/interfaces, then ifup/ifdown won’t manage that interface.


2.What about the old ifconfig command?

The legacy networking package named net-tools on Debian, includes the depreciated: arp, ifconfig, ipmaddr, iptunnel, iwconfig, nameif, netstat, route, and vconfig commands.

Now you want to be using the package named iproute2 instead which includes the newer ip, iw, ss, and ifrename commands.


3.If the ip command can bring an interface up or down, why not use it rather than ifup and ifdown?

What ifup/down does, (via the ifupdown package or presumable also the Python rewrite in ifupdown2), that ip does not do, is to run legacy scripts before and after network changes. But note what man ifup says:

NOTES

The program does not configure network interfaces directly; it runs low level utilities such as ip to do its dirty work.

SEE ALSO
interfaces(5), ip(8), ifconfig(8).

So it appears that ifup/ifdown has been upgraded from using the depreciated ifconfig back-end, to now using the ip back-end, provided by the newer iproute2 package.


4.What about NetworkManager? (2004)

From man 5 NetworkManager,

[IFUPDOWN]

This section contains ifupdown-specific options and thus only has effect when using the ifupdown plugin.

managed

If set to true, then interfaces listed in /etc/network/interfaces are managed by NetworkManager. If set to false, then any interface listed in /etc/network/interfaces will be ignored by NetworkManager. Remember that NetworkManager controls the default route, so because the interface is ignored, NetworkManager may assign the default route to some other interface.

So its unclear if NetworkManager can also run ifup/ifdown scripts, but what is clear, is that NetworkManager can stay clear of legacy interfaces (again “MAC based hardware links”) that ifup/ifdown are still using. In other words, either ifup is using a hardware link, or NetworkManager, or possibly something else, but not both ifup and NetworkManager at the same time.


5.systemd-networkd (2010)

This is newer than NetworkManager, and used for wired servers and when a GUI environment is not available.

But it appears that for wireless connections, NetworkManager is the way to go as it is more difficult to manually configure systemd-networkd.

In man 8 systemd-networkd it says,

systemd-networkd will manage network addresses and routes for any link for which it finds a .network file with an appropriate [Match] section, see systemd.network(5) (real network devices). For those links, it will flush existing network addresses and routes when bringing up the device. Any links not matched by one of the .network files will be ignored. It is also possible to explicitly tell systemd-networkd to ignore a link by using Unmanaged=yes option, see systemd.network(5).

Hope I’ve got this all right, but if not please let me know. Thanks.

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.