예전 /etc/network/interfaces는 배포판마다 문법이 다르고 cloud-init 같은 자동 구성 환경과 궁합이 안 좋았다. Ubuntu 17.10부터는 Netplan이 YAML로 원하는 상태만 선언하면 systemd-networkd/NetworkManager를 백엔드로 골라 실제 설정을 만들어준다. 이 글에서는 YAML 구조, 고정 IP·본딩·브리지 예시, generate/apply/try 차이, 디버깅 명령을 정리한다.
핵심개념
Netplan은 데몬이 아니라 /etc/netplan/*.yaml을 읽어 백엔드 설정으로 변환(render)하는 도구다. renderer에 따라 systemd-networkd용은 /run/systemd/network/, NetworkManager용은 /run/NetworkManager/system-connections/에 생성되고, 실제 활성화는 해당 백엔드가 한다. 파일이 여러 개면 이름 사전순으로 뒤 파일이 앞 파일을 덮어쓴다 — cloud-init이 50-cloud-init.yaml을 자동 생성하므로 직접 파일은 99-custom.yaml처럼 뒤 번호로 분리하는 게 안전하다.
network:
version: 2
renderer: networkd # 또는 NetworkManager
ethernets:
enp3s0: {}
bonds:
bond0: {}
bridges:
br0: {}
vlans:
vlan100:
id: 100
link: enp3s0vlan은 id/link가 없으면 netplan generate가 missing 'link' property로 거부한다(실제 sudo netplan generate --debug로 확인). 다른 항목은 {}만으로도 통과한다. 이름이 바뀔 수 있는 환경(클라우드/VM)은 match로 MAC 주소를 잡고 set-name으로 이름을 고정한다.
network:
version: 2
ethernets:
eth-wan:
match:
macaddress: 52:54:00:6b:3c:58
set-name: eth-wan
dhcp4: true실전 사용법
# DHCP
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true# 고정 IP
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
addresses:
- 192.168.1.50/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [example.local]# 본딩 (스위치도 LACP 802.3ad로 맞춰야 링크가 잡힌다)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
enp4s0:
dhcp4: false
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
addresses: [192.168.1.50/24]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100# 브리지 (물리 NIC는 자체 IP 없이 브리지에 편입)
network:
version: 2
renderer: networkd
ethernets:
enp5s0:
dhcp4: false
bridges:
br0:
interfaces: [enp5s0]
dhcp4: true
parameters:
stp: true
forward-delay: 4| 명령 | 동작 |
|---|---|
netplan generate | 백엔드 설정으로 변환만, 적용 안 함 (문법 오류 dry-run에 유용) |
netplan apply | 변환+적용 동시 수행 — 원격에서 잘못 넣으면 접속 바로 끊길 위험 |
netplan try | 적용하되 기본 120초 안에 Enter로 확인 안 하면 자동 롤백 — 원격 작업 필수 |
$ sudo netplan generate
$ sudo netplan try
Press ENTER before the timeout to accept the new configuration
Changes will revert in 120 seconds
백엔드는 서버/클라우드는 networkd, 데스크톱/GUI 전환이 필요하면 NetworkManager. Ubuntu 24.04부터는 NetworkManager도 Netplan YAML을 직접 백엔드로 읽는다.
$ networkctl status enp3s0
● 2: enp3s0
State: routable (configured)
Address: 192.168.1.50 on enp3s0
Gateway: 192.168.1.1 on enp3s0
$ journalctl -u systemd-networkd -f
Ubuntu 24.04+ Netplan(0.106+)에는 netplan status로 인터페이스·라우트·DNS를 한 화면에서 볼 수 있다. 반영이 안 될 땐 netplan --debug generate로 파싱 단계부터 확인.
주의사항
- Wi-Fi 비밀번호 등 평문이 들어갈 수 있어 파일 권한이
600으로 강제된다 —644면generate가 경고. netplan try는 본딩/브리지 변경을 완벽히 롤백 못 하는 제약이 있다 — 콘솔 접속 가능한 상태에서 테스트할 것.- cloud-init이
50-cloud-init.yaml을 매 부팅 재생성한다. 아예 막으려면/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg에network: {config: disabled}. - 같은 인터페이스를 여러 파일에서 설정하면 뒤 파일이 이긴다 — 인터페이스당 한 파일에 몰아 쓰는 게 디버깅에 유리.
마무리
“원하는 최종 상태”를 선언하면 백엔드가 알아서 맞춰주는 게 Netplan의 핵심이다. 운영 서버에서는 netplan apply 대신 netplan try로 되돌릴 여지를 남기고 networkctl status/journalctl로 결과를 확인할 것.