How to Configure systemd-networkd on Debian 2026: Static IP, DHCP, Bridge & VLAN Setup

Table of Contents

Why Debian systemd-networkd Matters in 2026

Managing network configuration on Debian systemd networking 2026 has evolved significantly. With systemd-networkd becoming the preferred network management tool for servers, understanding how to configure static IP addresses, DHCP, bridges, and VLANs is essential for modern Debian deployments.

This comprehensive guide covers everything you need to know about Debian systemd networking 2026, from basic static IP configuration to advanced bridge and VLAN setups. Whether you’re migrating from the legacy `/etc/network/interfaces` method or setting up a fresh server, this tutorial provides step-by-step instructions with real-world examples.

Understanding Debian systemd Networking 2026 Architecture

Before configuring Debian systemd networking 2026, it’s important to understand the architecture. Debian offers three network management approaches:

  • systemd-networkd: Modern, lightweight, ideal for servers and minimal systems
  • NetworkManager: Desktop-oriented, handles Wi-Fi and complex scenarios automatically
  • ifupdown (legacy): Traditional `/etc/network/interfaces` method, increasingly deprecated

For Debian systemd networking 2026 on servers, systemd-networkd is the recommended choice because it:

  • Integrates natively with systemd services
  • Uses simple, declarative configuration files
  • Handles static and dynamic addressing efficiently
  • Supports advanced features like bridges, bonds, and VLANs

Step 1: Enable systemd-networkd on Debian 2026

First, ensure systemd-networkd and systemd-resolved are installed and enabled for proper Debian systemd networking 2026 functionality:

# Install systemd-networkd and systemd-resolved
sudo apt update
sudo apt install systemd-networkd systemd-resolved -y

Disable Legacy Networking Services

To avoid conflicts with Debian systemd networking 2026, disable old network managers:

# Disable ifupdown (legacy /etc/network/interfaces)
sudo systemctl disable --now networking.service

# If NetworkManager is running, disable it (servers only)
sudo systemctl disable --now NetworkManager.service

Enable systemd-networkd and systemd-resolved

# Enable and start systemd-networkd
sudo systemctl enable --now systemd-networkd.service

# Enable and start systemd-resolved for DNS
sudo systemctl enable --now systemd-resolved.service

Configure DNS Resolution

Point `/etc/resolv.conf` to systemd-resolved for proper DNS handling in Debian systemd networking 2026:

# Remove existing resolv.conf and create symlink
sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Verify DNS resolution:

resolvectl status

Step 2: Configure Static IP with systemd-networkd

Static IP configuration is a fundamental task for Debian systemd networking 2026. Here’s how to set it up:

Identify Your Network Interface

First, identify the network interface name:

# List all network interfaces
ip link

# Expected output shows interfaces like enp1s0, eth0, ens18, etc.

Create Static IP Configuration File

Create a `.network` file in `/etc/systemd/network/`. File names are processed in lexicographic order, so use numbered prefixes like `10-`, `20-`, etc.

Example for interface `enp1s0` with static IP `192.168.1.100/24`:

sudo nano /etc/systemd/network/10-static-enp1s0.network

Add this configuration for Debian systemd networking 2026:

[Match]
Name=enp1s0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1
DNS=8.8.8.8
Domains=example.local

Understanding the Configuration

  • [Match]: Identifies which interface this config applies to
  • [Network]: Defines network settings
  • Address: Static IP address with subnet mask (CIDR notation)
  • Gateway: Default gateway IP
  • DNS: DNS servers (can specify multiple)
  • Domains: Search domains for DNS resolution

Apply Static IP Configuration

# Restart systemd-networkd
sudo systemctl restart systemd-networkd

# Verify configuration
networkctl status enp1s0
ip addr show enp1s0
ip route

Your interface should now have the static IP assigned. Check with:

ping -c 4 8.8.8.8
ping -c 4 google.com  # Verify DNS works

Step 3: Configure DHCP with systemd-networkd

For dynamic IP addressing in Debian systemd networking 2026, DHCP configuration is straightforward:

Create DHCP Configuration File

sudo nano /etc/systemd/network/20-dhcp-enp1s0.network

Add this minimal configuration:

[Match]
Name=enp1s0

[Network]
DHCP=yes

Advanced DHCP Options for Debian systemd Networking 2026

For more control over DHCP behavior:

[Match]
Name=enp1s0

[Network]
DHCP=yes
IPv6AcceptRA=yes
LLCP=yes
EmitLLDP=yes

