![如何在 iptables/netfilter 中解包隧道数据包并处理隧道数据包](https://linux22.com/image/69494/%E5%A6%82%E4%BD%95%E5%9C%A8%20iptables%2Fnetfilter%20%E4%B8%AD%E8%A7%A3%E5%8C%85%E9%9A%A7%E9%81%93%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B9%B6%E5%A4%84%E7%90%86%E9%9A%A7%E9%81%93%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我有一个关于 Linux netfilter/iptables 交互的具体问题。假设我有一个 IP 数据包 P1 位于另一个 IP 数据包 P2 中(也就是说,P1 是通过隧道传输的)。
现在的问题是:是否可以检查“外部”数据包 P2 的特定头字段(例如 MAC 源地址),然后根据某个 iptables 链将“内部”数据包 P1 发送到某个 iptables 链?检查的领域?
举个小例子:假设我在 FORWARD 表中有 3 个链,C1 到 C3。现在,如果 P2 的 MAC 源地址值为 17,我想将“内部”数据包 P1 发送到 C1。如果MAC源地址是28,我想将P1发送到C2。否则,我想将 P2 发送到 C3。
我绝对不确定是否可以在 iptables 中这样做。也许这也可以通过将一些 C 代码挂钩到特定的 netfilter 挂钩来实现。
我知道这是某种奇怪的用例,但我只是很好奇。
提前致谢!