Netplan Renderers¶
What is a Renderer?¶
A renderer is the backend system that actually configures the network. Netplan generates configuration files for the chosen renderer.
Netplan YAML
│
▼
┌─────────────────────────────────────────────────┐
│ Netplan Parser │
│ Reads YAML, validates, generates config │
└─────────────────────────────────────────────────┘
│
├──────────────────────┬─────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ networkd │ │NetworkManager│ │ (sriov) │
└─────────────┘ └─────────────┘ └─────────────┘
Available Renderers¶
systemd-networkd¶
Default for Ubuntu Server
Characteristics: - Lightweight, minimal dependencies - Designed for servers and headless systems - Integrated with systemd - No GUI
NetworkManager¶
Default for Ubuntu Desktop
Characteristics: - Full-featured network management - GUI integration (nm-applet, GNOME Settings) - Better for laptops (roaming, WiFi management) - More complex
Choosing a Renderer¶
Use systemd-networkd When¶
- Running a server (headless)
- Need minimal resource usage
- Configuration is static
- No GUI needed
- Managing VMs/containers
Use NetworkManager When¶
- Running a desktop
- Need GUI configuration
- Frequently changing networks (laptop)
- Need VPN integration (NetworkManager plugins)
- Using mobile broadband
Renderer Comparison¶
| Feature | systemd-networkd | NetworkManager |
|---|---|---|
| Resource usage | Low | Higher |
| GUI support | No | Yes |
| WiFi roaming | Limited | Excellent |
| VPN support | Limited | Extensive |
| Server recommended | Yes | No |
| Desktop recommended | No | Yes |
| Configuration | Files only | Files + GUI + CLI |
Setting the Renderer¶
Global Default¶
Per-Interface¶
network:
version: 2
renderer: networkd # Default for all
ethernets:
eth0:
dhcp4: true
# Uses default renderer (networkd)
wifis:
wlan0:
renderer: NetworkManager # Override for this interface
access-points:
"MyNetwork":
password: "secret"
systemd-networkd Details¶
Service Management¶
# Check status
systemctl status systemd-networkd
# Restart
sudo systemctl restart systemd-networkd
# View logs
journalctl -u systemd-networkd
Generated Files¶
# .network files (configuration)
/run/systemd/network/10-netplan-eth0.network
# .netdev files (virtual devices)
/run/systemd/network/10-netplan-br0.netdev
# .link files (link configuration)
/run/systemd/network/10-netplan-eth0.link
Example Generated File¶
# /run/systemd/network/10-netplan-eth0.network
[Match]
Name=eth0
[Network]
DHCP=ipv4
LinkLocalAddressing=ipv6
[DHCP]
RouteMetric=100
UseMTU=true
networkctl Commands¶
# List interfaces
networkctl list
# Show interface status
networkctl status eth0
# Show all details
networkctl status
# Reconfigure interface
networkctl reconfigure eth0
# Reload configuration
networkctl reload
systemd-resolved Integration¶
networkd integrates with systemd-resolved for DNS:
# Check resolver status
resolvectl status
# Per-interface DNS
resolvectl dns eth0
# Query DNS
resolvectl query example.com
NetworkManager Details¶
Service Management¶
# Check status
systemctl status NetworkManager
# Restart
sudo systemctl restart NetworkManager
# View logs
journalctl -u NetworkManager
Generated Files¶
nmcli Commands¶
# List connections
nmcli connection show
# Show interface status
nmcli device status
# Show connection details
nmcli connection show "netplan-eth0"
# Activate connection
nmcli connection up "netplan-eth0"
# Deactivate
nmcli connection down "netplan-eth0"
nmtui¶
Text-based UI for NetworkManager:
Mixed Renderer Setup¶
You can use different renderers for different interfaces:
network:
version: 2
ethernets:
eth0:
renderer: networkd
dhcp4: true
wifis:
wlan0:
renderer: NetworkManager
access-points:
"Office":
password: "secret"
Use case: Server with Ethernet (networkd) but occasional WiFi for maintenance (NetworkManager).
Switching Renderers¶
From NetworkManager to networkd¶
# 1. Update netplan config
sudo nano /etc/netplan/01-netcfg.yaml
# Set: renderer: networkd
# 2. Generate new config
sudo netplan generate
# 3. Disable NetworkManager
sudo systemctl disable --now NetworkManager
# 4. Enable networkd
sudo systemctl enable --now systemd-networkd
# 5. Apply
sudo netplan apply
From networkd to NetworkManager¶
# 1. Install NetworkManager
sudo apt install network-manager
# 2. Update netplan config
sudo nano /etc/netplan/01-netcfg.yaml
# Set: renderer: NetworkManager
# 3. Generate new config
sudo netplan generate
# 4. Disable networkd (optional, can coexist)
# sudo systemctl disable --now systemd-networkd
# 5. Enable NetworkManager
sudo systemctl enable --now NetworkManager
# 6. Apply
sudo netplan apply
Troubleshooting Renderer Issues¶
networkd Not Applying Configuration¶
# Check service
systemctl status systemd-networkd
# Check for errors
journalctl -u systemd-networkd -p err
# Regenerate
sudo netplan generate
sudo netplan apply
# Force reconfigure
networkctl reconfigure eth0
NetworkManager Ignoring Netplan¶
# Check if NM is managing the interface
nmcli device status
# Ensure netplan generated NM files
ls /run/NetworkManager/system-connections/
# Reload connections
nmcli connection reload
Interface Managed by Wrong Renderer¶
Both Renderers Trying to Manage¶
# Check what's managing eth0
networkctl status eth0 # Shows if networkd manages it
nmcli device status # Shows if NM manages it
# One should show "unmanaged"
Renderer-Specific Features¶
networkd-Only Features¶
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
route-metric: 100
use-domains: true
networkd: # networkd-specific passthrough
RequiredForOnline: no
NetworkManager-Only Features¶
ethernets:
eth0:
dhcp4: true
networkmanager: # NM-specific passthrough
uuid: "12345678-1234-1234-1234-123456789012"
passthrough:
connection.autoconnect-priority: 100
Server Recommendation¶
For the MS-S1 MAX server setup:
Reasons: - Lower resource usage - Better systemd integration - Designed for static configurations - No unnecessary GUI components