How To Disable NetworkManager on Fedora 44

Disable NetworkManager on Fedora 44

NetworkManager is the default network management daemon that ships with Fedora 44. It does a great job on desktops and laptops where Wi-Fi networks change constantly. But on a headless server, a homelab box, or a production environment with a static IP, NetworkManager often creates more problems than it solves — overwriting your /etc/resolv.conf, adding boot delays through NetworkManager-wait-online.service, and sometimes conflicting with tools like cPanel or custom network bridges.

This guide shows you exactly how to disable NetworkManager on Fedora 44 and replace it with systemd-networkd, which is lighter, more predictable, and already built into every Fedora installation. You will get step-by-step commands, an explanation of what each command does and why it matters, and a full troubleshooting section at the end.

Whether you are running a Fedora 44 VPS, a bare-metal homelab server, or a minimal install you want to keep clean, this Linux server tutorial walks you through the entire process safely.

What Is NetworkManager and Why Does It Cause Problems on Servers?

NetworkManager is a daemon built for dynamic network environments. It monitors available connections, automatically switches between Wi-Fi networks, manages VPN tunnels, and handles hotspot configurations. For a developer on a laptop, those features are genuinely useful.

On a server, those same features become liabilities. NetworkManager polls for network changes constantly, adds services to the boot sequence that can stall startup by 15 to 20 seconds, and occasionally rewrites DNS configuration files that you have manually set. If you have ever configured a static IP on Fedora only to find it partially working after a reboot, there is a good chance NetworkManager quietly changed something.

The alternative, systemd-networkd, is part of the systemd project and ships with Fedora 44 by default. It reads simple .network configuration files, applies them at boot, and then stays out of the way. No polling. No background management. No surprises.

Here is a quick comparison to help you decide which tool fits your situation:

Feature NetworkManager systemd-networkd
Wi-Fi and WLAN support Full support Not supported natively
Boot time impact Adds 15-20 seconds Minimal
Static IP configuration Can conflict Reliable and clean
DNS management Automatic Manual via systemd-resolved
Best for Desktop / Laptop Server / Headless system
Memory footprint Higher Very low

If your system is a server or does not need Wi-Fi management, systemd-networkd is the right tool. The rest of this guide assumes that is your situation.

Prerequisites

Before you run a single command, gather the following information and make sure your environment is ready. Skipping this step is the most common reason a server ends up unreachable after a network service change.

System requirements:

  • Fedora 44 installed (Server, Minimal, or Workstation spin)
  • Root access or a user account with full sudo privileges
  • systemd-networkd package (pre-installed on Fedora 44)
  • Physical console access, a VM snapshot, or a second SSH session open as a safety net

Information to collect before starting:

  • Your current network interface name (e.g., enp1s0, eth0)
  • Your current IP address (static or DHCP)
  • Your default gateway
  • Your DNS server addresses

Run these three commands right now and save the output somewhere:

ip addr show
ip route show
cat /etc/resolv.conf

Also run this to see all NetworkManager connection profiles:

nmcli connection show

Save everything to a text file:

nmcli connection show > ~/nm-backup.txt
ip addr show >> ~/nm-backup.txt
ip route show >> ~/nm-backup.txt
cat /etc/resolv.conf >> ~/nm-backup.txt

This backup file is your safety net. If something goes wrong, you have the exact configuration needed to restore connectivity manually.

Step 1: Update Your Fedora 44 System Before Making Changes

Always update your system before making changes to core services. This prevents a scenario where a pending update to a NetworkManager package undoes your work right after you complete it.

sudo dnf update -y

Why this matters: Package updates can re-enable or restart services. Running dnf update first means you are starting from a clean, current state and no pending NM update will interfere after you disable it.

After the update completes, reboot if the kernel was updated:

sudo reboot

Once your system is back online, confirm you are running Fedora 44:

cat /etc/os-release

Expected output:

NAME="Fedora Linux"
VERSION="44 (Server Edition)"

Step 2: Check the Current Status of NetworkManager

Before you stop NetworkManager, confirm it is actually running and note its current state. This gives you a clear before-and-after reference point.

systemctl status NetworkManager

Expected output:

● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; preset: enabled)
     Active: active (running) since ...

The key fields here are enabled and active (running). Both will change after you complete this tutorial.

Also check which network interfaces NetworkManager currently manages:

nmcli device status

Expected output:

DEVICE   TYPE      STATE      CONNECTION
enp1s0   ethernet  connected  Wired connection 1
lo       loopback  unmanaged  --

Note the DEVICE name in the first column, in this example enp1s0. You will need this exact name later when creating a systemd-networkd configuration file. Every system uses a different interface name, so do not assume yours matches this example.

Step 3: Configure systemd-networkd BEFORE Stopping NetworkManager

