如何使用 nftables 跟踪 nat 传出连接。只需要查看 nat stats,或多或少使用了哪些输出地址。
root@nat-1:~# nft list table nat
table ip nat {
chain post {
type nat hook postrouting priority 100; policy accept;
ip saddr 10.0.0.0/8 oif "bond0.926" snat to 19.246.159.1-19.246.159.7
}
chain pre {
type nat hook prerouting priority -100; policy accept;
}
}
netstat-nat 适用于 iptables,但不再适用于 nftables。
netstat-nat -S
Could not read info about connections from the kernel, make sure netfilter is enabled in kernel or by modules.
我当然可以使用 tcpdump,但应该有一些更好的实用程序 ;-)
iptables或nftables不做 NAT:netfilter做。iptables和nftables在netfilter中使用钩子来给出一些“命令”来创建新的 NAT 状态。一旦完成,这一切都由netfilter直接处理(这就是为什么对于iptables和nftables,只能看到 nat 表/类型的第一个数据包)。所以最终 NAT 状态保持器是 netfilter 及其 conntrack 子系统。
现在,
netstat-nat
使用内核提供的文件/proc/net/nf_conntrack
来显示 conntrack 信息。如果此文件不可用(例如:没有完全的 root 权限、在没有映射这部分的容器中运行/proc
等),您可能会收到错误消息。我不知道为什么不是,但无论如何,这是特定的 conntrack 后端工具:(conntrack
来自conntrack-tools)它完全依赖于较新的 API(netlink)而不是/proc
. 从其手册页中,等效命令(当然输出完全不同)将是:您甚至可以使用事件模式实时跟踪源 NAT 状态: