当我向接口添加一个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_addr
会net/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