Linux 只保留有线网卡:禁用 WiFi 的持久化方案

一台跑着多个服务的 Linux 服务器,接了有线 + 两个 WiFi 网卡(一个 USB、一个 PCI),导致默认路由混乱、走 WiFi 的备份链路干扰稳定。需求很明确:禁用两个 WiFi 网卡,只保留有线,且重启后依然生效。

一、先做安全审计(重要)

动网卡前先确认当前 SSH 会话走的是哪条链路,否则一禁 WiFi 自己先掉线:

# 看默认路由(哪条是主链路)
ip route show default
# 看当前 SSH 会话来源
ss -tnp | grep ':22 '

本例 SSH 走的是有线(192.168.2.126),禁用 WiFi 安全。

二、禁用思路

光 ip link set down 不够,NetworkManager 会自动重连。要三层保障:

  1. 立即禁用:NM 停止管理 + 接口 down;
  2. NM 持久化:配置里让这两个设备不被管理;
  3. systemd 兜底:开机强制 down,防任何网络栈拉起来。

三、操作步骤

1. 立即禁用

sudo nmcli device set wlx60427f1bf8a1 managed no
sudo nmcli device set wlp1s0 managed no
sudo ip link set dev wlx60427f1bf8a1 down
sudo ip link set dev wlp1s0 down

2. NetworkManager 持久化

写 /etc/NetworkManager/conf.d/99-disable-wifi.conf,让 NM 重启后不再管理这两个设备:

[device]
match-device=interface-name:wlx60427f1bf8a1,wlp1s0
managed=0
sudo systemctl reload NetworkManager

顺手把 WiFi 连接的 autoconnect 关掉,双保险:

# 先拿连接 UUID
nmcli -t -f NAME,UUID connection show
sudo nmcli connection modify <UUID> autoconnect no

3. systemd 兜底服务(重启也生效的关键)

写 /etc/systemd/system/disable-wifi.service:

[Unit]
Description=Disable WiFi interfaces, keep only ethernet
After=network-pre.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'ip link set dev wlx60427f1bf8a1 down 2>/dev/null || true; ip link set dev wlp1s0 down 2>/dev/null || true'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable disable-wifi.service

四、验证

ip -br link show          # 有线 UP,两个 wifi DOWN
ip route show default     # 只剩有线的默认路由
ping -c2 网关             # 通,0% 丢包

重启后再次验证:两个 WiFi 仍为 DOWN,有线正常。

五、踩坑提醒

  • 先看 SSH 走哪条链路,这是最容易被忽略的翻车点;
  • 备份路由(WiFi 那条 metric 较高的 default)禁用后会消失,如果未来有线故障就没有兜底——这是有意为之,确认你接受;
  • 如果机器用 systemd-networkd 管有线,确认它不接管 WiFi(networkctl list 看状态),否则会被网络栈重新拉起。