![持续监控 ip_conntrack,以便监控 NAT 路由器上的浏览情况](https://linux22.com/image/702840/%E6%8C%81%E7%BB%AD%E7%9B%91%E6%8E%A7%20ip_conntrack%EF%BC%8C%E4%BB%A5%E4%BE%BF%E7%9B%91%E6%8E%A7%20NAT%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E7%9A%84%E6%B5%8F%E8%A7%88%E6%83%85%E5%86%B5.png)
因此,我有一台服务器,它也为我的 LAN 执行 NAT(伪装),并将所有互联网流量转发到网关。
我需要知道我的局域网中谁在访问哪些网站。我不想走整个 SQUID 代理路线。
我(非常惊讶?)找不到任何可以轻松做到这一点的软件。
据我所知,/proc/net/ip_conntrack 应该包含我需要的所有信息,因为我的所有 LAN 连接都经过 NAT。
所以我编写了一个小脚本,只需 DNS 解析 ip_conntrack 中的所有条目并记录它们。
我的计划是简单地执行“tail -f /proc/net/ip_conntrack |my_script.pl”,然后完成它,但是 tail-f 似乎对该文件不起作用?它转储出很多行,然后停止。
我如何才能实时获取服务器上所有经过 NAT 的新连接?我是否错过了一款现成的软件,它能告诉我 LAN 上的谁正在通过此 NAT 与互联网上的哪个服务器通信?
答案1
这/proc/net/ip_conntrack
不是一个tail -f
可以工作的日志文件。它更像是一个在查询时返回内存当前状态的 API。
为了获得相同的结果,您可能可以添加 netfilter(iptables) 规则来记录您需要了解的流量。然后只需跟踪那些特定内核消息所指向的 syslog 文件即可。
虽然在我看来这或多或少是没有意义的,因为所用 IP 的反向 DNS 无法可靠地告诉您人们将要做什么。现在互联网的很大一部分都在 CDN 或 Amazon/Azure/Google/等云服务上。任何大型网站的反向 DNS 可能只会告诉您,您访问的大量内容都托管在众多云服务之一上。
答案2
还有一个很好的 netstat-nat显示由 netfilter/iptables 管理的 NAT 连接的工具。该程序从/proc/net/ip_conntrack
或读取其信息/proc/net/nf_conntrack
,这是 netfilter 的临时 conntrack 存储。
您只需要负责记录其输出并对其进行监控。