我正在尝试学习 nftables/nat 并进行一些简单的实验设置:
Machine1 (router):
- eth0 192.168.0.1
- eth1 192.168.1.1
Machine2:
- eth0 192.168.1.2
对于 Machine1,我设置了 NAT:
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip daddr 192.168.1.2 counter packets 0 bytes 0
ip saddr 192.168.1.2 counter packets 6 bytes 420
ip saddr 192.168.1.0/24 oif "eth0" snat to 192.168.0.1
}
}
NAT 工作正常,我可以从 Machine2 访问 192.168.0.1 (及更高版本)。
但是,我很难使用计数器:上面的数字来自wget stackoverflow.com
Machine2,远低于ls -l index.html
实际值(~180k)。我可以想象,这些只是传出的字节/数据包,传入的则没有被计算(我添加了计数器,daddr
希望得到这些)。
我错过了什么?
答案1
当连接经过 NAT 时,该连接将借助连接跟踪进行处理。这意味着只有连接的初始数据包(SYN、SYN-ACK、ACK)才能通过 NAT 规则。
其余的数据包将使用在 NAT 启动时设置的连接跟踪条目进行处理。
如果要统计数据包数量,则需要向表链中添加filter
规则FORWARD
。