如何对接口进行分组以使用 ip-rule 的 suppress_ifgroup 功能?

如何对接口进行分组以使用 ip-rule 的 suppress_ifgroup 功能?

我发现了 ip-rule 的“suppress_ifgroup X”功能,它似乎允许我告诉内核忽略给定表中属于该组 X 的传出接口的路由。但我找不到有关如何设置这些组的任何信息。

如何将接口分配给“组”以使用 ip-rule 的“suppress_ifgroup”功能?

答案1

下面是一个使用的示例ip rule ... suppress_ifgroup沿着ip link set ... group X,在(ip netns-)网络命名空间中ex

# ip netns add ex
# ip netns exec ex sh

并在这个交互式 shell 中输入所有进一步的命令。

ip link add name e0 up type dummy
ip link add name e1 up type dummy
ip link add name e2 up type dummy
ip link add name e3 up type dummy

ip address add 192.0.2.0/32 dev e0
ip address add 192.0.2.1/32 dev e1
ip address add 192.0.2.2/32 dev e2
ip address add 192.0.2.3/32 dev e3

ip route add default dev e0
ip route add default dev e1 table 1001
ip route add default dev e2 table 1002
ip route add default dev e3 metric 1 table 1002 #same table as previous

ip rule add pref 1001 lookup 1001 suppress_ifgroup 10
ip rule add pref 1002 lookup 1002 suppress_ifgroup 10

现在可以看到,一旦从规则调用的特定表中评估路由结果,如果接口的组与规则上的组匹配,它将被抑制:

# ip route get 192.0.2.10
192.0.2.10 dev e1 table 1001 src 192.0.2.1 uid 0 
    cache 
# ip link set e1 group 10
# ip route get 192.0.2.10
192.0.2.10 dev e2 table 1002 src 192.0.2.2 uid 0 
    cache 
# ip link set e2 group 10
# ip route get 192.0.2.10
192.0.2.10 dev e0 src 192.0.2.0 uid 0 
    cache 
# 
  • 首先,选择并保存表 1001 的结果。
  • 一旦e1成为第 10 组的一部分,使用表 1001 的路线e1就会被忽略,并转到下一个使用路线的规则评估e2
  • 对于下一种情况,在表 1002 中查找与前一种情况一样,再次返回所选接口e2,然后像前一种情况一样被取消。e3甚至从未被视为第二选择,而是留e0在主路由表中进行选择:抑制器仅在评估路由表之后在规则级别发生,而不是在路由表评估期间发生。

此示例仅显示如何通过将接口设置为特定组来“禁用”接口,从而改为使用非“禁用”接口。我不知道 的实际用途suppress_ifgroup,但它可能用于一些复杂的路由设置,包括涉及隧道的设置。

相关内容