웹사이트 검색

NMState: 선언적 네트워킹 구성 도구


Linux 에코시스템은 널리 사용되는 Network Manager 데몬과 nmcli 및 nmtui GUI 유틸리티와 같은 명령줄 도구를 포함하여 네트워킹을 구성하는 다양한 방법을 제공합니다. 이 가이드에서는 NMState라는 또 다른 네트워크 구성 도구를 소개합니다.

NMState는 Linux 호스트에서 네트워킹을 구성하기 위한 선언적 네트워크 관리자입니다. 호스트 네트워크 설정을 관리하는 명령줄 도구를 제공하는 라이브러리입니다. 노스바운드 선언적 API를 통해 호스트 네트워킹을 관리합니다. 이 가이드를 작성할 당시에는 NetworkManager 데몬이 NMState에서 지원하는 유일한 공급자였습니다.

이 가이드에서는 NMState 도구의 사용 예시 중 일부를 살펴봅니다. 이 가이드에서는 Fedora Linux를 사용하여 이를 시연합니다.

명령적 접근 방식과 선언적 접근 방식

네트워크 관리에는 명령형선언적이라는 두 가지 접근 방식을 사용할 수 있습니다. 명령형 접근 방식에서는 터미널에서 명령을 실행하여 인터페이스의 네트워킹 상태를 명시적으로 정의합니다. 초점은 '어떻게'에 있습니다.

예를 들어 명령형 접근 방식을 사용하여 네트워크를 중단하려면 다음 명령을 실행합니다.

sudo ifconfig enp0s3 down

반면, 선언적 접근 방식은 YAML 파일을 사용하여 구성에 변경 사항을 적용합니다. Kubernetes와 같은 대부분의 DevOps 조정 도구는 이 접근 방식을 사용하여 YAML 파일을 사용하여 포드 애플리케이션을 배포합니다.

이 접근 방식은 DevOps 분야에서 흔히 코드형 인프라(IaC)라고 하는 것을 제공합니다. 이를 통해 호스트의 네트워크 구성 자동화가 향상되고 오류를 최소화하면서 네트워크 인터페이스에 대한 여러 변경 사항을 빠르고 안정적으로 수행할 수 있는 방법이 제공됩니다.

이제 상황을 바꿔 NMState 구성 도구를 사용하여 Linux에서 네트워크 인터페이스를 구성하는 방법을 살펴보겠습니다.

1단계: NMState 네트워킹 구성 도구 설치

Nmstate를 설치하여 시작하겠습니다. 먼저 다음과 같이 Fedora 저장소에서 패키지의 가용성을 확인합니다.

sudo dnf search nmstate

출력에서 공식 저장소에서 네트워크 관리자를 사용할 수 있음을 알 수 있습니다.

다음으로 NMstate를 다음과 같이 설치합니다. 이는 Fedora 31 이상 버전에서 작동합니다.

sudo dnf install nmstate

이 명령은 다른 Python 종속성과 함께 NMState 네트워크 관리자 API를 설치합니다.

설치가 완료되면 다음과 같이 nmstate 패키지가 설치되었는지 확인합니다.

rpm -qi nmstate

RHEL 기반 Linux의 경우 먼저 copr 저장소를 활성화합니다.

sudo dnf copr enable nmstate/nmstate-stable

그런 다음 NMstate를 다음과 같이 설치하세요.

sudo dnf install nmstate

소스에서 NMState를 설치하는 방법에 대한 추가 지침을 확인하세요.

설치가 완료되면 설치된 NMstate 버전을 다음과 같이 확인할 수 있습니다.

nmstatectl version

1.0.2

Linux에서 NMState 구성 도구 사용

NMstate가 설치된 상태에서 네트워크 관리자 API를 최대한 활용할 수 있는 방법에 대한 핵심을 살펴보겠습니다.

네트워크 인터페이스의 현재 네트워크 구성을 보려면 다음 명령을 실행하십시오. 다음은 enp0s3 인터페이스 구성입니다.

nmstatectl show enp0s3

출력은 4개의 개별 섹션으로 나뉩니다.

  • dns-resolver: 이 섹션에는 특정 인터페이스에 대한 네임서버 구성이 포함되어 있습니다.
  • route-rules: 라우팅 규칙을 규정합니다.
  • 경로: 여기에는 동적 경로와 정적 경로가 모두 포함됩니다.
  • 인터페이스: 이 섹션에서는 ipv4 및 ipv6 설정을 모두 지정합니다.

Linux에서 네트워크 구성 변경

NMState 구성 도구를 사용하면 대화형 모드나 파일 기반 모드를 사용하여 호스트를 원하는 상태로 구성할 수 있습니다.

  • 대화형: nmstatectl edit 명령을 사용하여 네트워크 인터페이스를 편집합니다. 이 명령은 EDITOR 환경 변수에 의해 정의된 텍스트 편집기를 엽니다. 변경 사항이 저장되면 구문 오류가 감지되지 않는 한 NMState는 새 구성을 즉시 적용합니다.
  • 파일 기반: 파일 기반 모드에서는 nmstatectl apply 명령을 사용하여 YAML 또는 JSON 파일을 사용하여 인터페이스 구성이 적용됩니다.

