Ubuntu NetPlan
IP 주소 설정을 위한 Ubuntu NetPlan 구성
개요
Netplan은 네트워크를 YAML로 선언하고 systemd-networkd나 NetworkManager 같은 백엔드(“renderer”)에 넘기는, Ubuntu의 표준 방식이다. 설정은 /etc/netplan/*.yaml 아래에 있고, Netplan은 자동 롤백과 함께 변경을 안전하게 시험해볼 수 있다.
YAML을 쓰기 전에 인터페이스부터 확인하라
장비가 새것이거나 YAML이 아직 없을 때, 실제 장치 이름을 빠르게 찾아보자:
# 인터페이스 목록 (이름, 상태)
ip -br link
# 주소 포함 (IPv4/IPv6)
ip -br addr
ip -br -4 addr
ip -br -6 addr
# 특정 인터페이스 자세히 보기
ip addr show dev enp3s0
ip -br addr show dev enp3s0
-
-br/--brief는 깔끔한 표를 보여주고,-j/--json은 기계가 읽을 수 있는 출력을 준다. -
ip a는ip addr의 축약이다. 한 장치로 좁힐 때만show dev IFACE가 필요하고, 목록을 볼 때는show도 없어도 된다.
최소 레시피
아래 중 하나를
/etc/netplan/01-net.yaml에 넣고,sudo netplan try→ 확인 →sudo netplan apply.
DHCP (서버 스타일)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
고정 IPv4 + DNS + 기본 라우트
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [10.10.10.20/24]
nameservers:
search: [corp.local]
addresses: [10.10.10.253, 8.8.8.8]
routes:
- to: default
via: 10.10.10.1
게이트웨이 여러 개 (metric으로 주/예비 구분)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [10.0.0.10/24]
routes:
- to: default
via: 10.0.0.1
metric: 100
- to: default
via: 10.0.1.1
metric: 200
Bridge (주로 KVM/컨테이너용)
network:
version: 2
renderer: networkd
ethernets:
enp3s0: { dhcp4: false }
bridges:
br0:
dhcp4: true
interfaces: [enp3s0]
Bond (active-backup 또는 802.3ad/LACP)
network:
version: 2
renderer: networkd
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
dhcp4: true
parameters:
mode: active-backup # 또는: 802.3ad
VLAN (태그된 서브인터페이스)
network:
version: 2
renderer: networkd
ethernets:
mainif: { dhcp4: false }
vlans:
vlan15:
id: 15
link: mainif
addresses: [10.3.99.5/24]
Wi-Fi (데스크톱/노트북. NetworkManager 사용)
network:
version: 2
renderer: NetworkManager
wifis:
wlp2s0:
access-points:
"MY_SSID":
password: "********"
dhcp4: true
안전한 적용 절차 (원격에서도 안심)
- 병합된 설정을 확인한다:
sudo netplan get
- 자동 롤백과 함께 시험한다:
sudo netplan try # 기본 120초 카운트다운
- 확정한다:
sudo netplan apply
2단계에서 연결이 끊기면 타임아웃 후 Netplan이 이전 상태를 자동으로 복구한다. SSH로 작업할 때 정확히 원하는 동작이다.
문제 해결 체크리스트
- netplan status [IFACE] (
--diff를 붙이면 YAML과 실제 상태를 비교). - 자세한 적용 로그:
sudo netplan --debug apply. - IP/라우트:
ip -br addr,ip route. - DNS:
resolvectl status. - 로그:
journalctl -u systemd-networkd또는journalctl -u NetworkManager. - Netplan 자신도 실제 IP 상태를 볼 때는
ip addr를 쓰라고 권한다.
클라우드 이미지와 자동 생성 YAML
클라우드 이미지에서는 /etc/netplan/50-cloud-init.yaml 같은 자동 생성 파일을 자주 보게 된다. Netplan 전용으로 전환하거나 템플릿을 손보기 전까지는 플랫폼 (cloud-init, MAAS 등)이 네트워크를 소유하고 있을 수 있다. 핵심은 Netplan이 /{lib,etc,run}/netplan의 모든 YAML을 읽어 사전순으로 병합하며, 뒤쪽 파일이 앞쪽을 보완/덮어쓴다는 점을 아는 것이다.
부록: iproute2 한 줄 명령
# 인터페이스 이름만
ip -o link show | awk -F': ' '{print $2}'
# NIC별 IPv4 (쉼표 구분)
for i in $(ls /sys/class/net | grep -v lo); do
printf "%-12s %s\n" "$i" "$(ip -4 -o addr show dev $i | awk '{print $4}' | paste -sd, -)"
done
# JSON (스크립트용으로 좋다)
ip -j addr show | jq .
- 압축된 표에는
-br/--brief, 기계가 읽을 출력에는-j/--json을 쓰고, 객체 이름은 줄여 쓸 수 있다 (ip addr→ip a).