为什么 iptables NAT 在 mininet 中可以工作,而 iptables 日志记录却不能?

Why does iptables NAT work in mininet, but iptables logging does not?

我查了NATclass在mininet.nodelib,是通过iptables实现的:

self.cmd( 'iptables -I FORWARD',
              '-i', self.localIntf, '-d', self.subnet, '-j DROP' )
self.cmd( 'iptables -A FORWARD',
              '-i', self.localIntf, '-s', self.subnet, '-j ACCEPT' )
self.cmd( 'iptables -A FORWARD',
              '-o', self.localIntf, '-d', self.subnet,'-j ACCEPT' )
self.cmd( 'iptables -t nat -A POSTROUTING', 
              '-s', self.subnet, "'!'", '-d', self.subnet, '-j MASQUERADE' )

然而,当我安装日志记录规则时:

iptables -A INPUT -j LOG --log-prefix "IPT log: " --log-level 4

/var/log/kern.log 文件中没有一个 /related/ 条目出现(它有效,如果我 运行 没有 mininet 的相同规则)。

提前致谢!

编辑:

更准确地说,这是我尝试做的事情:

mininet>h2 iptables -A OUTPUT -j LOG --log-prefix "IPT log: " --log-level 3
mininet>h2 iptables -I OUTPUT -j LOG --log-prefix "IPT log: " --log-level 3
mininet>h2 ping h0
.... normal ping output ....
mininet>h2 wget h0
.... index.html being saved on disk ....
mininet>h2 grep "IPT log" /var/log -R

grep 所示,尽管 wget 执行的 ping 和 TCP 通信发送了多个 ICMP 消息,但日志中没有任何相关行。

编辑2:

这是我的 iptables 规则,经过实验(抱歉文字图片):

INPUT 链将只包含目的地为本地机器的数据包,而不包含正在转发的数据包。

节点(在这种情况下,包含 iptables 规则的机器)路由(转发)的数据包将通过以下链:

PREROUTING -> FORWARD -> POSTROUTING

如果你想记录所有被转发的数据包,你需要将INPUT链更改为FORWARD链你的日志规则。

如果你想只记录正在 NATd 的数据包,你需要使用 POSTROUTING 链和 nat table 在你的日志规则中。

编辑

由于针对 LOG 的 iptables 规则(在您实验的 OUTPUT 链中)被触发(根据您的屏幕截图),我们可以排除任何 iptables [日志规则]问题。

问题一定出在其他地方,例如日志记录工具服务(例如,syslog)。