Ubuntu Netplan으로 네트워크 설정 관리하기

예전 /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: enp3s0

vlan은 id/link가 없으면 netplan generatemissing '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으로 강제된다 — 644generate가 경고.
  • netplan try는 본딩/브리지 변경을 완벽히 롤백 못 하는 제약이 있다 — 콘솔 접속 가능한 상태에서 테스트할 것.
  • cloud-init이 50-cloud-init.yaml을 매 부팅 재생성한다. 아예 막으려면 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfgnetwork: {config: disabled}.
  • 같은 인터페이스를 여러 파일에서 설정하면 뒤 파일이 이긴다 — 인터페이스당 한 파일에 몰아 쓰는 게 디버깅에 유리.

마무리

“원하는 최종 상태”를 선언하면 백엔드가 알아서 맞춰주는 게 Netplan의 핵심이다. 운영 서버에서는 netplan apply 대신 netplan try로 되돌릴 여지를 남기고 networkctl status/journalctl로 결과를 확인할 것.

참고

답글 남기기