下面的链接是解释跨链数据包流的图像nftables
我了解一切,除了一件事,该图像没有说明处于哪个阶段routing decision
?
根据图像,应该在两个地方完成:
- 在
prerouting
钩子之后但在input
和之前forward
之前 output
当数据包离开本地主机进程时挂钩之前
上面的第一点是有道理的,因为后面有 2 个可能的钩子prerouting
,但是对于第 2 点,不清楚要执行什么路由决策,因为来自本地进程的唯一流选项是output
因此不应该有任何路由决策,而是图片说有一个。
这让我相信只有一个路由决策,即上面的第 1 点。
为什么图像指定和routing decision
之间的节点local process
output
hook
SNAT
是在postrouting
钩子中完成的,根据文档“在路由之后、离开本地系统之前查看所有数据包”
但问题是哪个路由?因为根据图像有 2 个路由决策。
顺便说一句。什么是“路由决策”(图像中的节点)我不认为这是NAT
因为NAT
是在prerouting
andpostrouting
挂钩中完成的。
答案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。