深入解析Linux下永久路由的配置与管理

张开发
2026/6/8 1:55:21 15 分钟阅读
深入解析Linux下永久路由的配置与管理
1. 为什么需要永久路由配置刚接触Linux网络管理时我也曾纳闷为什么用route命令添加的路由重启后就消失了后来在部署公司双网卡服务器时踩了坑才明白临时路由配置就像用粉笔在黑板上写字——断电擦黑板重启系统就没了。特别是当服务器需要同时连接内外网或者做网络隔离时永久路由就成了刚需。举个例子我们机房里那台跳板机就配了双网卡eth0接内网192.168.1.0/24eth1连外网10.0.0.0/8。有次机房断电重启后开发组突然反映无法通过跳板机访问测试环境。冲过去一查发现是通往192.168.2.0/24网段的路由丢了——因为之前只用route命令做了临时配置。这种场景下永久路由就像是刻在石板上的字系统重启多少次都不会消失。2. 临时路由的快速配置技巧2.1 route命令实战指南虽然临时路由不持久但在紧急排障时特别有用。route命令就像网络工程师的瑞士军刀先看几个经典用法# 添加主机路由直达某台机器 route add -host 192.168.1.100 dev eth0 route add -host 192.168.1.200 gw 192.168.1.1 # 添加网络路由通往整个网段 route add -net 172.16.0.0/16 gw 10.0.0.1 route add -net 192.168.100.0 netmask 255.255.255.0 dev eth1 # 设置默认网关最后的出口 route add default gw 203.0.113.1上周我就用这些命令救了火公司NAS存储突然无法备份排查发现是备份网络172.17.0.0/16的路由被覆盖了。紧急用route add -net 172.17.0.0/16 gw 172.17.0.1恢复了通路这才有时间排查根本原因。2.2 路由查看与删除配置完总要验货吧route -n命令用数字格式显示路由表比纯IP看着清爽$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 203.0.113.1 0.0.0.0 UG 100 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1删路由就像拆错建的桥命令和添加时类似只是把add换成delroute del -net 192.168.100.0/24 route del default gw 203.0.113.13. 永久路由配置全攻略3.1 /etc/sysconfig/static-routes详解想让路由配置熬过重启static-routes文件就是你的救星。这个藏在/etc/sysconfig目录下的配置文件工作原理很有意思——它其实是被network服务调用的脚本食材。文件格式长这样any net 10.8.0.0/24 gw 10.8.0.1 any net 192.168.100.0 netmask 255.255.255.0 gw 192.168.100.254重点来了每行开头必须是any然后是net指定网络可以用CIDR格式/24或传统netmask最后用gw指明网关。我习惯把重要路由写在文件顶部就像这样# 核心业务网络 any net 172.18.0.0/16 gw 172.18.0.1 # 备份专用通道 any net 10.10.0.0/24 gw 10.10.0.2543.2 不同发行版的适配技巧注意这个文件在CentOS/RHEL系和Debian/Ubuntu系的位置可能不同RHEL/CentOS/etc/sysconfig/static-routesDebian/Ubuntu/etc/network/interfaces 内添加post-up命令比如在Ubuntu下要这样写auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 post-up route add -net 10.0.0.0/8 gw 192.168.1.1曾经给客户迁移服务器时我把CentOS的static-routes文件原样拷贝到Ubuntu结果路由死活不生效。折腾半天才发现这个差异血泪教训啊4. 高级场景与故障排查4.1 多网卡复杂路由配置当服务器配有3块以上网卡时路由配置就像指挥交通得明确哪些流量走哪条道。这是我们生产环境某台服务器的真实配置# 管理网络 any net 192.168.0.0/16 gw 192.168.0.1 # 存储网络 any net 172.16.0.0/12 gw 172.16.0.1 # 业务网络 any net 10.0.0.0/8 gw 10.0.0.1关键技巧是路由优先级越精确的路由如/24优先级高于模糊路由如/16。可以用ip route show查看详细指标$ ip route show default via 203.0.113.1 dev eth0 proto static metric 100 10.0.0.0/8 via 10.0.0.1 dev eth1 proto static metric 200 172.16.0.0/12 via 172.16.0.1 dev eth2 proto static metric 3004.2 常见坑点排查指南去年我们遇到过灵异事件配置好的路由时灵时不灵。最后发现是NetworkManager在搞鬼——它和传统network服务会冲突。解决方案要么彻底禁用NetworkManagersystemctl stop NetworkManager systemctl disable NetworkManager要么统一用nmcli配置路由nmcli connection modify eth0 ipv4.routes 192.168.100.0/24 192.168.100.1还有个隐蔽的坑防火墙可能屏蔽路由协议。有次配置完路由发现跨网段不通tcpdump抓包才发现是firewalld拦了ICMP重定向。加条规则就解决了firewall-cmd --add-icmp-block-inverseredirect --permanent firewall-cmd --reload5. 持久化路由的替代方案5.1 network-scripts目录大法除了static-routes老司机们还喜欢在/etc/sysconfig/network-scripts/下创建route-interface文件。比如给eth0配置永久路由# /etc/sysconfig/network-scripts/route-eth0 192.168.200.0/24 via 192.168.200.1 10.5.0.0/16 via 10.5.0.1这种写法的优点是每条路由独立成行不用写any net前缀。重启网络服务时这些配置会被自动加载systemctl restart network5.2 开机脚本方案在不确定系统管理网络的方式时我有个土办法把route命令写入/etc/rc.local。比如#!/bin/bash route add -net 172.18.0.0/16 gw 172.18.0.1 exit 0记得给文件可执行权限chmod x /etc/rc.local。虽然不够优雅但在某些老旧系统上特别管用。不过要注意现代Linux系统可能默认禁用rc.local需要先启用服务systemctl enable rc-local systemctl start rc-local6. 路由配置的监控与维护6.1 路由状态监控命令配置完路由不是就完事了得定期体检。除了基础的route -n这些命令更强大# 显示详细路由指标包括MTU、窗口大小等 ip route show table all # 追踪数据包实际路径 traceroute -n 8.8.8.8 # 持续监控路由变化类似top watch -n 1 route -n有次发现某台服务器访问OA系统特别慢用mtr -n oa.company.com一查发现流量竟然绕道了海外节点。原来是错误的路由配置导致流量走了VPN隧道。6.2 路由配置备份策略路由配置也该纳入备份范围。我习惯用这个脚本定期备份#!/bin/bash BACKUP_DIR/var/backups/network mkdir -p $BACKUP_DIR date$(date %Y%m%d) route -n $BACKUP_DIR/routes_$date.txt ip route show $BACKUP_DIR/ip_routes_$date.txt cp /etc/sysconfig/static-routes $BACKUP_DIR/static-routes_$date.bak find $BACKUP_DIR -type f -mtime 30 -delete把这个脚本加入cron每周自动运行0 3 * * 0 /usr/local/bin/backup_routes.sh7. 虚拟化环境下的路由配置7.1 Docker容器网络路由当Linux主机跑Docker时路由表会变得复杂。比如创建bridge网络后默认会增加这样的路由172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1如果需要容器访问外部特定网络可以这样操作# 在宿主机添加路由 ip route add 192.168.99.0/24 via 172.17.0.2 # 永久化配置 echo any net 192.168.99.0/24 gw 172.17.0.2 /etc/sysconfig/static-routes7.2 KVM虚拟机的路由穿透公司测试环境有台KVM虚拟机需要直连研发网络解决方案是在宿主机配置路由并开启转发# 添加路由 ip route add 10.99.0.0/24 via 192.168.122.100 # 开启IP转发 echo net.ipv4.ip_forward1 /etc/sysctl.conf sysctl -p # 配置NAT规则如果需要 iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE这些配置同样需要持久化。对于iptables规则可以用iptables-save /etc/sysconfig/iptables保存CentOS或安装iptables-persistent包Debian。

更多文章