linux配置网关核心是明确外部流量出口:临时用ip route replace default via x dev y立即生效,永久则依发行版选netplan(ubuntu/debian)、ifcfg文件(rhel/centos)或network-scripts,严禁多default路由,须验证可达性与配置优先级。

Linux 中配置网关,核心就一条:让系统知道“发往外部网络的数据该交给谁”。临时改用 ip route,永久生效得写进配置文件——但具体写哪、怎么写,取决于你用的是什么发行版和网络管理工具。
用 ip route 临时添加或替换默认网关
这是最常用、最安全的调试方式,命令立即生效,重启即丢,适合验证网关是否可达。
- 先确认接口名和网关 IP:
ip -br addr show找状态为UP的接口(如eth0、ens33),再核对网关是否和该接口在同一子网(例如接口是192.168.1.10/24,网关就得是192.168.1.x) - 添加新默认路由(不检查是否有旧的):
sudo ip route add default via 192.168.1.1 dev eth0 - 更推荐用
replace替换已有 default 路由,避免重复:sudo ip route replace default via 192.168.1.1 dev eth0 - 删掉当前 default 路由:
sudo ip route del default - 验证结果:
ip route show | grep default—— 输出应只有一行,且via后是正确网关,dev后是正确接口
⚠️ 注意:route 命令虽还能用(如 sudo route add default gw 192.168.1.1),但它已废弃,不支持 IPv6、无法指定 metric、在新版内核中行为不稳定,别在新环境里依赖它。
Ubuntu/Debian(Netplan)下永久配置网关
Netplan 是 Ubuntu 18.04+ 和新版 Debian 的默认后端,配置必须写 YAML,语法敏感,缩进错一个空格就 netplan apply 失败。
- 找到配置文件:
/etc/netplan/*.yaml(常见如00-installer-config.yaml或01-network-manager-all.yaml) - 在对应网口段(如
ethernets: eth0:)下添加:gateway4: 192.168.1.1(仅 IPv4)或更通用的routes:块(支持 metric、on-link 等) - 保存后执行:
sudo netplan apply—— 不需要重启服务,也不要用systemctl restart NetworkManager,那反而可能中断连接 - 如果报错,用
sudo netplan --debug apply看具体哪行 YAML 有问题
⚠️ 注意:Netplan 不认 GATEWAY=xxx 这种老式变量;也别往 /etc/network/interfaces 里写(除非你明确禁用了 Netplan 并切回 ifupdown)。
RHEL/CentOS/Fedora(network-scripts 或 NetworkManager)下永久配置
这些系统仍广泛使用 ifcfg- 文件,但要注意 NetworkManager 是否接管了该接口——若 ONBOOT=yes 且没设 NM_CONTROLLED=no,NetworkManager 会忽略 ifcfg- 里的 GATEWAY。
- 编辑接口配置:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 - 添加或修改两行:
GATEWAY=192.168.1.1和DEFROUTE=yes(确保此接口被当作默认出口) - 如果该接口由 NetworkManager 管理,还需确认
NM_CONTROLLED=yes(默认值),然后重启 NM:sudo systemctl restart NetworkManager - 若不用 NetworkManager,可改用传统方式:
sudo ifdown eth0 && sudo ifup eth0,或sudo systemctl restart network
⚠️ 注意:/etc/sysconfig/network 中的 GATEWAY= 在较新版本中已被弃用,仅作为 fallback,优先级低于接口配置文件中的设置。
多网关场景下为什么不能硬写多个 default via
Linux 内核只允许一条 active 的 default 路由。如果你强行加两条(比如通过脚本或错误配置),ip route show 会显示它们,但实际选路时只用 metric 最小的那条;metric 相同时,行为不可预测,容易导致部分外网不通、DNS 解析失败。
- 真要走多出口(如双宽带),应该用策略路由(policy routing):基于源地址、端口或 fwmark 拆流,配合
ip rule+ 多张路由表 - 日常运维中遇到“能 ping 通网关但上不了网”,第一反应不是换网关,而是查
ip route show有没有重复 default、有没有漏掉dev参数导致路由变成 on-link 错误 - 配置完务必测试:
ping -c3 192.168.1.1(网关)、ping -c3 8.8.8.8(外网)、curl -I https://httpbin.org/ip(应用层连通性)
网关配置本身不复杂,难的是判断“当前系统到底听谁的”——Netplan、NetworkManager、network-scripts、systemd-networkd 可能共存,先用 systemctl list-units | grep -E "(NetworkManager|network|systemd-networkd)" 确认主控服务,再动手改配置,省去一半排障时间。











