Recentemente ho avuto una conversazione con una persona che aveva avuto problemi con le impostazioni del firewall aziendale. Il firewall cancella dalla propria tabella di stato qualsiasi connessione rimasta inattiva per più di 10 minuti. Purtroppo, quando riceve un segmento relativo a una connessione non presente nella tabella di stato, il firewall lo scarta silenziosamente. Ciò significa che possono essere necessari fino a 8 minuti prima che un'applicazione STCP si accorga di non poter più comunicare con il proprio endpoint e ristabilisca la connessione. Questo causava fastidio ai suoi utenti.
A questo punto ho suggerito di modificare l'applicazione per includere un messaggio di keep-alive configurabile a livello di applicazione. Purtroppo, modificare l'applicazione non è un'opzione praticabile. Inoltre, l'applicazione non imposta l'opzione SO_KEEPALIVE del socket, quindi nemmeno ridurre il timer di keep-alive a livello di sistema dalle 2 ore predefinite a 9 minuti risolverebbe il problema.
La soluzione consiste in un segmento di keep-alive a livello TCP generato da una terza parte. Si tratta di un segmento di keep-alive a livello TCP che sembra provenire dall'applicazione (utilizzando l'indirizzo IP del modulo come indirizzo di origine e la porta TCP dell'applicazione come porta di origine) e viene inviato all'indirizzo IP e alla porta dell'host remoto. Il firewall lo rileva come attività e mantiene la connessione nella propria tabella di stato.
La spiegazione e gli esempi relativi al mio strumento 3rd_party_keep_alive sono troppo lunghi per questo post sul blog, quindi potete trovare i dettagli qui.
