Linux只允许一个有效默认网关,临时配置必须用sudo ip route replace default via 192.168.1.1 dev eth0(接口需UP且与网关同子网),永久配置依发行版而异:Ubuntu/Debian用Netplan写routes或gateway4字段,RHEL/CentOS需确认NetworkManager是否接管后再选nmcli或ifcfg修改,严禁多default路由,配置后须ping网关和外网并ip route get验证。

Linux 只允许一个有效的默认网关,强行加多个会互相覆盖,导致部分流量发不出去。临时配置用 ip route replace,永久生效得看发行版用什么网络管理工具——不是所有系统都认 GATEWAY= 这种写法。
临时设置默认网关:用 ip route replace,别用 route add
route 命令已废弃,不支持 IPv6、不处理 metric、在新版内核中行为不可靠。现在唯一推荐的临时方式是:
-
sudo ip route replace default via 192.168.1.1 dev eth0—— 无论原来有没有 default 路由,都会安全替换,不会残留重复项 - 接口名必须真实存在且 UP:
ip -br addr show | grep UP确认,比如ens33或enp0s3,不是凭空写的eth0 - 网关 IP 必须和该接口在同一子网:如果接口是
192.168.5.10/24,网关就不能是10.0.0.1 - 验证是否成功:
ip route show | grep default,输出应只有一行,且via和dev都对
Ubuntu/Debian(Netplan)永久配置:写 YAML,缩进错一个空格就失败
Netplan 是 Ubuntu 18.04+ 和新版 Debian 的默认后端,/etc/network/interfaces 里写 gateway 没用,除非你明确禁用了 Netplan。
- 找到配置文件:
/etc/netplan/*.yaml(常见如01-network-manager-all.yaml) - 在对应网口下添加(注意缩进必须是两个空格):
routes: - to: default via: 192.168.1.1 on-link: true或更简洁的gateway4: 192.168.1.1(仅 IPv4) - 应用:
sudo netplan apply;报错时加--debug看哪行 YAML 不合法 - 别碰
/etc/sysconfig/network或/etc/network/options——Netplan 完全不读这些
RHEL/CentOS/Fedora 永久配置:分清 NetworkManager 是否接管
很多 RHEL 系统默认用 NetworkManager 管理网卡,直接改 ifcfg-eth0 可能被忽略。
- 先查接管状态:
nmcli d show eth0 | grep GENERAL.STATE,如果是connected,说明 NM 在管 - 若 NM 接管:用
nmcli改(推荐):sudo nmcli c modify "System eth0" ipv4.routes "0.0.0.0/0 192.168.1.1",再sudo nmcli c down "System eth0" && sudo nmcli c up "System eth0" - 若不用 NM(
ONBOOT=yes且NM_CONTROLLED=no):编辑/etc/sysconfig/network-scripts/ifcfg-eth0,加一行GATEWAY=192.168.1.1,然后sudo ifdown eth0 && sudo ifup eth0 - 全局网关(不推荐):
/etc/sysconfig/network中设GATEWAY=192.168.1.1,但优先级低于接口级配置,容易被覆盖
验证与排障:别只看“加进去了”,要看“能不能发出去”
加完默认网关只是第一步,真正关键的是能否把包送出去并收到响应。
-
ping -c3 192.168.1.1:确认网关本身可达(物理层和二层通) -
ping -c3 8.8.8.8:跳过 DNS,验证三层转发是否正常 -
traceroute -n 8.8.8.8:看第一跳是不是你的网关,如果不是,说明路由没生效或被其他规则劫持 -
ip route get 8.8.8.8:强制查一次路由决策,输出里via后面必须是你设的网关 - 多网卡机器要特别小心:如果另一块网卡也配了
GATEWAY,重启后可能随机覆盖,必须删掉冗余项
最常被忽略的点是:网关地址和本地接口不在同一子网,或者配置文件里写了网关但没重启对应服务(比如改了 Netplan 却执行 systemctl restart networking,而这个服务在 Ubuntu 上根本不存在)。


















