概括:
我的问题是关于网络堆栈中标记数据包的流向。
这是我所做的:
- 我已经使用 OUTPUT 链在 mangle 表中标记了数据包。
- 我还添加了一个 tun 接口和一个新的路由表。
- 我还为标记的数据包添加了一条规则(使用
ip rule
)以使用创建的路由表。
现在我的问题是:
在解释这个问题之前,我必须提到我的设置正在运行,这不是如何执行的问题,而是它如何运行的问题。 :)
根据这幅图中描绘的图片文章,来自本地进程的数据包将首先被路由,然后进入 netfilters 的 OUTPUT 链。这意味着数据包在路由过程完成后会被标记。那么数据包是如何到达tun接口的呢?
- 是不是走出一个界面进入另一个界面?
- 一切都发生在本地吗?
- 或者完全是别的什么?
这是我使用过的命令:
# 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.如果有任何帮助,我将不胜感激。