Linux命令-route查看/修改 IP 路由表 简介 语法⚙️ 选项 实战示例示例 1route -n 查看路由表最常用示例 2添加与删除路由示例 3route 与 ip route 对比示例 4持久化路由配置示例 5诊断网络不可达实战案例示例 6配合 traceroute 验证路由生效⚠️ 注意事项 总结 相关命令快速参考route命令用于查看与操作 Linux 内核的IP 路由表。它起源于 BSD 系统在 net-tools 工具包中是 Linux 早期管理网络路由的事实标准。但从 2009 年起net-tools 被标记为 deprecated官方推荐使用iproute2套件中的ip route命令。尽管如此由于历史脚本和老教材的影响route命令仍在生产环境中大量使用值得掌握以便兼容维护。RHEL 8 / CentOS 8 / Ubuntu 18.04 已不再默认安装net-tools需手动yum install net-tools或apt install net-tools。 简介项目说明命令全称route已废弃所属包net-toolsRHEL/CentOS 默认 / Ubuntu 新版需手动装现代替代ip routeiproute2套件配置文件/etc/sysconfig/network-scripts/route-IFACERHEL/etc/network/interfacesDebian/etc/iproute2/rt_tables策略路由表定义操作对象Linux 内核的路由表Routing Table默认行为显示路由表route等价于route -n配合netstat -rn权限查看普通用户即可修改需 root为什么会有多个路由表Linux 内核支持多路由表默认 0~255 共 256 张由/etc/iproute2/rt_tables定义。默认有local255本机地址main254默认主表default253默认兜底route命令只能操作 main 表要操作其他表需ip route show table 100或策略路由ip rule。 语法# 查看路由表route[-nNnee]# 显示route-6# IPv6 等价于 route -A inet6# 修改路由routeadd[-net|-host]TARGET[netmask MASK][gw GW][metric M][mss M][window W][irtt I][reject][mod][dyn][reinstate][[dev]Iface]route del[-net|-host]TARGET[netmask MASK][gw GW][metric M][[dev]Iface]route旧版语法需在最后写dev eth0现代也可-iface eth0。参数顺序对新旧版有差异建议显式使用 -net/-host 区分。⚙️ 选项选项简写说明--numeric-n数字格式显示不解析 DNS--net目标为网络route add -net 10.0.0.0/8 ...--host目标为主机route add -host 192.168.1.5 ...--netmask MASK配合 -net 指定掩码route add -net 10.0.0.0 netmask 255.0.0.0gw GW指定网关gw 192.168.1.1metric M路由度量值越小越优mss MTCP MSS 限制window WTCP 窗口大小KBirtt I初始 RTTmsreject拒绝路由blackholemod/dyn/reinstate动态路由标志已被 BGP/OSPF 取代dev Iface指定出口网卡关键参数-A FAMILY地址族inet默认 IPv4、inet6IPv6、ax25等-v/--verbose详细输出-e用 netstat 格式显示更详细-F显示 FIB 转发信息库默认-C显示内核路由缓存已废弃内核 3.6 移除-V/--version版本-h/--help帮助 实战示例示例 1route -n 查看路由表最常用# 显示路由表数字形式不解析 DNS$ route-nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0192.168.1.10.0.0.0 UG10000eth010.0.0.010.0.0.1255.0.0.0 UG000eth1169.254.0.00.0.0.0255.255.0.0 U100200eth0192.168.1.00.0.0.0255.255.255.0 U10000eth0字段详解字段含义示例解读Destination目标网络/主机0.0.0.0 默认路由catch-allGateway下一跳网关0.0.0.0 直连不需要网关Genmask子网掩码0.0.0.0用于默认路由Flags标志位U(up启用)G(网关)H(主机)D(动态)M(修改)A(已被 arp)C(缓存)!(拒绝)Metric距离度量多路由同目标时越小越优先Ref引用次数已弃用net-tools 已无意义Use查找计数此路由被查找过的次数Iface出口网卡实际数据包走哪张网卡示例路由解析0.0.0.0 → 192.168.1.1 UG默认路由所有非本地流量走192.168.1.110.0.0.0/8 → 10.0.0.1 UG去内网 10.x.x.x 走eth1出口192.168.1.0/24 → 0.0.0.0 U直连eth0网段169.254.0.0/16 → 0.0.0.0 Ulink-local地址DHCP 失败时自动分配小技巧如果不加-nroute会尝试 DNS 反查Gateway字段在网络隔离环境会卡顿数秒。永远记得加-n。示例 2添加与删除路由# 添加主机路由单 IP # 目标到达 192.168.2.100 这台主机走 192.168.1.254 网关从 eth0 出$sudorouteadd-host192.168.2.100 gw192.168.1.254 dev eth0# 验证$ route-n|grep192.168.2.100192.168.2.100192.168.1.254255.255.255.255 UGH000eth0# Flags 是 UGHUp Gateway Host# 添加网络路由子网 # 目标到达 172.16.0.0/16 网段$sudorouteadd-net172.16.0.0 netmask255.255.0.0 gw192.168.1.1 dev eth0# 等价简化写法用 CIDRnet-tools 新版支持$sudorouteadd-net172.16.0.0/16 gw192.168.1.1 dev eth0# 验证$ route-n|grep172.16172.16.0.0192.168.1.1255.255.0.0 UG000eth0# 设置默认路由 $sudorouteadddefault gw192.168.1.1 dev eth0# 等价$sudorouteadd-net0.0.0.0 netmask0.0.0.0 gw192.168.1.1 dev eth0# 带 metric 的多路由 # 同一目标两条路由metric 小者优先$sudorouteadd-net10.10.0.0/16 gw192.168.1.2 metric100$sudorouteadd-net10.10.0.0/16 gw192.168.1.3 metric200# 10.10.x.x 优先走 192.168.1.2它挂了才走 .3$iproute get10.10.5.510.10.5.5 via192.168.1.2 dev eth0 src192.168.1.100 uid0cache# 删除路由 $sudoroute del-net172.16.0.0/16 gw192.168.1.1# 注意删除的网关和目标要匹配$sudoroute del default gw192.168.1.1# 添加黑洞路由丢弃包 $sudorouteadd-host10.1.2.3 reject $ping10.1.2.3 connect: Network is unreachable示例 3route 与 ip route 对比# 同一个操作net-tools vs iproute2# 1. 查看路由表$ route-n# net-tools旧$iproute show# iproute2新等价$ip-4route# 仅 IPv4$ip-6route# 仅 IPv6$iproute show table main# 查看 main 表# 2. 查看默认路由$ route-n|grep^0.0.0.0 $iproute show default default via192.168.1.1 dev eth0# 3. 添加默认路由$ routeadddefault gw192.168.1.1 $iprouteadddefault via192.168.1.1# 4. 添加网络路由$ routeadd-net10.0.0.0/8 gw192.168.1.1 $iprouteadd10.0.0.0/8 via192.168.1.1# 5. 删除路由$ route del-net10.0.0.0/8 $iproute del10.0.0.0/8# 6. 添加黑洞路由$ routeadd-host10.1.2.3 reject $iprouteaddblackhole10.1.2.3# 7. 查看路由来源OSPF/BGP/静态$iproute show proto static# route 不支持# 8. 添加策略路由$echo100 custom/etc/iproute2/rt_tables $iprouteadd10.20.0.0/16 dev eth1 table custom $ipruleaddfrom192.168.1.100/32 lookup custom# route 完全不支持策略路由为什么推荐迁移到 ip route维度route (net-tools)ip route (iproute2)维护已停止维护2009持续维护netlink 接口策略路由❌ 不支持✅ 支持多表ip rule高级特性❌ 无✅ 黑洞、均衡、ECMP、tunnel性能解析慢、需重启 net实时生效异步更新推荐仅作兼容生产首选示例 4持久化路由配置重要route add是临时修改重启网络或系统后会丢失。生产环境必须持久化。方法 1RHEL/CentOS -/etc/sysconfig/network-scripts/route-IFACE# 文件名必须与网卡名对应route-eth0, route-bond0$sudovim/etc/sysconfig/network-scripts/route-eth0# 格式 1传统 net-tools 风格10.10.0.0/16 via192.168.1.1 dev eth0172.16.0.0/12 via192.168.1.1 dev eth0# 格式 2iproute2 风格RHEL 7.4 推荐10.10.0.0/16 via192.168.1.1172.16.0.0/12 via192.168.1.1# 重新加载网络$sudonmcli connection reload# 或$sudosystemctl restart NetworkManager方法 2Debian/Ubuntu -/etc/network/interfaces# 旧版 /etc/network/interfacesauto eth0 iface eth0 inet static address192.168.1.100 netmask255.255.255.0 gateway192.168.1.1 up routeadd-net10.10.0.0/16 gw192.168.1.1 dev eth0 down route del-net10.10.0.0/16 gw192.168.1.1 dev eth0# up/down 钩子在网卡启停时执行方法 3NetplanUbuntu 18.04 推荐# /etc/netplan/01-netcfg.yamlnetwork:version:2renderer:networkdethernets:eth0:addresses:-192.168.1.100/24gateway4:192.168.1.1routes:-to:10.10.0.0/16via:192.168.1.1-to:172.16.0.0/12via:192.168.1.1方法 4NetworkManager 命令行# 添加永久路由NM 自动写入配置$sudonmcli connection modify eth0 ipv4.routes10.10.0.0/16 192.168.1.1$sudonmcli connection up eth0 $iproute show示例 5诊断网络不可达实战案例# 问题能 ping 通网关 192.168.1.1但 ping 不到外网 8.8.8.8# 1. 查看路由表$ route-nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0192.168.1.10.0.0.0 UG10000eth0192.168.1.00.0.0.0255.255.255.0 U10000eth0# ⚠️ 没有默认路由或者默认路由网关不对# 2. 修复添加正确默认路由$sudorouteadddefault gw192.168.1.1 dev eth0# 3. 验证$ping-c28.8.8.8 PING8.8.8.8(8.8.8.8)56(84)bytes of data.64bytes from8.8.8.8:icmp_seq1ttl119time12.3ms64bytes from8.8.8.8:icmp_seq2ttl119time11.8ms# 进阶案例多网卡路由冲突 # 两张网卡都接 0.0.0.0 默认路由metric 一样 → 流量乱跳# 解决调整 metric$sudorouteadddefault gw192.168.1.1 dev eth0 metric100$sudorouteadddefault gw10.0.0.1 dev eth1 metric200# 优先走 eth0示例 6配合 traceroute 验证路由生效# 修改路由后验证包实际走的路径$traceroute-n8.8.8.8tracerouteto8.8.8.8(8.8.8.8),30hops max1192.168.1.10.512ms210.0.0.15.234ms3202.96.209.112.456ms...# 添加一条到 8.8.8.8 的特殊路由测试用$sudorouteadd-host8.8.8.8 gw10.0.0.1 dev eth1# 走 eth1备用线路$traceroute-n8.8.8.8tracerouteto8.8.8.8(8.8.8.8),30hops max110.0.0.11.234ms# ← 走了新路由2...# 测试完删除$sudoroute del-host8.8.8.8 gw10.0.0.1 dev eth1⚠️ 注意事项1. 修改路由的影响错误的route del default会立刻断网SSH 中执行小心强烈建议在物理/控制台或带超时情况下操作。2. route 命令在主流新发行版缺失RHEL 8 / Ubuntu 18.04 默认不安装net-toolsroute命令找不到。新脚本直接用ip route如需兼容旧系统command-vroute/dev/null||aliasrouteip route# 简易兼容3.route add不带 dev 可能选错网卡系统有多个接口时如 eth0 公网 eth1 内网务必显式dev IFACE避免选错出口。4. 内核路由缓存已移除早期route -C内核缓存已被内核 3.6 移除改用ip route show cache如可用或ss -r。5. 路由与策略路由的取舍简单场景route add够用多 ISP 出口、内外网隔离、源地址控制 → 必须用ip rule ip route table策略路由。6. ECMP 负载均衡route只能一条一条加ip route add ... nexthop才能做多路径等价负载iprouteadd0.0.0.0/0 nexthop via192.168.1.1 dev eth0 nexthop via10.0.0.1 dev eth17. 防火墙联动添加路由后包仍被iptables -j DROP拦截是常见误区。路由只管去哪防火墙管让不让过排错两步都要看。 总结route是 Linux 网络的历史教科书虽然不再推荐新写但维护老脚本时必须会看、能临时操作。本节重点核心参数-n数字显示永远加、add/del -net/-host、gw、dev现代替代ip route/ip rulenet-tools 已 deprecated持久化临时route add永久写/etc/sysconfig/network-scripts/route-IFACERHEL或 NetplanUbuntu 18.04故障排查先route -n看默认网关再traceroute验证路径安全提示修改默认路由前确认控制台可达别让 SSH 自杀最终建议新服务器、新脚本统一使用ip route遇到route命令报错command not found时yum install net-tools或apt install net-tools临时补齐。 相关命令命令用途ip route现代推荐命令iproute2ip rule策略路由规则多表ip addr管理 IP 地址ip link管理网卡链路层ip neighARP/ND 表替代 arpnetstat -rn早期路由表查看也属 net-toolstraceroute追踪包路径ss -r显示路由缓存推荐用ip route getarp/ip neighARP 表管理NetworkManager/nmcli高层网络管理