
Fixing Tailscale SSH When the 100.x IP Doesn’t Respond
Why My Raspberry Pi Ghosted Me, I don't know
If you are running a modern Linux distribution like Fedora, Ubuntu, or Arch, you might encounter a deeply frustrating issue: your Wi-Fi connection to cellular/5G routers or customer premise equipment (CPE)—such as Baicells gateways—consistently drops every few minutes. Strangely, the exact same network works flawlessly on your Windows or Android devices.

If you are running a modern Linux distribution like Fedora, Ubuntu, or Arch, you might encounter a deeply frustrating issue: your Wi-Fi connection to cellular/5G routers or customer premise equipment (CPE)—such as Baicells gateways—consistently drops every few minutes. Strangely, the exact same network works flawlessly on your Windows or Android devices.
When you dive into the system logs using sudo dmesg | tail -n 20, you will likely spot loops of this specific, cryptic error string:
wlp0s20f3: deauthenticating from 48:bf:74:33:c7:bf by local choice (Reason: 3=DEAUTH_LEAVING)
The phrase "by local choice" means the router isn't kicking you off. Your Linux operating system is actively choosing to terminate the connection.
This deep dive explains why this happens and provides step-by-step solutions to fix it for good.
Standard home routers (like those from Netgear or ASUS) are highly forgiving of standard Linux networking behaviors. Cellular-based 5G/LTE gateways, however, use highly restrictive carrier-grade NAT (CGNAT) configurations, strict DHCP lease durations, and aggressive traffic monitoring.
Three specific background features in modern Linux distros trigger immediate disconnect loops on these gateways:
1. MAC Address Randomization: NetworkManager continuously alters your Wi-Fi adapter's hardware footprint during background scans to protect your privacy. Cellular gateways see a shifting identity mid-session, flags it as a configuration lease mismatch, and rejects the traffic, causing Linux to cleanly exit DEAUTH_LEAVING).
2. Connectivity Check Triggers: Systems like Fedora ping public infrastructure servers (e.g., fedoraproject.org) to test internet access. Cellular networks inherently suffer from sudden latency spikes or brief packet drops. If the ping fails or delays, Linux prematurely assumes the Wi-Fi connection is dead and intentionally drops the link to search for a better one.
3. IPv6 Transition Friction: Many cellular backhauls handle IPv6 translation natively but do not play nicely with how Linux processes dynamic local IPv6 network advertisements, forcing a local teardown of the profile interface.
Follow these steps sequentially to configure your network stack to safely cooperate with cellular gateways.
Instead of modifying global configuration templates that risk being overwritten during subsequent OS updates, apply these changes directly to your individual Wi-Fi connection profile.
Open your terminal and run the following commands (replace "comon" with your network's actual Wi-Fi SSID):
# Force the profile to always use your physical hardware address
sudo nmcli connection modify "comon" 802-11-wireless.cloned-mac-address permanent
# Explicitly disable the network manager's scanning randomization flag
sudo nmcli connection modify "comon" 802-11-wireless.mac-address-randomization 1
(Note: In NetworkManager's command-line interface syntax, passing a value of 1 forces randomization to "Never").
To isolate your network from unstable cellular IPv6 transitions, restrict this specific Wi-Fi profile strictly to stable IPv4 routing configurations:
sudo nmcli connection modify "comon" ipv6.method disabled
To stop your OS from dropping connections during minor 5G latency shifts, disable the system connectivity engine. Because Fedora manages system defaults within /usr/lib/, create a dedicated user-space override configuration file inside /etc/:
1. Open a new configuration file using a text editor:
sudo nano /etc/NetworkManager/conf.d/30-disable-connectivity.conf
2. Insert these exact configuration parameters into the empty file:
[connectivity]
enabled=false
3. Save and close the editor Ctrl+O, press Enter, then Ctrl+X).
To cleanly load your changes, restart the NetworkManager daemon, and force a fresh hardware handshake with the cellular gateway:
sudo nmcli connection down "comon"
sudo nmcli connection up "comon"
sudo systemctl restart NetworkManager
To ensure that your operating system successfully adopted your changes, execute these two diagnostic check commands.
NetworkManager --print-config | grep -A 2 "\[connectivity\]"
Expected Output:
[connectivity]
enabled=false
If enabled=false displays, the system will no longer drop your Wi-Fi interface over failed external server pings.
ip link show wlp0s20f3
(Replace wlp0s20f3 with your active wireless network interface name, which you can locate using ip link).
Expected Output:
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 50:e0:85:78:58:d9 brd ff:ff:ff:ff:ff:ff
Look closely at the hardware signature directly following link/ether. If it starts with a standard physical vendor code (like 50:e0:...) instead of a randomized private tracking address (typically starting with de:...), your true network card hardware profile is permanently active.
Your dmesg kernel streams will go quiet, the DEAUTH_LEAVING errors will stop, and your 5G wireless internet connection will remain solid and continuous.
Principal systems architect leading the vision of building scalable digital infrastructure for Africa through AI-first, community-powered innovation.
Similar architectural insights from the ecosystem.

Why My Raspberry Pi Ghosted Me, I don't know

Turn Your Raspberry Pi Into a Netflix-Style Media Server (Jellyfin + Cloudflare)

How African Companies Can Save 100+ Hours/Month Using AI Automation