openSUSE YaST Network Module: Unified Config with ifupdown2 Trade-offs
YaST's network module centralizes static, bonded, and VLAN config in /etc/sysconfig/network using ifupdown2. It simplifies rollback but introduces boot-time races with bonds and conflicts with NetworkManager if not disabled.
18 Jul 2026, 05:50 UTC

The problem: fragmented network tooling on Linux
Most Linux admins have fought the battle between ip, nmcli, netplan, and distribution-specific scripts. openSUSE's YaST network module attempts to unify this by offering both a curses GUI (yast2 network) and a command-line interface that write to a single configuration tree under /etc/sysconfig/network/. The module handles static IPs, DHCP, VLANs, bonding, and teaming without requiring you to memorize syntax for each subsystem.
How YaST stores and applies configuration
YaST's engineering decision is to keep configuration in plain-text ifcfg-* files under /etc/sysconfig/network/ and delegate interface bring-up to the ifupdown2 backend (a rewrite of Debian's ifupdown in Python). This design has two practical consequences:
- Rollback is trivial: copy the directory before changes, restore if something breaks.
- Kernel-version independence: ifupdown2 uses standard
ipandethtoolcalls, so a kernel upgrade rarely invalidates the config.
The trade-off is that ifupdown2 still brings interfaces up sequentially during boot. When you define a bond with multiple slaves, a race can leave one slave DOWN long enough for the bond to come up without it. The workaround is to add BONDING_OPTS="mode=active-backup miimon=100" and ensure STARTMODE=auto on each slave, but the timing window remains.
Worked example: creating an active-backup bond with YaST
Assume a fresh openSUSE Leap 15.6 install with two physical NICs (eth0, eth1) and NetworkManager disabled (systemctl disable --now NetworkManager).
- Launch the module:
sudo yast2 network(requires root). - In the Network Devices tab, select
eth0→ Edit → set Device Activation to At Boot Time → Next. - Repeat for
eth1. - Click Add → Bond → name it
bond0.- Bonding mode: Active Backup (mode 1).
- Assign slaves:
eth0,eth1. - IP configuration: static
192.168.10.50/24, gateway192.168.10.1.
- Finish and OK. YaST writes
/etc/sysconfig/network/ifcfg-bond0and updates the slave files.
# /etc/sysconfig/network/ifcfg-bond0 (generated)
BOOTPROTO='static'
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=active-backup miimon=100'
BONDING_SLAVE0='eth0'
BONDING_SLAVE1='eth1'
IPADDR='192.168.10.50/24'
STARTMODE='auto'
Verify the result:
ip addr show bond0
# Expected: bond0 UP, master eth0 eth1, inet 192.168.10.50/24
systemctl status network
# Should show "active (exited)" with no failed units
cat /etc/sysconfig/network/ifcfg-bond0
# Confirm the file matches the snippet above
Limitations and when to avoid YaST network
- NetworkManager conflict: If
NETWORKMANAGER=yesin/etc/sysconfig/network/config, YaST defers to NM and writes duplicateNetworkManagerconnection profiles. Disable NM first (yast2 network→ Global Options → uncheck NetworkManager). - Version drift: Leap 15.4 shipped YaST 4.3.x; 15.6 ships 4.5.x. Bonding syntax (
BONDING_SLAVE*vsBONDING_SLAVES) changed slightly. Always inspect the generatedifcfg-*files. - No hot-plug events: ifupdown2 does not react to udev events. For dynamic environments (docking stations, USB NICs), NetworkManager or systemd-networkd remains a better fit.
Actionable closing
Use YaST network when you want a single, version-controlled source of truth for static, bonded, or VLAN interfaces on openSUSE Leap or Tumbleweed. Disable NetworkManager, apply the config with yast2 network, then verify with ip addr show bond0 and systemctl status network. If you need roaming Wi-Fi or frequent hot-plug, keep NetworkManager and manage those interfaces separately—YaST will stay out of the way.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.