Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 为什么conntrackd不能复制状态?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我的主动/主动防火墙群集出现问题,防火墙中的连接跟踪状态似乎没有被复制. 它是主动/主动的,因为我有两个通过不同ISP连接的路由器和一个通过BGP提供的网络范围.如何路由数据由BGP确定.因此路由是不对称的.这两个防火墙在内部网络上联网在一起,我有一个虚拟IP作为Windows服务器的默认路由. 当两个防火墙都在运行且内部服务器尝试连接时,回复通过辅助防火墙(没有连接状态记录的防火墙)返回.因此,
@H_772_15@我的主动/主动防火墙群集出现问题,防火墙中的连接跟踪状态似乎没有被复制.

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

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

我认为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 x.x.x.130 # Internal ip
    }
  }
}

除了具有10.0.0.101的多播部分中的IPv4_interface之外,另一个conntrackd是相同的.过滤器部分的内部IP结束于131

我已设置防火墙规则以接受225.0.0.50/32&的输入.输出到225.0.0.50/32.

我已将模式设置为ALARM,但首先尝试使用FTFW.似乎都没有用.

我的内核版本是:3.11.0.

抱歉,我的剪切和粘贴无法在虚拟框窗口中运行.但是,我只想说当我运行时:sudo conntrackd -i它将ESTABLISHED tcp连接列为输出,这是我用ssh创建的连接.

但是,在另一台路由器上,同一命令不产生输出.我认为应该意味着状态没有转移到另一个路由器上.

有任何想法吗?

更新:
我在每台机器上运行了tcpdump -i eth2,我可以看到从其他路由器本地到达的UDP数据包,这些数据包的目的地是多播地址225.0.0.50端口3780,长度为68字节.

如果我启动ssh连接,我会看到tcpdump上的立即活动,并且断开连接也是如此.否则,该消息的常规心跳就会通过.所以很明显路由器正在发送数据包,但是忽略了它们是conntrackd?我可以打开一些隐藏的调试吗?

updatE2:
好吧,经过几天的谷歌搜索和查看源代码,我发现conntrackd正在复制状态,但它最终在外部缓存.要提交规则,您需要运行conntrackd -c.很明显,conntrackd旨在用于主动/备份模式.

似乎在某个点上引入了一个名为CacheWriteThrough的新选项.但后来被删除了. conntrack能否主动/主动?我似乎无法找到答案.

解决方法

好吧,经过几天的挫折和很少的文档,甚至阅读源代码.我已经弄清楚了. @H_963_25@mode FTFW { [...] DisableExternalCache On }

禁用外部缓存是非对称路由方案所需的.否则,对于活动/备份,您希望使用关闭并在keepalived中设置notify_master,notify_BACkup,notify_fault设置.

设置CacheWriteThrough已删除并替换为DisableExternalCache.

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

大佬总结

以上是大佬教程为你收集整理的linux – 为什么conntrackd不能复制状态?全部内容,希望文章能够帮你解决linux – 为什么conntrackd不能复制状态?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。