我有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发送到机器C,并且(3)丢弃了机器B收到的原始数据包。

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

是否可以处理机器B收到的原始数据包,然后将其转发给C。

附言iptables中的DNAT功能没有用,因为我需要做更多修改。

最佳答案

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

关于linux - 使用iptables和nfqueue进行数据包转发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27512435/

10-11 15:45
查看更多