我有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/