How to Flush Routing Table from Cache in Linux
在计算机网络中,路由表(routing table)是存储在路由器或网络服务器上的一张数据表,用于列出通往特定网络目标的路径。通常,每条静态路由都关联一个度量值(metric),网络设备利用该度量值来决定应为发往特定网络的数据包选择哪条路由。在 Linux 或 Unix 系统环境中,系统同样会维护一张路由表——尤其是在服务器拥有多个活跃网络接口的情况下。
在某些场景下,你可能需要清除(flush)或更新路由表,以便访问某些网络。这些网络可能是你组织内部的本地网络,也可能涉及穿越公共互联网。大多数 Linux 发行版为此提供了两个主要工具:ip 命令和 route 命令。
在本指南中,我们将学习如何使用终端命令在 Linux 中清除路由表。
使用 ip 命令清除路由表
ip 是一个 Linux 命令行工具,用于显示和操作路由、网络设备、接口及隧道。它是 ifconfig 工具的现代替代品,几乎可以完成所有与接口相关的 Linux 网络配置任务。
在清除任何路由之前,建议先使用以下命令查看当前的路由表:
$ ip routedefault via 192.168.0.1 dev wlp1s0 proto dhcp metric 600192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600
从输出可见,我的默认网关设置为 192.168.0.1。这意味着所有目的地不在本地子网 192.168.0.0/24 内的数据包都将通过 192.168.0.1 转发, 这个 IP 地址 192.168.0.1 对应于我的路由器。
为演示目的,我将在笔记本电脑上启动 Docker 服务。Docker 会创建自己的子网,我们将借此展示 ip 命令的用法。
$ sudo systemctl start docker$ ip routedefault via 192.168.0.1 dev wlp1s0 proto dhcp metric 600172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600
清除特定路由
现在,路由表中新增了一条通往 172.17.0.0/16 子网的路由(下一跳为 172.17.0.1)。若要清除该路由,可执行:
$ sudo ip route flush 172.17.0.0/16
再次查看路由表,确认该条目已被移除:
$ ip routedefault via 192.168.0.1 dev wlp1s0 proto dhcp metric 600192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600
也可以使用传统 route 命令验证:
$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.0.1 0.0.0.0 UG 600 0 0 wlp1s0192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0
清除所有路由
要清空主路由表中的所有路由,可使用以下命令:
$ sudo ip route flush table main$ ip route show
再次检查路由表应返回空结果。请注意:此操作需谨慎执行——如果你不是通过本地控制台连接服务器,且没有其他访问方式(如串口、带外管理等),该命令可能导致你被断开连接。
清空路由缓存
Linux 内核在从路由表查找新路由前,通常会先查询路由缓存(routing cache)。该缓存可通过以下命令清除:
$ sudo ip route flush cache
使用以下命令确认缓存中是否仍有路由条目:
$ sudo ip route show cache
显示路由缓存统计信息
若想获取关于缓存路由的更多详细信息,可使用:
$ sudo ip -s route show cache
输出中将包含额外字段,例如 “used”,表示该缓存路由被访问的次数。
配置持久化静态路由
若需使静态路由在系统重启后依然生效,可将路由规则写入以下配置文件之一:
Red Hat 及其衍生发行版(如 CentOS、Fedora 等):
/etc/sysconfig/static-routes- 或
/etc/sysconfig/network-scripts/route-<interface>
Debian 及其衍生发行版(如 Ubuntu):
Red Hat / CentOS Stream 示例:
# cat /etc/sysconfig/network-scripts/route-eth0GATEWAY0=192.168.1.254NETMASK0=255.255.255.0ADDRESS0=192.168.5.0GATEWAY1=10.10.10.1NETMASK1=255.255.255.240ADDRESS1=10.164.234.132
Ubuntu / Debian 示例:
在 /etc/network/interfaces 中添加:
up route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254down route del -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254
结论
在本教程中,我们学习了如何从 Linux 终端清除路由表及其缓存。
感谢阅读!欢迎在下方评论区提出您的建议与反馈。
Src
https://linuxopsys.com/flush-routing-table-from-cache