我有以下情况:
- - - - - - -
| namespace |-------o o------
- - - - - - - vethY ppp0
vethX
在哪里:
ppp0
是 PPP 接口,其 IP 地址为 192.168.100.169/24vethX
是命名空间内的虚拟以太网接口,其 IP 地址为 10.0.0.3/24vethY
是另一个虚拟以太网接口,其 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,那么为什么主表会参与其中?