Linux网络堆栈中标记数据包的流向

Linux网络堆栈中标记数据包的流向

概括:

我的问题是关于网络堆栈中标记数据包的流向。

这是我所做的:

  • 我已经使用 OUTPUT 链在 mangle 表中标记了数据包。
  • 我还添加了一个 tun 接口和一个新的路由表。
  • 我还为标记的数据包添加了一条规则(使用ip rule)以使用创建的路由表。

现在我的问题是:

在解释这个问题之前,我必须提到我的设置正在运行,这不是如何执行的问题,而是它如何运行的问题。 :)

根据这幅图中描绘的图片文章,来自本地进程的数据包将首先被路由,然后进入 netfilters 的 OUTPUT 链。这意味着数据包在路由过程完成后会被标记。那么数据包是如何到达tun接口的呢?

  1. 是不是走出一个界面进入另一个界面?
  2. 一切都发生在本地吗?
  3. 或者完全是别的什么?

这是我使用过的命令:

# ip commands
ip tuntap add mode tun dev testtun
ip addr add 10.20.30.40/24 dev testtun
echo "20 test" >> /etc/iproute2/rt_tables
ip link set dev testtun up
ip route add default via 10.20.30.1 table test
ip rule add fwmark 12 table tes

# iptables command:
iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x10f2c -j MARK --set-mark 12

我正在使用 net_cls 控制器和 cgroups v1 来隔离 classid 为 0x10f2c 的进程。再次,这个设置正在工作,我已经实现了我正在寻找的东西,我只是陷入了困境怎么样?部分。

对于这个问题<3.如果有任何帮助,我将不胜感激。

相关内容