이제 본격적으로 NMState를 사용하여 네트워크 구성을 수정하는 방법을 확인해 보겠습니다.

Fedora 시스템에는 다음 구성의 두 개의 활성 네트워크 인터페이스가 있습니다.

ip -br -4 a
샘플 출력
lo               UNKNOWN        127.0.0.1/8 
enp0s3           UP             192.168.2.104/24 
enp0s8           UP             192.168.2.103/24 

대화형 구성 모드 예

대화형 모드를 사용하여 enp0s3 네트워크 인터페이스의 MTU(최대 전송 단위)를 변경합니다. 기본적으로 표시된 대로 1500으로 설정됩니다.

ifconfig

이를 4000으로 변경하겠습니다. 다음과 같이 nmstatectl edit 명령을 사용하여 이를 수행합니다.

sudo nmstatectl edit enp0s3

그러면 텍스트 편집기에서 구성이 열립니다. 우리의 경우 vim 편집기에서 열립니다. 다음으로 아래로 스크롤하여 mtu 매개변수를 찾으세요. vim에서 파일을 편집하는 것처럼 값을 4000으로 변경하겠습니다. 그런 다음 변경 사항을 저장하겠습니다.

파일을 저장하고 종료하면 NMstate가 변경 사항을 저장하므로 터미널에 일부 뒤섞인 출력이 표시됩니다. 개입이 필요하지 않으므로 가만히 앉아 계십시오.

이제 변경이 이루어졌는지 확인해 보겠습니다.

ifconfig

터미널 출력에서 MTU를 기본 1500 값에서 4000으로 성공적으로 변경했음을 확인할 수 있습니다.

파일 기반 구성 모드 예

이제 파일 기반 모드를 사용하여 구성을 수정해 보겠습니다. 이 예에서는 enp0s8 네트워크 인터페이스에 대해 IPv6을 비활성화하겠습니다. 첫 번째 단계는 enp0s8 네트워크 인터페이스의 원하는 상태를 지정하는 YAML 파일을 생성하는 것입니다.

sudo nmstatectl show enp0s8 > enp0s8.yml

다음으로 YAML 파일을 다음과 같이 편집하겠습니다.

sudo vim enp0s8.yml

ipv6 섹션까지 아래로 스크롤합니다. IPv6를 비활성화하려면 활성화된 매개변수를 false로 설정하고 취소선이 있는 줄을 삭제하세요.

구성을 저장하고 다음과 같이 YAML 파일을 사용하여 새 상태를 적용합니다.

sudo nmstatectl apply enp0s8.yml

이제 표시된 명령을 실행하여 IPv6이 비활성화되었는지 확인하십시오. 표시된 출력에는 enp0s8 네트워크 인터페이스에 대한 IPv6가 비어 있음이 표시되어 인터페이스에서 IPv6을 성공적으로 비활성화했음을 의미합니다.

ip -br a 

일시적으로 네트워크 변경 사항 적용

NMstate가 제공하는 또 다른 정말 편리한 기능은 원하는 네트워킹 상태를 일시적으로 구성하는 기능입니다. 구성에 만족하면 계속 진행하여 변경 사항을 영구적으로 적용할 수 있습니다. 그렇지 않으면 시간 초과가 만료되면 변경 사항이 초기 설정으로 롤백됩니다. 기본 시간 제한은 60초입니다.

이를 입증하기 위해 enp0s3 인터페이스에 일시적으로 고정 IP를 설정하고 DHCP를 비활성화합니다. 다시 한 번 텍스트 편집기를 사용하여 파일에 액세스합니다.

sudo vim enp0s3.yml

ipv4 섹션으로 스크롤합니다. 고정 IP(이 경우 192.168.2.150)를 지정하고 취소선이 있는 줄을 삭제합니다. 또한 dhcp 매개변수를 false로 설정해야 합니다.

파일을 저장하고 다음과 같이 변경 사항을 임시로 커밋합니다.

sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml

--no-commit 옵션은 --timeout 옵션으로 정의된 기간(이 예에서는 20초) 동안 변경 사항을 일시적으로 적용합니다.

변경 사항의 일시적인 적용을 확인하기 위해 20초 간격으로 IP 구성을 확인합니다.

ip -br a 

출력에서 20초의 시간 간격 후에 인터페이스 IP 구성이 DHCP로 되돌아간 것을 확인할 수 있습니다. IP 주소는 이전에 정적으로 구성된 IP인 192.168.2.150에서 192.168.2.104로 돌아갔습니다.

물론, NMState 도구는 네트워크 인터페이스를 구성하는 데 편리한 도구입니다. NetworkManager API를 사용하여 호스트 인터페이스의 원하는 구성 상태를 적용하는 선언적 도구입니다.

상태대화형 접근 방식이나 사전 구성된 YAML을 사용하는 파일 기반 방법을 사용하여 쉽게 정의됩니다. 강한> 파일. 이를 통해 구성 작업 자동화가 향상되고 구성 중 오류가 줄어듭니다.