NVMe-TCP on Debian/Ubuntu - Network Configuration

Linux

Audience
Public
Product
FlashBlade
FlashArray
Technology Integrations
Linux
Source Type
Documentation

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