本地路由表有什么用?

Lil*_*lás 9 routing route ifconfig linux-networking iproute2

我想了解什么是本地路由表。

如果我使用以下命令在其中添加一个随机地址:

sudo ip route add to local <any-ip-address> dev <network interface>
Run Code Online (Sandbox Code Playgroud)

现在我可以 ping 这个地址,但是 ifconfig 列出的接口没有使用这个地址。

例子:

$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.

--- 192.168.22.22 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

$ sudo ip route add to local 192.168.22.22 dev wlp2s0
$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.
64 bytes from 192.168.22.22: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 192.168.22.22: icmp_seq=2 ttl=64 time=0.015 ms

--- 192.168.22.22 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.015/0.016/0.018/0.004 ms
Run Code Online (Sandbox Code Playgroud)

感觉是作为loopback工作的,但是从ifconfig看,lo接口还是只有127.0.0.1这个地址。如果我检查这张表,ip route ls table local我会看到以下内容:

$ ip route ls table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
local 192.168.0.13 dev wlp2s0  proto kernel  scope host  src 192.168.0.13
broadcast 192.168.0.255 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
local 192.168.22.22 dev wlp2s0  scope host
broadcast 192.168.122.0 dev virbr0  proto kernel  scope link  src 192.168.122.1
local 192.168.122.1 dev virbr0  proto kernel  scope host  src 192.168.122.1
broadcast 192.168.122.255 dev virbr0  proto kernel  scope link  src 192.168.122.1
Run Code Online (Sandbox Code Playgroud)

那么什么是本地表,在女巫场景中我应该使用它吗?

我在某处读到它用于广播和由本地机器托管的地址,但我不明白为什么我们需要一个特殊的表,以及何时应该向该表添加任何条目。

谢谢

poi*_*ige 8

首先,互联网上的一些信息解释了“本地表是由内核维护的特殊路由表”。

如果您今天真的很勇敢,您甚至可以在本地获取一些信息,方法如下:

man ip-- 因为那是你一直在修改的命令,所以期望它的手册应该对这个问题有一些提示是有道理的。您现在应该清楚地观察到所谓的SEE ALSO部分。让我们仔细研究一下——除其他外,它无耻地提到了 2 个可能的候选人,以供进一步调查:

  1. ip-route(8)
  2. ip-rule(8)

总而言之,我们现在有些:

man 8 ip-route的:

local- 目的地已分配给该主机。数据包被环回并在本地传送。

实际上,始终存在另一张表,它是不可见的,但更为重要。这是local表(ID 255)。该表由本地和广播地址的路由组成。内核自动维护这个表,管理员通常不需要修改它,甚至不需要查看它。

man 8 ip-rule的:

在启动时,内核配置由三个规则组成的默认 RPDB:

  1. 优先级:0,选择器:匹配任何东西,动作:查找路由表localID 255)。local表是一个特殊的路由表,包含本地和广播地址的高优先级控制路由。

我个人对某些作者在引用手册中提供的信息感到满意,但如果您仍然感到饥饿,我想现在您知道如何钓鱼了。