我有基于linux系统的路由器。我有相关的SDK,可以自定义路由器的linux系统。

当我从iptables规则禁用端口转发时,正在运行的crontack会话不会中断并保持建立状态。

当我从iptable规则禁用端口转发时,我想停止所有正在运行的crontack会话。我的意思是,只删除与已删除规则相关的crontack会话。因此,请使用dest IP(lan IP)=已删除规则的dest IP停止所有crontack会话。

在内核空间该怎么做?如何开发一个遍历所有crontack会话并检查目标IP并仅删除具有给定ipaddress的会话的内核模块?有什么联系吗?

否则,是否存在一种用户空间方式(C函数或Linux命令)来停止特定的crontack会话?

最佳答案

https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt


  nf_conntrack_tcp_loose - BOOLEAN
0 - disabled not 0 - enabled (default)
If it is set to zero, we disable picking up already established connections.



因此,已建立的连接会被即时检测到(不涉及SYN / SYN + ACK / ACK),并作为新的conntrack条目添加回去。由于它是新的conntrack条目,因此将再次遍历nat表并再次应用DNAT规则。即使一种方法不能立即起作用(如果除了DNAT规则之外也未定义SNAT / MASQUERADE,则HTTP服务器的传出数据包可能会在WAN上短暂显示为192.168.3.17,并被192.168.33.13拒绝/忽略)。 ,只要以另一种方式再次尝试(从192.168.33.13 ACK重试...),这将匹配。

输入:

echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose


然后尝试再次使用conntrack -D删除conntrack条目...

希望这可以防止创建新的conntrack条目并减少下载。

该答案是从以下位置复制的:https://superuser.com/questions/1258689/conntrack-delete-does-not-stop-runnig-copy-of-big-file

09-27 21:00