natables 路由决策步骤

natables 路由决策步骤

下面的链接是解释跨链数据包流的图像nftables

网络过滤器挂钩

我了解一切,除了一件事,该图像没有说明处于哪个阶段routing decision

根据图像,应该在两个地方完成:

  1. prerouting钩子之后但在input和之前forward之前
  2. output当数据包离开本地主机进程时挂钩之前

上面的第一点是有道理的,因为后面有 2 个可能的钩子prerouting,但是对于第 2 点,不清楚要执行什么路由决策,因为来自本地进程的唯一流选项是output因此不应该有任何路由决策,而是图片说有一个。

这让我相信只有一个路由决策,即上面的第 1 点。
为什么图像指定和routing decision之间的节点local processoutputhook

SNAT是在postrouting钩子中完成的,根据文档“在路由之后、离开本地系统之前查看所有数据包”
但问题是哪个路由?因为根据图像有 2 个路由决策。

顺便说一句。什么是“路由决策”(图像中的节点)我不认为这是NAT因为NAT是在preroutingandpostrouting挂钩中完成的。

答案1

图像是正确的。

路由仅完成一次:由于Local Process是起点或终点,因此数据包流仅经过一次路由决策。对于第二点,流程将经过:

  • 本地进程
  • 路由决策
  • 输出
  • 后路由
  • 出口
  • 驱动程序发送

在此之前没有任何事情,因此它只会经过一个路由决策。在这种情况下,路由决策意味着选择将数据包发送到哪个 IP 地址、使用哪个接口。如果我想将数据包发送到 1.1.1.1,则意味着执行以下操作:

$ ip r get 1.1.1.1
1.1.1.1 via 192.168.1.1 dev wlp0s20f3 src 192.168.1.254 uid 1000 
    cache 

因此,我将在 Wi-Fi 接口 wlp0s20f3 上将数据包(srcip:192.168.1.254,dstip:1.1.1.1)发送到 192.168.1.1。一旦我选择了这个,如果我想做snat,我可以改变ip头源ip。

相关内容