Ubuntu 네트워크 관리 완벽 이해: NetworkManager, systemd-networkd, 그리고 Netplan의 관계

문한성·2025년 10월 28일
0

서론

Ubuntu에서 네트워크 설정을 변경하다가 예상치 못한 문제를 겪어본 경험이 있으신가요? 저는 최근 Ubuntu Desktop에서 Kubernetes 클러스터를 구성하면서 DNS 설정이 적용되지 않는 문제로 몇 시간을 씨름했습니다. 이 과정에서 Ubuntu의 네트워크 관리 체계를 깊이 이해하게 되었고, 같은 문제로 고민하실 분들을 위해 이 글을 작성합니다.

Ubuntu의 네트워크 관리 체계

Ubuntu 버전별 기본 네트워크 렌더러

Ubuntu는 버전과 에디션에 따라 다른 네트워크 관리 도구를 사용합니다:

  • Ubuntu Desktop (18.04 이후): NetworkManager가 기본
  • Ubuntu Server (18.04 이후): systemd-networkd가 기본
  • Ubuntu 17.10 이전: ifupdown 사용

Ubuntu 22.04 Desktop을 사용 중이라면, NetworkManager가 기본 네트워크 렌더러로 설정되어 있습니다. 다음 명령어로 확인할 수 있습니다:

# 현재 활성화된 네트워크 서비스 확인
systemctl status NetworkManager
systemctl status systemd-networkd