[DHCP]
UseDNS=yes
UseNTP=yes
UseDomains=yes
RouteMetric=100

This configuration:

  • Enables IPv6 Router Advertisements
  • Configures LLDP (Link Layer Discovery Protocol)
  • Uses DNS and NTP servers from DHCP
  • Sets route metric for multi-interface systems

Restart systemd-networkd:

sudo systemctl restart systemd-networkd
networkctl status enp1s0

Step 4: Configure Bridges for VMs and Containers

Bridges are essential for Debian systemd networking 2026 when running virtual machines or containers. They allow VMs to appear on the same network as the host.

Create Bridge Device

First, define the bridge device with a `.netdev` file:

sudo nano /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge

Attach Physical Interface to Bridge

sudo nano /etc/systemd/network/20-enp1s0-bridge.network
[Match]
Name=enp1s0

[Network]
Bridge=br0

Configure Bridge IP Address

sudo nano /etc/systemd/network/30-br0-network.network

For static IP on the bridge:

[Match]
Name=br0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1

Or for DHCP on the bridge:

[Match]
Name=br0

[Network]
DHCP=yes

Apply Bridge Configuration

sudo systemctl restart systemd-networkd
networkctl status
ip addr show br0

VMs and containers can now attach to `br0` and appear on the same network as your host—perfect for Debian systemd networking 2026 virtualization setups.

Step 5: Configure VLANs with systemd-networkd

VLAN configuration is another powerful feature of Debian systemd networking 2026. Here’s how to set up VLAN 10 on interface `enp1s0`:

Create VLAN Device

sudo nano /etc/systemd/network/10-vlan10.netdev
[NetDev]
Name=enp1s0.10
Kind=vlan

[VLAN]
Id=10

Configure VLAN Network

sudo nano /etc/systemd/network/20-vlan10.network
[Match]
Name=enp1s0.10

[Network]
Address=10.10.10.1/24

Configure Parent Interface (if needed)

sudo nano /etc/systemd/network/15-enp1s0.network
[Match]
Name=enp1s0

[Network]
VLAN=enp1s0.10

Restart systemd-networkd:

sudo systemctl restart systemd-networkd
ip addr show enp1s0.10

Step 6: Multiple Interfaces with Different Roles

For routers or multi-homed servers in Debian systemd networking 2026, you often need different configurations per interface:

Example: WAN (DHCP) and LAN (Static)

WAN interface (`enp1s0`) with DHCP:

sudo nano /etc/systemd/network/10-wan.network
[Match]
Name=enp1s0

[Network]
DHCP=yes

[DHCP]
RouteMetric=10

LAN interface (`enp2s0`) with static IP:

sudo nano /etc/systemd/network/20-lan.network
[Match]
Name=enp2s0

[Network]
Address=10.0.0.1/24
IPForward=yes

Enable IP Forwarding for Routing

For the system to route between interfaces:

# Create sysctl config
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-ipforward.conf

# Apply immediately
sudo sysctl --system

Configure NAT with nftables

To NAT LAN traffic through WAN:

sudo apt install nftables -y

# Create basic NAT rule
sudo nft add table nat
sudo nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
sudo nft add rule nat postrouting oifname "enp1s0" masquerade

# Save rules
sudo nft list ruleset | sudo tee /etc/nftables.conf

Step 7: Troubleshooting Debian systemd Networking 2026

When issues arise with Debian systemd networking 2026, these commands help diagnose problems:

Check Network Status

# Overall network status
networkctl

# Detailed status for specific interface
networkctl status enp1s0

# Show current IP addresses
ip addr

# Show routing table
ip route
ip -6 route  # IPv6 routes

View systemd-networkd Logs

# Recent systemd-networkd logs
journalctl -u systemd-networkd

# Follow logs in real-time
journalctl -u systemd-networkd -f

# Check systemd-resolved logs
journalctl -u systemd-resolved

Common Issues and Solutions

Issue: No IP address assigned

  • Verify interface name matches in `.network` file
  • Check no other network manager controls the interface
  • For DHCP, confirm DHCP server is reachable
  • Try static IP to isolate DHCP issues

Issue: DNS not resolving

# Check resolv.conf symlink
ls -la /etc/resolv.conf

# Should point to /run/systemd/resolve/stub-resolv.conf
# If not, recreate:
sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

# Check DNS settings
resolvectl status
resolvectl query google.com

Issue: Conflicting network managers

# List active network-related services
systemctl list-units --type=service | grep -E 'network|NetworkManager'

