如何自动将直接路由(proto 内核范围链接)添加到非主表

如何自动将直接路由(proto 内核范围链接)添加到非主表

当我向接口添加一个IP时,内核会向主表添加一条直接路由;如果我删除该IP,内核就会从主表中删除这条直接路由。如下所示:

root@template:~# ip addr add 192.168.10.1/24 dev eth2 
root@template:~# ip route show table main | grep 192.168.10
192.168.10.0/24 dev eth2 proto kernel scope link src 192.168.10.1 
root@template:~# ip addr del 192.168.10.1/24 dev eth2
root@template:~# ip route show table main | grep 192.168.10     
root@template:~# 

如果在/etc/iproute2/rt_tables中添加另一个路由表,如何使新表像主表一样自动添加/删除直接路由?

谢谢!

答案1

不幸的是,我认为你不能——这种行为似乎是硬编码到内核中的。

当添加新路线时,fib_add_addrnet/ipv4/fib_frontend.c调用(看这里)。如果IFA_F_NOPREFIXROUTE请求中未设置该标志(该标志来自用户空间中noprefixroute命令的参数ip),则在添加地址时,内核将通过调用fib_magic(RTM_NEWROUTE, ...)看这里)。

fib_magic决定将路由添加到哪个表,如下所示(来源):

tb_id = (type == RTN_UNICAST) ? RT_TABLE_MAIN : RT_TABLE_LOCAL;

由于链接前缀路由是单播路由,因此它会被添加到主表中。

noprefixroute但是,通过将调用传递给 来阻止内核添加此路由ip addr add。然后通过发出类似以下内容的命令将其添加到正确的表中:ip route add 192.168.10.0/24 scope link table 1000

相关内容