hoo*_*enz 5 linux iptables conntrack
我有一个主动/主动防火墙集群的问题,其中防火墙中的连接跟踪状态似乎没有被复制。
它是主动/主动的,因为我有两个路由器通过不同的 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
除了具有 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 是否忽略了它们?我可以打开一些隐藏的调试吗?
更新 2:好的,经过几天的谷歌搜索和查看源代码,我发现 conntrackd 正在复制状态,但它最终在外部缓存中。要提交规则,您需要运行 conntrackd -c。显然,conntrackd 旨在用于主动/备份模式。
似乎在某个时候引入了一个名为 CacheWriteThrough 的新选项。但随后被移除。conntrack 可以做主动/不主动吗?我似乎无法找到答案。
好的,经过几天的挫折和很少的文档,甚至阅读源代码。我已经想通了。
Mode FTFW {
[...]
DisableExternalCache On
}
Run Code Online (Sandbox Code Playgroud)
对于非对称路由方案,您需要禁用外部缓存。否则,对于活动/备份,您希望使用默认关闭并在 keepalived 中设置 notify_master、notify_backup、notify_fault 设置。
CacheWriteThrough 设置已被删除并替换为 DisableExternalCache。
这些脚本用于将外部连接状态缓存提交给持有 IP 的路由器。使用 DisableExternalCache On 不需要它们,因为状态已经提交。
归档时间: |
|
查看次数: |
4390 次 |
最近记录: |