我在 DMZ 中安装了一台 Cisco ASA[0],上面有一对 Linux 机器,它们运行着 Keepalived 和 HAproxy,充当另一对 Windows 服务器(也在 DMZ 中)的负载平衡故障转移对。我确信 Keepalived 工作正常。我可以从 DMZ 中的另一台主机成功 ping 虚拟地址 (10.0.1.8);当我在主服务器 (10.0.1.6) 上停止 Keepalived 时,在备份服务器 (10.0.1.7) 接管虚拟地址之前,几次 ping 失败。当我在主服务器中重新启动 Keepalived 时,也发生了类似的几次失败。当主服务器或辅助服务器处于活动状态时,这台其他主机可以通过 HAProxy 查看托管在两台 Windows 服务器上的网页。
虚拟 IP 地址具有到外部地址(例如 1.2.3.8)的静态 NAT 映射。当我尝试从防火墙外部进行类似测试时,只有当主服务器处于活动状态时,才能 ping 到 1.2.3.8 - 当我停止主服务器上的 Keepalived 服务时,从防火墙外部 ping 失败,而从 DMZ 内部 ping 成功。
我可以看到,当我在主服务器上停止并重新启动 Keepalived 时,虚拟 IP 地址的 MAC 地址条目会发生变化,因此 ASA 似乎知道主服务器和辅助服务器何时处于活动状态。不过,当辅助操作系统处于活动状态时,它似乎拒绝对入站流量进行 NAT。我最好的猜测是 ASA 试图防止地址被欺骗,但在这种情况下,我真的希望 ASA 允许它。我不知道如何做到这一点(或者真的从哪里开始)。有什么建议吗?
[0] — 它实际上是故障转移配置中的一对,但我认为这并不相关。