This is the most important step in the entire process. Configure your replacement network service first, before you touch NetworkManager. If you stop NetworkManager without a working replacement in place, your server will immediately lose network connectivity. On a remote server, that means a locked-out machine.

Step 3.1: Unmask systemd-networkd

On some Fedora 44 installs, systemd-networkd is masked by a system preset that favors NetworkManager. Unmask it first so you can enable and start it.

sudo systemctl unmask systemd-networkd

Why: A masked service is linked to /dev/null. Even systemctl enable fails on a masked service. Unmasking restores the normal service unit file so systemd can use it.

Step 3.2: Create a .network Configuration File

The .network file tells systemd-networkd how to configure your network interface. Create it now, before disabling NM, and use the interface name you recorded in Step 2.

sudo mkdir -p /etc/systemd/network
sudo nano /etc/systemd/network/10-eth0.network

For a static IP setup, paste the following and replace the values with your actual network settings:

[Match]
Name=enp1s0

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

For DHCP, use this instead:

[Match]
Name=enp1s0

[Network]
DHCP=ipv4

Save the file: press Ctrl+O, then Enter, then Ctrl+X.

Why the [Match] section matters: systemd-networkd applies .network files based on the Name= value in the [Match] block. If the name does not exactly match your real interface name, the file is silently ignored and your interface gets no IP address after NM is gone.

Step 3.3: Set Up systemd-resolved for DNS

When NetworkManager is running, it writes DNS server addresses to /etc/resolv.conf automatically. Once NM is gone, nothing writes to that file unless you set up a replacement. systemd-resolved handles DNS resolution and integrates cleanly with systemd-networkd.

Enable and start it now:

sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

Then create the symlink that tells the system to use systemd-resolved for all DNS lookups:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Why the symlink is required: Most applications read DNS servers from /etc/resolv.conf. By pointing this file to systemd-resolved‘s stub resolver, all DNS queries route through systemd-resolved correctly. Without this step, DNS lookups fail even when the network interface itself is fully configured.

Step 3.4: Enable and Start systemd-networkd

Now bring systemd-networkd online:

sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

Why enable AND start: enable adds systemd-networkd to the boot sequence so it runs automatically after every reboot. start brings it online right now in the current session without requiring a reboot, so you can verify it works immediately.

Confirm it is running:

systemctl status systemd-networkd

Expected output:

● systemd-networkd.service - Network Configuration
     Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled)
     Active: active (running)

Step 4: Stop NetworkManager

With systemd-networkd now running and your .network file in place, it is safe to stop NetworkManager. Your interface should remain configured because systemd-networkd already owns it.

sudo systemctl stop NetworkManager

Why this is safe now: systemd-networkd has already applied the IP configuration from your .network file. Stopping NM does not drop your connection because a different service is now managing the interface.

Verify your connection is still active after stopping NM:

ip addr show
ping -c 3 google.com

If both commands succeed, your IP address is intact and DNS is working. You can proceed to the next step with confidence.

Step 5: Disable NetworkManager at Boot

stop only kills NM for the current session. On the next reboot, systemd will start it again because it is still enabled. Remove it from the boot sequence with disable.

sudo systemctl disable NetworkManager

Also disable the companion service that causes boot delays:

sudo systemctl disable NetworkManager-wait-online.service

Why disable NetworkManager-wait-online.service separately: This service waits for NetworkManager to bring interfaces online before other services can start. Without NetworkManager running, this service either stalls or causes a timeout that delays your boot by 15 to 20 seconds. Disabling it separately is required because it has its own systemd unit file.

Verify both are disabled:

systemctl is-enabled NetworkManager
systemctl is-enabled NetworkManager-wait-online.service

Both commands should return disabled.

Step 6: Mask NetworkManager to Prevent Any Accidental Restart

disable removes the autostart symlink, but NM can still start if another service or a package update triggers it. On a production server, that is unacceptable. Masking goes one level further.

sudo systemctl mask NetworkManager

Why masking is the final lock: mask replaces the service unit with a symlink to /dev/null. When systemd sees a unit file pointing to /dev/null, it refuses to start that service under any circumstances, regardless of what triggers it. Even sudo systemctl start NetworkManager will fail with a clear error.

Also mask the dispatcher service, which runs scripts in response to NM network events:

sudo systemctl mask NetworkManager-dispatcher.service

Verify the masked state:

systemctl status NetworkManager

Expected output:

● NetworkManager.service
     Loaded: masked (/dev/null; masked)
     Active: inactive (dead)

Step 7: Verify the Complete Network Configuration

With NetworkManager disabled and masked and systemd-networkd running, do a full verification before you close your terminal session.

Step 7.1: Check Interface Status with networkctl

networkctl list

Expected output:

IDX LINK    TYPE     OPERATIONAL SETUP
  1 lo      loopback carrier     unmanaged
  2 enp1s0  ether    routable    configured

The configured status in the SETUP column means systemd-networkd successfully applied your .network file. If you see unmanaged, the interface name in your .network file does not match the real interface name.

