Ubuntu에서 네트워크 설정을 변경하다가 예상치 못한 문제를 겪어본 경험이 있으신가요? 저는 최근 Ubuntu Desktop에서 Kubernetes 클러스터를 구성하면서 DNS 설정이 적용되지 않는 문제로 몇 시간을 씨름했습니다. 이 과정에서 Ubuntu의 네트워크 관리 체계를 깊이 이해하게 되었고, 같은 문제로 고민하실 분들을 위해 이 글을 작성합니다.
Ubuntu는 버전과 에디션에 따라 다른 네트워크 관리 도구를 사용합니다:
Ubuntu 22.04 Desktop을 사용 중이라면, NetworkManager가 기본 네트워크 렌더러로 설정되어 있습니다. 다음 명령어로 확인할 수 있습니다:
# 현재 활성화된 네트워크 서비스 확인
systemctl status NetworkManager
systemctl status systemd-networkd
# netplan 렌더러 확인
cat /etc/netplan/*.yaml | grep renderer
Netplan은 Ubuntu 17.10부터 도입된 네트워크 설정 추상화 도구입니다. 중요한 점은 Netplan이 직접 네트워크를 관리하지 않는다는 것입니다.
┌─────────────────────────────┐
│ 사용자가 작성하는 YAML │
│ /etc/netplan/*.yaml │
└──────────┬──────────────────┘
│ netplan generate/apply
├─────────────┬────────────┐
↓ ↓ ↓
┌──────────────┐ ┌────────────┐ ┌──────────────┐
│NetworkManager│ │ networkd │ │ 기타... │
│ (Desktop) │ │ (Server) │ │ │
└──────────────┘ └────────────┘ └──────────────┘
Netplan의 주요 장점:
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은 네트워크 설정 프로파일입니다:
# 기존 수동 연결 삭제
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
# 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"
# 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"
network:
version: 2
renderer: NetworkManager # Desktop 환경
# renderer: networkd # Server 환경
새로운 시스템에서는 처음부터 Netplan으로만 관리:
# 기존 수동 연결 모두 삭제
nmcli connection show | grep -v "netplan-" | awk 'NR>1 {print $1}' | \
xargs -I {} sudo nmcli connection delete "{}"
# Netplan 설정 백업
sudo cp -r /etc/netplan /etc/netplan.backup
# NetworkManager 연결 백업
sudo cp -r /etc/NetworkManager/system-connections \
/etc/NetworkManager/system-connections.backup
# Netplan 설정 검증 (실제 적용하지 않음)
sudo netplan try
# 생성될 설정 파일 미리보기
sudo netplan generate --debug
# NetworkManager 로그 확인
journalctl -u NetworkManager -f
# 현재 DNS 설정 확인
resolvectl status
nmcli device show | grep DNS
Ubuntu의 네트워크 관리 체계는 처음에는 복잡해 보이지만, 각 구성 요소의 역할을 이해하면 매우 논리적입니다:
제가 겪은 문제는 Netplan과 NetworkManager의 관계를 정확히 이해하지 못해 발생했습니다. 특히 NetworkManager의 Connection 개념과 우선순위를 알지 못해 몇 시간을 헤맸죠.
핵심 교훈:
이 글이 Ubuntu 네트워크 설정으로 고민하시는 분들께 도움이 되기를 바랍니다. 특히 Kubernetes나 컨테이너 환경을 구성하면서 DNS 설정 문제를 겪으시는 분들에게 실질적인 해결책이 되었으면 좋겠습니다.