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


Linux 에코시스템은 널리 사용되는 nmtui GUI 유틸리티를 포함하여 네트워킹을 구성하는 다양한 방법을 제공합니다. 이 가이드에서는 NMState로 알려진 또 다른 네트워크 구성 도구를 소개합니다.

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

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

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

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

$ sudo ifconfig enp0s3 down

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

이 접근 방식은 DevOps 서클에서 일반적으로 IaC(Infrastructure as Code)라고 하는 것을 제공합니다. 이것은 호스트에서 네트워크 구성의 자동화를 향상시키고 최소한의 오류로 네트워크 인터페이스를 여러 번 변경할 수 있는 빠르고 안정적인 방법을 제공합니다.

이제 기어를 전환하고 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가 설치된 상태에서 Network Manager API를 최대한 활용할 수 있는 방법에 대한 핵심 내용을 살펴보겠습니다.

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

$ nmstatectl show enp0s3

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

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

    Linux에서 네트워크 구성 변경

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

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

      이제 손을 더럽히고 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을 비활성화하려면 enabled 매개변수를 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 옵션은 이 예에서 20초인 --timeout 옵션으로 정의된 기간 동안 변경 사항을 일시적으로 적용합니다.

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

      $ ip -br a 
      

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

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

      상태는 대화식 접근 방식을 사용하거나 미리 구성된 YAML 파일을 사용하는 파일 기반 방법을 사용하여 쉽게 정의됩니다. 이는 구성 작업의 자동화를 강화하고 구성 중 오류를 줄입니다.