У нас есть сеть, настроенная следующим образом:
MQTT Client -- TCP Forward (Netscaler) -- TLS Termination + TCP Forwarding (HAProxy) -- MQTT Server
По нескольким причинам нам нужно было включить TCP KeepAlives в HAProxy, потому что у клиента огромный тайм-аут, который не поддерживается сетевой инфраструктурой за HAProxy.
Согласно Wireshark, эти TCP-KA правильно отправляются от HAProxy к другим одноранговым узлам, но в некоторых сеансах TCP KeepAlives на стороне Netscaler не получает ACK, что приводит к разрыву соединения.
Теперь мне интересно, связана ли проблема с Netscaler или MQTT Client. KeepAlives обычно отправляется только следующему узлу или они являются своего рода "End2End"? Или другими словами - Кто должен подтверждать TCP-KeepAlives, отправленные HAProxy - Netscaler или Mqtt Client?