既然我将路由配置为使用自定义路由表,为什么涉及主表?

既然我将路由配置为使用自定义路由表,为什么涉及主表?

我有以下情况:

- - - - - - -
| 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,为什么会涉及主表?

相关内容