Netplan Best Practices (Ubuntu/Modern Debian)
Why Netplan:
-
Declarative YAML configuration
-
Supports both NetworkManager and systemd-networkd backends
-
Consistent across Ubuntu versions
-
Easy to version control
Recommended backend:
# Use systemd-networkd for servers (better performance)
network:
version: 2
renderer: networkd
Storage Network Configuration
Dedicated Interfaces (No Routing)
# /etc/netplan/50-storage.yaml
network:
version: 2
renderer: networkd
ethernets:
# First storage interface
ens1f0:
addresses:
- 10.100.1.101/24
mtu: 9000
dhcp4: no
dhcp6: no
optional: false
# Optimize for storage
receive-checksum-offload: true
transmit-checksum-offload: true
tcp-segmentation-offload: true
generic-segmentation-offload: true
generic-receive-offload: true
large-receive-offload: false
# Second storage interface
ens1f1:
addresses:
- 10.100.2.101/24
mtu: 9000
dhcp4: no
dhcp6: no
optional: false
Apply configuration:
# Validate syntax
sudo netplan --debug generate
# Test (will revert after 120 seconds if not confirmed)
sudo netplan try
# Apply permanently
sudo netplan apply
Bond Configuration for HA
# /etc/netplan/50-storage-bond.yaml
network:
version: 2
renderer: networkd
ethernets:
ens1f0:
dhcp4: no
dhcp6: no
ens1f1:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- ens1f0
- ens1f1
addresses:
- 10.100.1.101/24
mtu: 9000
parameters:
mode: active-backup
primary: ens1f0
mii-monitor-interval: 100
fail-over-mac-policy: active
Bond modes:
-
active-backup- Active-passive failover (recommended for storage) -
802.3ad- LACP (requires switch support) -
balance-xor- Load balancing (use with caution for storage)
Traditional /etc/network/interfaces (Debian)
# /etc/network/interfaces
auto ens1f0
iface ens1f0 inet static
address 10.100.1.101
netmask 255.255.255.0
mtu 9000
# Optimize NIC
post-up ethtool -G ens1f0 rx 4096 tx 4096 || true
post-up ethtool -C ens1f0 rx-usecs 50 tx-usecs 50 || true
post-up ethtool -K ens1f0 tso on gso on gro on || true
# Prevent default route
post-up ip route del default via 10.100.1.1 dev ens1f0 || true
auto ens1f1
iface ens1f1 inet static
address 10.100.2.101
netmask 255.255.255.0
mtu 9000
post-up ethtool -G ens1f1 rx 4096 tx 4096 || true
post-up ethtool -C ens1f1 rx-usecs 50 tx-usecs 50 || true
post-up ethtool -K ens1f1 tso on gso on gro on || true
post-up ip route del default via 10.100.2.1 dev ens1f1 || true
MTU Configuration
# Test MTU end-to-end
ping -M do -s 8972 <storage_portal_ip>
# If fails, check each hop
# Reduce packet size until it works to find MTU limit
Important:
MTU 9000 must be configured on:
-
Host interfaces
-
All switches in path
-
Storage array ports