在我将路由配置为使用自定义路由表后,路由仍然使用主表

在我将路由配置为使用自定义路由表后,路由仍然使用主表

我有以下情况:

- - - - - - -
| namespace |-------o      o------
- - - - - - -     vethY   ppp0
          vethX

在哪里:

  • ppp0是 PPP 接口,其 IP 地址为 192.168.100.169/24
  • vethX是命名空间内的虚拟以太网接口,其 IP 地址为 10.0.0.3/24
  • vethY是另一个虚拟以太网接口,其 IP 地址为 10.0.0.5/24,它也是命名空间的默认网关

事实上,进入命名空间的路由表如下:

$ sudo ip netns exec my_namespace ip route
default via 10.0.0.5 dev vethX
10.0.0.0/24 dev vethX proto kernel scope link src 10.0.0.3

vethY在这种情况下,我想使用基于策略的路由;特别是当网络数据包的传入接口是或接口时,我想使用自定义路由表ppp0

我已经创建了名为“T1' 在文件中添加条目“T1” /etc/iproute2/rt_tables
然后我添加了策略路由规则,它将告诉系统何时使用这个新的路由表。
所以现在策略路由规则是:

$ ip rule
0:      from all lookup local
32764:  from all iif ppp0 lookup T1
32765:  from all iif vethY lookup T1
32766:  from all lookup main
32767:  form all lookup default

然后我将以下规则添加到我的自定义表中

$ ip route show table T1
default via 192.168.100.169 dev ppp0
10.0.0.0/24 dev vethY scope link
192.168.100.180 dev ppp0 scope link

最后一行显示了点对点链路的另一端。
此外,主路由表为空。

使用此配置,如果我进入命名空间并 ping 10.0.0.5,则不会收到答案(也不会收到 ARP 回复)。
请求数据包到达 vethY 接口(我使用 wireshark 看到过这种情况),但没有生成任何答案。
如果我的 arp 缓存为空,则发送 arp 请求时不会发回任何 arp 回复。

相反,如果我也将规则添加
10.0.0.0/24 dev vethY scope link
到主表中,则所有数据包都会以正确的方式流动。

为什么如果我不将此规则添加到主表中,我就收不到答案?
既然我将路由配置为对来自 vethY 或 ppp0 的所有数据包使用 T1,那么为什么主表会参与其中?

相关内容