For detailed interface information:

networkctl status enp1s0

Step 7.2: Verify IP Address and Default Gateway

ip addr show
ip route show

Confirm the IP address matches what you configured in your .network file and that the default gateway is correct.

Step 7.3: Test DNS Resolution

resolvectl query google.com
ping -c 3 google.com

Both commands must succeed. resolvectl query tests DNS resolution through systemd-resolved. ping tests end-to-end connectivity including routing. If ping works but resolvectl query fails, the /etc/resolv.conf symlink from Step 3.3 needs to be re-applied.

How to Keep a Specific Interface Unmanaged Without Disabling NetworkManager Entirely

Some users want NetworkManager to keep managing Wi-Fi but want to remove its control from a specific Ethernet interface, for example a dedicated NIC used for a VM bridge or a server VLAN. You can do that without fully disabling NM.

Create a drop-in configuration file:

sudo nano /etc/NetworkManager/conf.d/99-unmanaged-devices.conf

Add the following, replacing enp2s0 with your interface name:

[device-enp2s0-unmanaged]
match-device=interface-name:enp2s0
managed=0

Save and reload NetworkManager:

sudo systemctl reload NetworkManager

Why this works: NetworkManager reads all .conf files from /etc/NetworkManager/conf.d/ at startup and when reloaded. Setting managed=0 tells it to skip that interface entirely, leaving kernel-level or systemd-networkd control in place for that NIC while NM continues managing everything else.

For a quick temporary test without persistence:

sudo nmcli device set enp2s0 managed no

This setting disappears after a reboot unless backed by the .conf file above.

Troubleshooting: Common Errors When Disabling NetworkManager on Fedora 44

Error 1: Interface Shows “unmanaged” in networkctl list

Symptom: networkctl list shows your interface as unmanaged with no IP address.

Cause: The Name= value in your .network file does not match the real interface name.

Fix: Run ip link show to get the exact interface name, then edit your .network file to match:

ip link show
sudo nano /etc/systemd/network/10-eth0.network
sudo systemctl restart systemd-networkd

Error 2: No IP Address After Reboot

Symptom: System boots, but ip addr show shows no IP on your main interface.

Cause: Your .network file is in the wrong directory, or systemd-networkd is not enabled.

Fix:

ls /etc/systemd/network/
systemctl is-enabled systemd-networkd
sudo systemctl enable --now systemd-networkd

Error 3: DNS Stops Resolving After Disabling NetworkManager

Symptom: ping 8.8.8.8 works but ping google.com fails.

Cause: /etc/resolv.conf is no longer managed by NM and the systemd-resolved symlink is broken or missing.

Fix:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
resolvectl query google.com

Error 4: SSH Session Drops When Stopping NetworkManager

Symptom: Running sudo systemctl stop NetworkManager immediately kills your SSH connection.

Cause: You stopped NM before systemd-networkd was configured. NM removed the IP assignment from the interface when it stopped, and no replacement service reapplied it.

Fix: If you have console access, configure and start systemd-networkd first, then stop NM. Always complete Steps 3 and 4 in that exact order.

Error 5: NetworkManager Restarts After a dnf Update

Symptom: After sudo dnf update, NetworkManager is running again even though you disabled it.

Cause: You disabled NM but did not mask it. A package update triggered a service restart via a post-install scriptlet.

Fix:

sudo systemctl stop NetworkManager
sudo systemctl mask NetworkManager
sudo systemctl mask NetworkManager-dispatcher.service

How To Roll Back and Re-enable NetworkManager on Fedora 44

If something goes wrong or your use case changes and you need NetworkManager back, here is the complete rollback procedure. Run these commands from a console or an active SSH session that still has connectivity.

sudo systemctl unmask NetworkManager
sudo systemctl unmask NetworkManager-dispatcher.service
sudo systemctl enable --now NetworkManager
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd

Then restore DNS management to NetworkManager:

sudo rm /etc/resolv.conf
sudo systemctl restart NetworkManager

Why remove /etc/resolv.conf first: NetworkManager regenerates this file automatically when it starts, but only if the file does not already exist or is not a symlink pointing elsewhere. Removing the systemd-resolved symlink clears the path for NM to write fresh DNS settings.

After NM restarts, verify it is managing your interface again:

nmcli device status
ip addr show

VPS Manage Service Offer
If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal!
r00t is a Linux Systems Administrator and open-source advocate with over ten years of hands-on experience in server infrastructure, system hardening, and performance tuning. Having worked across distributions such as Debian, Arch, RHEL, and Ubuntu, he brings real-world depth to every article published on this blog. r00t writes to bridge the gap between complex sysadmin concepts and practical, everyday application — whether you are configuring your first server or optimizing a production environment. Based in New York, US, he is a firm believer that knowledge, like open-source software, is best when shared freely.

Related Posts