为什么conntrackd不能复制状态?

我遇到了主动/主动防火墙集群的问题,防火墙中的连接跟踪状态似乎没有被复制。

它是主动/主动的,因为我有两个路由器通过不同的ISP连接,并通过BGP提供的networking范围。 数据如何被路由返回由BGP确定。 所以路由是不对称的。 这两个防火墙在内部networking上联网在一起,我有一个虚拟IP作为Windows服务器的默认路由。

当两个防火墙都在运行,并且内部服务器尝试连接时,通过辅助防火墙(没有连接状态logging的防火墙)回复。 因此,回复被删除,而不是路由到发起请求的服务器。

我以为conntrackd会解决这个问题,但我似乎无法得到它的工作。 也许我误解了它是如何工作的。 我可以得到conntrackd复制iptables的状态吗? 它是否在主动/主动模式下工作? 国家是否实时复制?

这是我的conntrackd.conf文件包含的内容。

Sync { Mode ALARM { RefreshTime 15 CacheTimeout 180 } Multicast { IPv4_Address 225.0.0.50 Group 3780 IPv4_Interface 10.0.0.100 Interface eth2 SndSocketBuffer 1249280 RcvSocketBuffer 1249280 Checksum on } } General { Nice -20 HashSize 32768 HashLimit 131072 LogFile on Syslog on LockFile /var/lock/conntrack.lock UNIX { Path /var/run/conntrackd.ctl Backlog 20 } NetlinkBufferSize 2097152 NetlinkBufferSizeMaxGrowth 8388608 Filter From Userspace { Protocol Accept { TCP } Address Ignore { IPv4_address 127.0.0.1 # loopback IPv4_address 10.0.0.100 # dedicated link0 IPv4_address 10.0.0.101 # dedicated link1 IPv4_address xxx130 # Internal ip } } } 

另一个conntrackd与10.0.0.101的multicast节中的IPv4_interface相同。 filter部分的内部IP结束于131

我已经设置了防火墙规则来接受input到225.0.0.50/32和输出到225.0.0.50/32。

我在这里设置模式为ALARM,但是首先尝试了FTFW。 两者似乎都不起作用。

我的内核版本是:3.11.0。

对不起,我的剪切和粘贴不能从虚拟框窗口工作。 但是,让我只是说,当我运行:sudo conntrackd -i它列出作为输出一个ESTABLISHED tcp连接,这是我用ssh创build的连接。

但是,在另一台路由器上,相同的命令不产生输出。 我认为这应该意味着国家没有转移到另一台路由器上。

有任何想法吗?


更新:我在每台机器上运行了tcpdump -i eth2,并且我可以看到从另一个路由器本地到达多播地址225.0.0.50端口3780的长度为68字节的UDP数据包。

如果我启动一个SSH连接,我会立即看到tcpdump的活动,断开连接也是一样的。 否则,该消息的定期心跳会通过。 所以很明显,路由器正在发送数据包,但是被忽视而忽视它们? 有一些隐藏的debugging,我可以打开?


Update2:好的,经过几天的search和查看源代码之后,我发现conntrackd正在复制这个状态,但是它最终在一个外部caching中。 要提交规则,您需要运行conntrackd -c。 显然conntrackd被devise为在主动/备份模式下使用。

似乎在一个叫做CacheWriteThrough的点上引入了一个新的选项。 但是,然后被删除。 conntrack可以主动/主动吗? 我似乎无法find答案。

好吧,经过几天的挫折和小文档,甚至阅读源代码。 我已经知道了。

 Mode FTFW { [...] DisableExternalCache On } 

禁用外部caching是非对称路由场景所需的。 否则,对于要使用缺省closures的活动/备份,并在keepalived中设置notify_master,notify_backup,notify_fault设置。

CacheWriteThrough的设置被删除,并replace为DisableExternalCache。

这些脚本用于将外部连接状态caching提交给持有IP的路由器。 使用DisableExternalCache时,不应该需要它们,因为状态已经提交。