如何使用 nftables 跟踪 nat 传出连接。只需查看 nat 统计信息,输出使用较多或较少的地址。
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,但应该有一些更好的实用程序 ;-)
答案1
iptables或者nftables没有进行 NAT:网络过滤器可以。iptables和nftables使用钩子网络过滤器发出一些“命令”来创建新的 NAT 状态。完成后,一切都将直接由网络过滤器(这就是为什么,对于两者iptables和nftables,只能看到一个nat表/类型的第一个数据包)。所以最终的NAT状态保持者是netfilter和它的conntrack子系统。
现在,netstat-nat
使用内核提供的文件/proc/net/nf_conntrack
来显示 conntrack 信息。如果此文件不可用(例如:没有完全 root 权限、在未映射此部分的容器中运行/proc
等),则可能会出现错误。我不知道为什么会这样,但无论如何,这是特定的 conntrack 后端工具:conntrack
(从conntrack 工具)完全依赖于较新的 API(网络链接) 而不是/proc
。从其手册页来看,等效命令(当然输出完全不同)将是:
conntrack -L -n
命令
[...]
-L --转储
列出连接跟踪或预期表
[...]
-E, --event
显示实时事件日志。
[...]滤波器参数
[...]
-n, --src-nat
过滤源 NAT 连接。
您甚至可以使用事件模式实时跟踪源 NAT 状态:
conntrack -E -n