使用iptables和nfqueue进行数据包转发

时间:2014-12-16 19:29:59

标签: linux sockets networking iptables

我有3台机器--A,B,C和我正在尝试做类似于DNAT的事情。

1)A向B发送数据包。

2)B接收数据包并对其进行修改以将其发送给C.

在机器B上,我使用iptables和nfqueue来接收数据包。

iptables -I INPUT -p tcp -j NFQUEUE --queue-num 1

在机器B上,(1)我修改数据包(让我们将修改后的数据包称为new_packet),(2)我使用原始套接字将new_packet发送到machine-C,以及(3)丢弃原始数据包机器-B接收。

我觉得这些步骤是多余的(会延迟延迟),应该有更好的方法。

是否有可能破坏机器B收到的原始数据包,然后简单地将数据包转发给C.

P.S。 iptables中的DNAT功能没用,因为我需要做更多修改。

1 个答案:

答案 0 :(得分:0)

我知道问题是在7个月之前被问到的,但是IMHO对数据包进行任何处理的最快方法是编写内核模块。处理用户空间中的所有这些东西会大大降低速度。顺便说一下,在这种情况下没有零拷贝,所以再一次 - 内核模块是最好的解决方案