# netplan 렌더러 확인
cat /etc/netplan/*.yaml | grep renderer

NetworkManager vs systemd-networkd: 핵심 차이점

NetworkManager

  • 대상: 주로 데스크톱 환경
  • 특징:
    • GUI 지원 (nm-applet, GNOME 설정 등)
    • Wi-Fi, VPN, 모바일 브로드밴드 등 다양한 연결 타입 지원
    • 동적 네트워크 환경에 최적화
    • D-Bus를 통한 애플리케이션 통합
    • 연결 프로파일 기반 관리 (Connection 개념)

systemd-networkd

  • 대상: 주로 서버 환경
  • 특징:
    • 경량화된 디자인
    • 정적 네트워크 구성에 최적화
    • systemd 생태계와 긴밀한 통합
    • 설정 파일 기반 (/etc/systemd/network/)
    • 컨테이너 환경에 적합

Netplan: 통합 네트워크 설정 추상화 계층

Netplan의 역할과 작동 원리

Netplan은 Ubuntu 17.10부터 도입된 네트워크 설정 추상화 도구입니다. 중요한 점은 Netplan이 직접 네트워크를 관리하지 않는다는 것입니다.

┌─────────────────────────────┐
│   사용자가 작성하는 YAML     │
│  /etc/netplan/*.yaml        │
└──────────┬──────────────────┘
           │ netplan generate/apply
           ├─────────────┬────────────┐
           ↓             ↓            ↓
┌──────────────┐ ┌────────────┐ ┌──────────────┐
│NetworkManager│ │  networkd  │ │   기타...    │
│   (Desktop)  │ │  (Server)  │ │              │
└──────────────┘ └────────────┘ └──────────────┘

Netplan의 주요 장점:

  • 통일된 YAML 형식으로 네트워크 설정
  • 렌더러 전환이 간단 (renderer: NetworkManager/networkd)
  • 선언적 설정 방식
  • 버전 관리에 용이

실제 사례: K8s 환경에서 DNS 설정 충돌 문제

문제 상황

Ubuntu Desktop에 Kubernetes를 설치하고, CoreDNS(10.96.0.10)를 시스템 DNS에 추가하려고 했습니다.

# /etc/netplan/01-static-wifi.yaml
network:
  version: 2
  renderer: NetworkManager
  wifis:
    wlp2s0:
      access-points:
        "KT_GiGA_3AD1":
          password: "********"
      dhcp4: true
      nameservers:
        addresses: [10.96.0.10, 168.126.63.1, 168.126.63.2]

sudo netplan apply를 실행했지만, DNS 설정이 반영되지 않았습니다.

원인 분석

문제의 핵심은 NetworkManager의 Connection 개념을 이해하지 못한 것이었습니다.

# 연결 상태 확인
$ nmcli connection show
NAME                           UUID                                  TYPE      DEVICE 
KT_GiGA_3AD1                   xxxx-xxxx-xxxx-xxxx                  wifi      wlp2s0
netplan-wlp2s0-KT_GiGA_3AD1   yyyy-yyyy-yyyy-yyyy                  wifi      --

두 개의 Connection이 존재했고, 기존 수동 연결이 활성화되어 있어 Netplan이 생성한 연결이 무시되었습니다.

NetworkManager Connection의 이해

NetworkManager에서 Connection은 네트워크 설정 프로파일입니다:

  • 하나의 인터페이스에 여러 Connection 존재 가능
  • 한 번에 하나의 Connection만 활성화
  • 우선순위: 이미 활성화된 연결 > 새로운 연결

해결 방법

방법 1: 기존 Connection 삭제 후 Netplan 연결 활성화

# 기존 수동 연결 삭제
sudo nmcli connection delete "KT_GiGA_3AD1"

# Netplan 재적용
sudo netplan apply

# Netplan이 생성한 연결 활성화
sudo nmcli connection up "netplan-wlp2s0-KT_GiGA_3AD1"

# DNS 확인
resolvectl status wlp2s0

방법 2: 기존 Connection 직접 수정

# NetworkManager를 통한 직접 수정
sudo nmcli connection modify "KT_GiGA_3AD1" \
  ipv4.dns "10.96.0.10 168.126.63.1 168.126.63.2"
  
sudo nmcli connection reload
sudo nmcli connection up "KT_GiGA_3AD1"

방법 3: 자동 DNS 무시 설정

# DHCP DNS 무시하고 수동 DNS만 사용
sudo nmcli connection modify "KT_GiGA_3AD1" \
  ipv4.ignore-auto-dns yes \
  ipv4.dns "10.96.0.10 168.126.63.1 168.126.63.2"

베스트 프랙티스

1. 환경에 맞는 렌더러 선택

network:
  version: 2
  renderer: NetworkManager  # Desktop 환경
  # renderer: networkd     # Server 환경

2. Netplan 전용 시스템 구성

새로운 시스템에서는 처음부터 Netplan으로만 관리:

# 기존 수동 연결 모두 삭제
nmcli connection show | grep -v "netplan-" | awk 'NR>1 {print $1}' | \
  xargs -I {} sudo nmcli connection delete "{}"

3. 설정 변경 전 백업

# Netplan 설정 백업
sudo cp -r /etc/netplan /etc/netplan.backup

# NetworkManager 연결 백업
sudo cp -r /etc/NetworkManager/system-connections \
  /etc/NetworkManager/system-connections.backup

4. 디버깅 팁

# Netplan 설정 검증 (실제 적용하지 않음)
sudo netplan try

# 생성될 설정 파일 미리보기
sudo netplan generate --debug

# NetworkManager 로그 확인
journalctl -u NetworkManager -f

# 현재 DNS 설정 확인
resolvectl status
nmcli device show | grep DNS

결론

Ubuntu의 네트워크 관리 체계는 처음에는 복잡해 보이지만, 각 구성 요소의 역할을 이해하면 매우 논리적입니다:

  1. Netplan은 설정을 추상화하는 "번역기"
  2. NetworkManager는 Desktop에서 실제 네트워크를 관리하는 "실행자"
  3. systemd-networkd는 Server에서 같은 역할을 수행

제가 겪은 문제는 Netplan과 NetworkManager의 관계를 정확히 이해하지 못해 발생했습니다. 특히 NetworkManager의 Connection 개념과 우선순위를 알지 못해 몇 시간을 헤맸죠.

핵심 교훈:

  • Netplan을 사용할 때는 기존 수동 설정과의 충돌을 확인
  • 하나의 인터페이스는 하나의 활성 Connection만 가능
  • Desktop 환경에서는 NetworkManager의 특성을 이해하고 활용

이 글이 Ubuntu 네트워크 설정으로 고민하시는 분들께 도움이 되기를 바랍니다. 특히 Kubernetes나 컨테이너 환경을 구성하면서 DNS 설정 문제를 겪으시는 분들에게 실질적인 해결책이 되었으면 좋겠습니다.


profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글