netstat和ip_conntrack的连接数量有所不同。 为什么?

在/ proc / net / ip_conntrack我有:

established 3076 time_wait 4346 total 7468 

netstat中我有:

 established 1051 time_wait 73 total 1165 

这是为什么? 其他连接在哪里? 如何弄清楚他们在做什么?

更新: ip_conntrack更多的统计信息

 assured 5230 unreplied 2133 total 7427 

Conntrack模块在最后过期之前记住X秒的最近连接。 据我了解,这是因为iptables有其他几个模块可以利用这个信息:例如,如果你想禁止一些IP地址,如果它在一段时间内使X新的连接。

另一方面, netstat显示实时信息,对古代历史不感兴趣。

你有没有增加conntrack表中的最大数量? 有了最近的内核,什么呢

 sysctl net.ipv4.netfilter.ip_conntrack_max 

…或者与一些较旧的内核,

 sysctl net.ipv4.ip_conntrack_max 

回到你身边? 你可以通过/etc/sysctl.conf或者暂时(直到下一次重启)通过sysctl -w net.ipv4.ip_conntrack_max

希望我有一个答案,为什么他们不同。 然而,要记住一个反向代理服务器的一件事情就是,您将为每个连接支付双重责任。 这是因为您有从客户端到反向代理的连接,然后从反向代理到Web服务器。

因此,如果您已经在前面安装了状态防火墙,则可能需要将连接跟踪全部放在您的反向代理上(或者也可能位于其一侧)。

把它放在一起会是这样的:

 # iptables -L -t raw Chain PREROUTING (policy ACCEPT) target prot opt source destination NOTRACK tcp -- anywhere anywhere tcp dpt:www NOTRACK tcp -- anywhere anywhere tcp spt:www Chain OUTPUT (policy ACCEPT) target prot opt source destination NOTRACK tcp -- anywhere anywhere tcp spt:www NOTRACK tcp -- anywhere anywhere tcp dpt:www 

在你的情况下,你可能不想跟踪回环-i lo

 $ iptables -t raw -A PREROUTING -i lo -j NOTRACK $ iptables -t raw -A OUTPUT -o lo -j NOTRACK 

当集装箱(docker)被使用时,我们偶然发现了这种情况。

不知道它是否有助于你的情况,但它看起来像主机操作系统上的netstat -nat将只显示连接主机的networking堆栈,而conntrack -L将显示主机及其所有容器的信息。

如果从conntrack -L报告的连接所涉及的容器中运行netstat -nat ,则应该看到列出的连接信息。