Introduzione a Systemd-Networkd su Debian e SysLinuxOS
La gestione della rete su sistemi Linux moderni si è evoluta significativamente negli ultimi anni. Su Debian/SysLinuxOS, uno degli strumenti più potenti e flessibili per la configurazione di rete è systemd-networkd, il demone di gestione rete integrato nell’ecosistema systemd.
A differenza degli strumenti tradizionali come ifupdown e il file /etc/network/interfaces, systemd-networkd offre una gestione dichiarativa, reattiva e altamente scalabile delle interfacce di rete. È particolarmente indicato per server, container e ambienti cloud dove la stabilità e la riproducibilità della configurazione sono fondamentali.
In questa guida esploreremo le funzionalità avanzate di systemd-networkd su Debian: dalla configurazione base fino a scenari complessi come VLAN, bonding, bridge e gestione di indirizzi statici multipli.
Prerequisiti
Prima di procedere con la configurazione avanzata, assicurati di soddisfare i seguenti requisiti:
- Un sistema Debian 13 o SysLinuxOS 13 aggiornato
- Accesso root o privilegi sudo
- Conoscenza base dei concetti di networking (IP, subnet, gateway)
- systemd versione 245 o superiore (verificabile con systemctl –version)
Verifica che systemd-networkd sia disponibile sul tuo sistema:
systemctl status systemd-networkd
Se il servizio non è attivo, abilitalo e avvialo:
sudo systemctl enable --now systemd-networkd
Attenzione: prima di migrare da ifupdown a systemd-networkd su un server remoto, è fondamentale pianificare un accesso di emergenza (console fisica o IPMI) per evitare di rimanere bloccati fuori dal sistema.
Struttura dei file di configurazione
systemd-networkd utilizza file di configurazione con estensione .network, .netdev e .link, posizionati nelle seguenti directory:
/etc/systemd/network/ — configurazioni locali (priorità alta)
/run/systemd/network/ — configurazioni temporanee runtime
/lib/systemd/network/ — configurazioni predefinite del sistema
I file vengono elaborati in ordine alfabetico/numerico, quindi è buona pratica utilizzare un prefisso numerico come 10-, 20- per controllare la precedenza.
Step 1: Configurazione base di un’interfaccia statica
Iniziamo con un esempio fondamentale: configurare un indirizzo IP statico sull’interfaccia eth0.
Crea il file /etc/systemd/network/10-eth0.network:
[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=8.8.8.8 DNS=1.1.1.1 Domains=example.local
La sezione [Match] definisce a quale interfaccia si applica la configurazione. Puoi usare criteri come Name, MACAddress, Driver o Type per un matching più preciso.
La sezione [Network] contiene i parametri di rete. Dopo aver creato il file, riavvia il servizio:
sudo systemctl restart systemd-networkd
Verifica la configurazione con:
networkctl status eth0
Step 2: Configurazione DHCP avanzata
systemd-networkd offre un client DHCP integrato con numerose opzioni di personalizzazione:
[Match] Name=eth0 [Network] DHCP=yes DNS=8.8.8.8 [DHCP] UseDNS=false UseNTP=true UseHostname=true RouteMetric=100 ClientIdentifier=mac
Con UseDNS=false ignoriamo i server DNS forniti dal DHCP (utile quando vogliamo usare DNS personalizzati). RouteMetric permette di gestire la priorità tra più interfacce di rete.
Step 3: Configurazione di una VLAN
Le VLAN sono fondamentali in ambienti aziendali e di virtualizzazione. Con systemd-networkd la configurazione richiede due file: uno .netdev per creare il dispositivo virtuale e uno .network per configurarlo.
Crea /etc/systemd/network/20-vlan100.netdev:
[NetDev] Name=vlan100 Kind=vlan [VLAN] Id=100
Poi crea /etc/systemd/network/20-vlan100.network per configurare la VLAN:
[Match] Name=vlan100 [Network] Address=10.0.100.1/24 Gateway=10.0.100.254
Infine, modifica la configurazione dell’interfaccia fisica per agganciarvi la VLAN:
[Match] Name=eth0 [Network] DHCP=yes VLAN=vlan100
Step 4: Configurazione del Network Bonding
Il bonding (o link aggregation) permette di combinare più interfacce fisiche per ottenere ridondanza o maggiore banda. Vediamo come configurare un bond in modalità active-backup:
Crea /etc/systemd/network/30-bond0.netdev:
[NetDev] Name=bond0 Kind=bond [Bond] Mode=active-backup MIIMonitorSec=1s UpDelaySec=2s DownDelaySec=2s
Configura le interfacce slave in /etc/systemd/network/30-eth0-bond.network:
[Match] Name=eth0 [Network] Bond=bond0
E analogamente per eth1. Poi configura l’interfaccia bond master:
[Match] Name=bond0 [Network] Address=192.168.1.50/24 Gateway=192.168.1.1 DNS=8.8.8.8
Step 5: Configurazione di un Bridge di rete
I bridge sono essenziali per la virtualizzazione con KVM/QEMU. Ecco come creare un bridge br0:
File /etc/systemd/network/40-br0.netdev:
[NetDev] Name=br0 Kind=bridge [Bridge] STP=yes ForwardDelaySec=4s
Aggancia l’interfaccia fisica al bridge in /etc/systemd/network/40-eth0-bridge.network:
[Match] Name=eth0 [Network] Bridge=br0
Configura il bridge con IP statico:
[Match] Name=br0 [Network] Address=192.168.1.10/24 Gateway=192.168.1.1 DNS=8.8.8.8
Step 6: Routing avanzato e Policy Routing
systemd-networkd supporta anche configurazioni di routing avanzate. Puoi aggiungere route statiche con la sezione [Route]:
[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 [Route] Gateway=10.0.0.1 Destination=172.16.0.0/12 Metric=200 Scope=global
Per configurazioni multi-homing con più gateway, puoi definire multiple sezioni [Route] nello stesso file .network.
Integrazione con systemd-resolved
systemd-resolved si integra nativamente con systemd-networkd per la gestione DNS. Abilita il servizio e configura il stub resolver:
sudo systemctl enable --now systemd-resolved sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Verifica la configurazione DNS con:
resolvectl status resolvectl query debian.org
Troubleshooting
Comando networkctl
Il principale strumento di diagnostica è networkctl. Ecco i comandi più utili:
- networkctl list — elenca tutte le interfacce con stato
- networkctl status — mostra lo stato generale della rete
- networkctl status eth0 — dettagli di una specifica interfaccia
- networkctl reload — ricarica la configurazione senza riavviare
Analisi dei log
I log di systemd-networkd sono accessibili tramite journald:
journalctl -u systemd-networkd -f journalctl -u systemd-networkd --since '10 minutes ago'
Per aumentare il livello di verbosità dei log, modifica il file /etc/systemd/networkd.conf:
[Network] SpeedMeter=yes LogLevel=debug
Problemi comuni e soluzioni
- Interfaccia non configurata: Verifica che il nome nel [Match] corrisponda esattamente all’interfaccia reale con ip link show
- Conflitto con NetworkManager: Disabilita NetworkManager se usi systemd-networkd: sudo systemctl disable –now NetworkManager
- VLAN non attiva: Assicurati che il modulo kernel 8021q sia caricato con lsmod | grep 8021q
- Bond non funzionante: Verifica con cat /proc/net/bonding/bond0 lo stato degli slave
- Bridge non forward: Controlla che ip_forward sia abilitato: sysctl net.ipv4.ip_forward
Verifica della connettività
Dopo ogni modifica, usa questi comandi per verificare la corretta applicazione della configurazione:
ip addr show ip route show ip -d link show bond0 bridge link show
Conclusione
systemd-networkd rappresenta una soluzione moderna, robusta e scalabile per la gestione del networking su Debian e SysLinuxOS. La sua architettura basata su file di configurazione dichiarativi lo rende ideale per ambienti di produzione, infrastrutture containerizzate e server ad alta disponibilità.
I vantaggi principali rispetto agli strumenti tradizionali includono:
- Gestione nativa di interfacce virtuali (VLAN, bond, bridge, tunnel)
- Integrazione perfetta con il resto dell’ecosistema systemd
- Configurazione reattiva agli eventi di sistema
- Logging centralizzato tramite journald
- Supporto nativo per IPv6 e configurazioni multi-homing complesse
Systemd-Networkd su Debian e SysLinuxOS

