我有以下情况:
- - - - - - -
| 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,为什么会涉及主表?