嗨:我写了一个非常简单的netfiter模块。在其中,我定义了3个钩子:localout和转发以更改从我的PC发出的数据包,并预先进行反向处理。
我将模块插入2台PC,并且可以在它们之间ping,ssh,iperf等。
问题在于这种简单操作的网络性能低下。
我将OpenSuse Leap 15与内核4.12.14 -...一起使用...
如果我更改另一个IP字段(例如TTL或TOS),则性能还可以。 如果我更改协议或某些数据(TCP数据)非常慢。 我尝试使用nf_reset(skb)并且吞吐量也很慢,相同... 我线性化了skb,什么也没发生...
localout和前向挂钩:
nf_reset(skb);
skb_linearize(skb);
ip_hdr(skb)->protocol++;
//computing TCP checksum if needed
ip_hdr(skb)->frag_off = 0;
ip_send_check(ip_hdr(skb));
return NF_ACCEPT;
路由前钩子
nf_reset(skb);
skb_linearize(skb);
ip_hdr(skb)->protocol--;
//computing TCP checksum if needed
skb->ip_summed = CHECKSUM_INNECESSARY;
ip_send_check(ip_hdr(skb));
return NF_ACCEPT;
我找不到有关此问题的任何系统日志。我希望Netfilter挂钩可以提供更好的吞吐量。
我有一些问题:
1)如果我不输入:ip_hdr(skb)-> frag_off = 0; TCP协议不起作用(ssh,iperf等)。我的问题是:为什么?
2)性能极其缓慢。我的意思是,如果我不更改协议,则两台PC之间的吞吐量将超过5 Gb / s(均为vmware工作站虚拟机),如果我inc / dec的协议将低于5 Mb / s,则将近降低1024倍。我的另一个问题是:为什么简单的更改会降低吞吐量?
感谢进阶...