非常游戏网
linux怎么配置静态路由表_linux添加永久路由命令【技巧】

linux怎么配置静态路由表_linux添加永久路由命令【技巧】

2026-03-13系统教程210478

Linux临时路由重启失效是设计使然,需通过发行版特定方式配置永久路由:RHEL/CentOS在/etc/sysconfig/network-scripts/route-接口名中写入“目标网络 via 网关”,Ubuntu/Debian在netplan YAML的routes下指定to、via、on-link字段,并正确应用。

route 命令加的路由重启就没了,怎么办

Linux 用 route addip route add 添加的路由默认都是临时的,系统重启、网络服务重载后自动消失。这不是 bug,是设计如此——内核路由表只管运行时状态,持久化得靠配置文件或启动脚本。

  • 临时加一条去 10.20.30.0/24192.168.1.1 的路由:ip route add 10.20.30.0/24 via 192.168.1.1
  • 验证是否生效:ip route show,别只看 route -n,后者不显示 IPv6 且格式老旧
  • 别把 ip route add/etc/rc.local 里硬塞——systemd 环境下它可能根本不执行,或执行时机早于网卡就绪

CentOS/RHEL 7+ 怎么写永久静态路由

红帽系(包括 Rocky、Alma)用的是 NetworkManager + ifcfg 配置驱动,永久路由必须写进网卡对应的 route-接口名 文件,不是改 /etc/sysconfig/network

  • 假设网卡是 ens192,就创建 /etc/sysconfig/network-scripts/route-ens192
  • 内容写成两列:目标网络 + via 网关,例如:10.20.30.0/24 via 192.168.1.1(不能带 dev,会报错)
  • 改完必须重启网络服务:nmcli connection reload && nmcli connection down ens192 && nmcli connection up ens192,直接 systemctl restart NetworkManager 不保证生效
  • 如果用了 nmcli 手动管理连接,路由得用 nmcli connection modify ens192 +ipv4.routes "10.20.30.0/24 192.168.1.1",再 nmcli connection reload

Ubuntu/Debian 的 netplan 怎么配永久路由

netplan 是声明式配置,路由必须嵌套在对应网卡的 routes 列表里,而且得明确指定 toviaon-link(必要时)三个字段,漏一个就加载失败。

PPT.AI

AI PPT制作工具

  • 编辑 /etc/netplan/01-netcfg.yaml,在对应网卡下加:
    routes:
      - to: 10.20.30.0/24
        via: 192.168.1.1
        on-link: true
  • on-link: true 表示网关和本机在同一子网,不查 ARP 缓存;如果网关不在直连网段(比如走隧道或 VLAN),就得删掉这行,否则路由不生效
  • 写完必须跑 sudo netplan apply,别只 sudo netplan generate —— 那只是生成中间文件,不实际下发
  • 如果报 Invalid value for routes,大概率是缩进不对(YAML 对空格敏感)或用了 tab 键

跨网段下一跳不可达时路由为啥不报错

Linux 内核加路由时只校验语法和格式,不验证 via 地址是否真能 ping 通。结果就是路由表里有条“合法但废”的路由,发包时卡在 ARP 请求超时,表现为连接 hang 住或秒断。

  • 加路由前先确认下一跳可达:ping -c2 192.168.1.1 && arp -n | grep 192.168.1.1
  • 如果下一跳是另一台 Linux,检查它是否开了 ip_forward=1sysctl net.ipv4.ip_forward),否则不会转发
  • 某些云环境(AWS/Azure)里,安全组或 NSG 会拦截 ICMP 和转发流量,即使路由和内核参数都对,也不通
  • ip route get 10.20.30.100 查真实选路结果,比 ip route show 更可靠——它模拟发包路径,能暴露下一跳不可达问题

实际配的时候,最常卡在「以为写对了配置,其实 netplan 缩进错两格」或者「RHEL 里 route-xxx 文件名拼错了接口名」,这两处没提示,只能手动核对。