# Disable conflicting services
sudo systemctl disable --now NetworkManager
sudo systemctl disable --now networking.service

Migrating from /etc/network/interfaces to systemd-networkd

If you’re upgrading to Debian systemd networking 2026 from a legacy system, here’s the migration path:

Old Configuration Example

Legacy `/etc/network/interfaces`:

auto lo
iface lo inet loopback

auto enp1s0
iface enp1s0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 1.1.1.1 8.8.8.8

New systemd-networkd Equivalent

Create `/etc/systemd/network/10-enp1s0.network`:

[Match]
Name=enp1s0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1
DNS=8.8.8.8

Migration Steps

# 1. Backup old config
sudo cp /etc/network/interfaces /etc/network/interfaces.bak

# 2. Comment out interface in /etc/network/interfaces
sudo nano /etc/network/interfaces
# Comment the enp1s0 stanza

# 3. Create systemd-networkd config (as shown above)

# 4. Disable old networking service
sudo systemctl disable --now networking.service

# 5. Enable and start systemd-networkd
sudo systemctl enable --now systemd-networkd.service

# 6. Verify connectivity
ping -c 4 8.8.8.8

Best Practices for Debian systemd Networking 2026

Follow these best practices when implementing Debian systemd networking 2026:

  • Use numbered prefixes: Name files like `10-`, `20-`, `30-` to control processing order
  • One interface per file: Keep configurations separate for clarity
  • Document your configs: Add comments explaining non-obvious settings
  • Test before disabling old services: Ensure connectivity works before removing fallbacks
  • Use version control: Track `/etc/systemd/network/` in git for change history
  • Monitor logs after changes: Watch `journalctl -u systemd-networkd -f` when applying configs

Advanced Configurations: Bonding and Multiple VLANs

For high-availability setups in Debian systemd networking 2026, bonding (link aggregation) is essential:

Create Bond Device

sudo nano /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
MIIMonitorSec=1s
LACPTransmitRate=fast

Attach Physical Interfaces to Bond

sudo nano /etc/systemd/network/20-enp1s0-bond.network
[Match]
Name=enp1s0

[Network]
Bond=bond0

Repeat for second interface (`enp2s0`).

Configure Bond IP

sudo nano /etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1

IPv6 Configuration with systemd-networkd

IPv6 is first-class in Debian systemd networking 2026. Here’s a static IPv6 example:

sudo nano /etc/systemd/network/10-enp1s0-ipv6.network
[Match]
Name=enp1s0

[Network]
Address=2001:db8:1234::10/64
Gateway=2001:db8:1234::1
DNS=2001:4860:4860::8888
DNS=2001:4860:4860::8844
IPv6AcceptRA=no

For dual-stack (IPv4 + IPv6):

[Match]
Name=enp1s0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
Address=2001:db8:1234::10/64
Gateway=2001:db8:1234::1
DNS=1.1.1.1
DNS=2001:4860:4860::8888

Debian systemd Networking 2026 vs NetworkManager

When should you use Debian systemd networking 2026 vs NetworkManager?

Use systemd-networkd when:

  • Running servers or headless systems
  • You want minimal dependencies
  • Configurations are stable and rarely change
  • You prefer file-based declarative configs
  • Running containers, VMs, or cloud instances

Use NetworkManager when:

  • Running desktop or laptop systems
  • You need Wi-Fi management
  • Network configurations change frequently
  • You prefer GUI or TUI interfaces (nmtui)
  • Complex VPN setups are required

Never run both managing the same interface—choose one per system.

Conclusion: Mastering Debian systemd Networking 2026

You’ve now learned the complete Debian systemd networking 2026 configuration landscape, including:

  • Static IP and DHCP configuration
  • Bridge setup for virtualization
  • VLAN configuration for network segmentation
  • Multi-interface routing and NAT
  • Bonding for high availability
  • IPv6 dual-stack networking
  • Migration from legacy ifupdown

systemd-networkd is the modern standard for Debian systemd networking 2026 server deployments. Its declarative configuration style, integration with systemd, and powerful features make it ideal for everything from simple static IP setups to complex multi-VLAN router configurations.

Key takeaways:

  • Configuration files live in `/etc/systemd/network/`
  • Use `.network` files for existing interfaces, `.netdev` for virtual devices
  • Always test changes before removing fallback configurations
  • Monitor logs with `journalctl -u systemd-networkd`
  • Use `networkctl` for status and troubleshooting

To automate your server management workflows, explore our practical guide to Bash shell scripting for Debian server automation as well as our guides on Linux server security hardening.