Linux设静态IP需匹配发行版网络管理工具:Ubuntu 22.04+用Netplan+systemd-networkd,CentOS/RHEL 8+用NetworkManager+nmcli,Debian 11用ifupdown;接口名须用ip link show确认,不可沿用eth0。

Linux 设置静态 IP 不是“改一个文件就行”的事,关键看发行版用的是什么网络管理工具——systemd-networkd、NetworkManager 还是传统 /etc/network/interfaces,选错路径会导致配置不生效、重启后还原,甚至断网。
Ubuntu 22.04+(Netplan + systemd-networkd)怎么配静态 IP
新版 Ubuntu 默认用 Netplan 描述网络,后端实际由 systemd-networkd 执行。直接改 /etc/network/interfaces 或用 nmcli 都可能被忽略。
- 确认后端:运行
cat /etc/netplan/*.yaml,看renderer:字段是networkd还是NetworkManager - 编辑对应 YAML 文件(如
/etc/netplan/01-network-manager-all.yaml),把dhcp4: true改成dhcp4: false,并添加addresses:、gateway4:、nameservers: - 必须执行
sudo netplan apply—— 仅保存文件不生效;若报错,用sudo netplan generate查语法问题 - 常见坑:
addresses值必须带子网长度(如[192.168.1.100/24]),漏掉/24会静默失败
CentOS/RHEL 8+(NetworkManager + nmcli)如何避免重启失效
这些系统默认启用 NetworkManager,但很多人习惯去改 /etc/sysconfig/network-scripts/ifcfg-ens33,结果 NetworkManager 启动时会覆盖它。
- 优先用
nmcli:运行nmcli connection modify "System ens33" ipv4.method manual ipv4.addresses 192.168.1.50/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" - 必须关闭 DHCP 自动获取:
nmcli connection modify "System ens33" ipv4.ignore-auto-routes yes,否则网关可能被 DHCP 覆盖 - 最后启用变更:
nmcli connection down "System ens33" && nmcli connection up "System ens33" - 验证:用
ip addr show ens33看地址,ip route show看默认路由是否正确
Debian 11(传统 ifupdown)为什么改了 /etc/network/interfaces 没反应
Debian 11 默认仍用 ifupdown,但前提是 systemd-networkd 和 NetworkManager 都没接管该接口。如果它们正在运行,ifup 就会被绕过。
- 先停掉干扰项:
sudo systemctl stop systemd-networkd NetworkManager,再sudo systemctl disable systemd-networkd NetworkManager - 编辑
/etc/network/interfaces,确保包含:auto ens33 iface ens33 inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 114.114.114.114 - 运行
sudo ifdown ens33 && sudo ifup ens33,而不是只 reload - 注意:
netmask不能写成prefix(如/24),这是 ifupdown 的语法限制
最易被忽略的一点:所有配置都依赖接口名(如 ens33)准确无误。用 ip link show 确认当前活跃接口名,别凭记忆或旧文档硬写 eth0——现代系统基本不用这个命名了。

















