使用 nftables 查看 NAT 连接

使用 nftables 查看 NAT 连接

如何使用 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:网络过滤器可以。iptablesnftables使用钩子网络过滤器发出一些“命令”来创建新的 NAT 状态。完成后,一切都将直接由网络过滤器(这就是为什么,对于两者iptablesnftables,只能看到一个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 

相关内容