下面的链接是解释跨链数据包流的图像nftables
我了解一切,除了一件事,该图像没有说明在哪个阶段完成routing decision
?
根据图像,应该在两个地方完成:
- 在
prerouting
钩子之后但在input
引擎盖forward
之前 output
当数据包离开本地主机进程时挂钩之前
上面的第一点是有道理的,因为后面有 2 个可能的钩子prerouting
,但是对于第 2 点,不清楚要执行什么路由决策,因为来自本地进程的唯一流选项是钩子,output
因此不应该有任何路由决策,而是图片说有一个。
这让我相信只有一个路由决策,即上面的第 1 点。
为什么图像指定和hookrouting decision
之间的节点?local process
output
SNAT
是在钩子中完成的postrouting
,根据文档“在路由之后,就在它们离开本地系统之前查看所有数据包”,
但问题是哪个路由?因为根据图像有 2 个路由决策。
顺便说一句。什么是“路由决策”(图像中的节点)我不认为那是NAT
因为NAT
是在prerouting
和postrouting
挂钩中完成的。
图像是正确的。
路由仅完成一次:由于
Local Process
是起点或终点,因此数据包流仅经过一次路由决策。对于第二点,流程将经过:在此之前没有任何事情,因此它只会经过一个路由决策。在这种情况下,路由决策意味着选择将数据包发送到哪个 IP 地址、使用哪个接口。如果我想将数据包发送到 1.1.1.1,则意味着执行以下操作:
因此,我将在 Wi-Fi 接口 wlp0s20f3 上将数据包(srcip:192.168.1.254,dstip:1.1.1.1)发送到 192.168.1.1。一旦我选择了这个,如果我想做snat,我可以改变ip头源ip。