我有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功能没用,因为我需要做更多修改。
答案 0 :(得分:0)
我知道问题是在7个月之前被问到的,但是IMHO对数据包进行任何处理的最快方法是编写内核模块。处理用户空间中的所有这些东西会大大降低速度。顺便说一下,在这种情况下没有零拷贝,所以再一次 - 内核模块是最好的解决方案