我有一台有两个接口的电脑:eth0
(IP 地址192.168.1.16
)和eth2
(IP 地址10.10.10.73
)。另外,我在main
表中的这台PC中有一条主机路由,其中表示如果目标地址是172.16.1.1
,则使用eth0
接口。
172.16.1.1
现在,当我从10.10.10.73
(接口)发送ICMP“回显请求”时,然后使用源IP (我已禁用RPF)eth2
发送ICMP“回显答复” 。由于该主机路由,这一切都符合预期。eth0
192.168.1.16
但是,当我在规则编号之后添加ip rule
选择器from 10.10.10.73
和操作,并且表仅包含使用接口的默认路由时,ICMP“回显回复”将从接口发出。lookup test
0
test
eth2
eth2
我很困惑这个选择器如何from 10.10.10.73
匹配。在 ICMP“回显回复”消息的生命周期中,源 IP 何时10.10.10.73
发生匹配?
答案1
根据使用 Linux 的策略路由书籍,从本地计算机发往外部系统的数据包将在经过输出链后进入路由策略数据库,并且您的选择器将在此处匹配从发往from 10.10.10.73
的出站回显应答数据包。10.10.10.73
172.16.1.1
从http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH03.web.html:
考虑发往内部服务的外部来源数据包的路径。它进入系统并由入口数据包整理和标记阶段 Pre-Route(1) 进行处理。在此阶段,您将应用数据包管理操作,例如 fwmark 和 TOS/QoS 标记或 NetFilter NAT。然后数据包进入RPDB获取路由并路由到Input(2)链。输入链为发往本地机器服务的数据包提供防火墙功能。
相反的情况是发往外部系统的源自内部服务的数据包的数据包路径,例如上一段中描述的回复数据包。它退出本地计算机并进入提供防火墙功能的输出(4)链。然后,它进入 RPDB 进行路由处理,并通过退出数据包修改和标记阶段 Post-Route(5) 退出系统。
答案2
选择器from 10.10.10.73
匹配,因为回显回复是从此地址发出的。但在这种情况下,不建议继续这样做。因为from 10.10.10.73
可以应用于除 eth0 以外的其他接口的任何内容,在这种情况下会形成错误的路由。您应该to 172.16.1.1
在您的 ip 规则中使用。
匹配源地址的事情与以下事实有关:使用ip rule
与专用查找表相关的路由决策使数据包忽略src
来自此接口的路由指定的默认地址,就像您将在ip route list table local
发生的情况如下图红色部分所示:内核数据包传输图
如果数据包没有ip rule
到达您的计算机进行本地处理,并且由于默认路由,回复来自 eth0(显然具有 eth0 IP 地址)。由于ip rule add from 10.10.10.73 table test
路由过程更改了查找表,并且不使用保存到目的地的路由的接口的默认 IP 地址,因此现在使用回复接口的 IP 地址。