如何从Linux中从缓存中刷新路由表

时间:2020-03-05 15:27:21  来源:igfitidea点击:

计算机网络中的路由表是存储在路由器或者网络服务器上的数据表,该路由器列出了特定网络目的地的路由。
通常,每个静态路由都有一个与之相关的度量。
网络设备使用该度量来决定用于注定到特定网络的数据包的要选择的路由。
在Linux或者UNIX系统的上下文中说话时,它们还保持路由表,主要是当服务器有多个活动网络接口时。

在某些时候,我们可能想要刷新路由表或者更新,以便我们可以访问某些网络。
网络可以在组织中本地,或者涉及遍历公共互联网的地方。
大多数Linux发行版提供了两个任务的主要工具,即IP和Route命令。

在本教程中,我将描述如何使用终端命令刷新Linux中的路由表。

使用IP命令刷新路由表

IP是一个用于显示和操作路由,网络设备,接口和隧道的Linux命令行工具。

它是ifconfig工具的替代品。
IP命令可以为接口进行几乎所有类型的Linux网络配置。

在刷新任何路由之前,我们可能首先需要使用命令检查当前的路由表:

$ip route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600

我们可以从我的输出中看到,我的默认路由设置为192.168.0.1.
这意味着所有目的地用于除了我本地子网92.168.0.0/24以外的网络的数据包将通过192.168.0.1转发。
此IP 192.168.0.1适用于我的路由器。

出于演示目的,我将在笔记本电脑上启动Docker服务。
Docker有自己的子网。
我们将使用它来演示IP命令的使用情况。

$sudo systemctl start docker
$ip route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.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 route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600
$route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 600 0 0 wlp1s0
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0

我们可以确认路由从路由表中删除。

刷新所有路由

要刷新路由表上的所有路由,使用IP命令选项 route flush table main
运行的完整命令是:

$sudo ip route flush table main
$ip route show

路由表的重新检查应返回空。
如果我们无法直接连接或者没有像控制台等其他访问方法,则应谨慎使用此命令,因为如果我们不在直接连接,则可以从服务器中踢出服务器,或者像控制台等其他访问方法,调制解调器等

清空路由缓存

Linux内核通常是指从路由表中获取新路由之前的路由缓存。
可以使用该命令清除此高速缓存。

$sudo ip route flush cache

确认任何可用的缓存路由:

$sudo ip route show cache

从路由缓存中显示统计信息

如果我们想了解有关缓存路由的更多信息。
使用命令:

$sudo ip -s route show cache

给出了"二手"字段等添加信息,其中表示该路由在路由缓存中访问的次数。

对于持久的静态路由,我们可以在以下任何文件中放置路由:

/etc/sysconfig/static-routes or /etc/sysconfig/network-scripts/route-<interface>  # Red Hat and its derivatives - CentOS, Fedora 等
/etc/network/interfaces # Debian and its derivatives

CentOS 7上持久路由的示例是:

# cat /etc/sysconfig/network-scripts/route-eth0
GATEWAY0=192.168.1.254
NETMASK0=255.255.255.0
ADDRESS0=192.168.5.0
GATEWAY1=10.10.10.1
NETMASK1= 255.255.255.240
ADDRESS1=10.164.234.132

Ubuntu/Debian上的一条线看起来如下:

up route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254
down route del -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254