На сайте клиента сетевая команда добавила межсетевой экран между клиентом и сервером. Это приводит к отключению простаивающих соединений после примерно 40 минут простоя. Люди в сети говорят, что у брандмауэра нет тайм-аута для бездействующего соединения, но факт заключается в том, что неактивные соединения разрываются.
Чтобы обойти это, мы сначала сконфигурировали сервер (компьютер с Linux) с включенными TCP-сообщениями поддержки активности с tcp_keepalive_time = 300, tcp_keepalive_intvl = 300 и tcp_keepalive_probes = 30000. Это работает, и соединения остаются жизнеспособными в течение нескольких дней или более. Однако нам также хотелось бы, чтобы сервер обнаруживал мертвые клиенты и прерывал соединение, поэтому мы изменили настройки на время = 300, intvl = 180, зонды = 10, полагая, что если клиент действительно жив, сервер будет проверять каждые 300 с. (5 минут), и клиент будет отвечать ACK, и это не позволит брандмауэру рассматривать это как простое соединение и уничтожать его. Если клиент был мертв, после 10 проверок сервер прервал соединение. К нашему удивлению, бездействующие, но живые соединения уничтожаются примерно через 40 минут, как и раньше.
Wireshark, запущенный на стороне клиента, не показывает никаких сообщений активности между сервером и клиентом, даже если на сервере разрешены сообщения активности.
Что здесь может происходить?
Если настройки активности активности на сервере: время = 300, intvl = 180, пробники = 10, я ожидаю, что если клиент жив, но бездействует, сервер будет отправлять пробные проверки активности каждые 300 секунд и оставлять соединение в покое, а если клиент мёртв, он отправит один через 300 секунд, затем еще 9 проб каждые 180 секунд, прежде чем разорвать соединение. Я прав?
Одна из возможностей заключается в том, что брандмауэр каким-то образом перехватывает запросы проверки активности с сервера и не передает их клиенту, а тот факт, что он получил проверку, заставляет его думать, что соединение активно. Это обычное поведение для брандмауэра? Мы не знаем, что это за брандмауэр.
Сервер является узлом Teradata, и соединение происходит от клиентской утилиты Teradata к серверу базы данных, порт 1025 на стороне сервера, но мы видели ту же проблему с SSH-соединением, поэтому мы думаем, что это влияет на все TCP-соединения.
Ответы:
Брандмауэр Statefull проверяет пакеты, а также подтверждает, живо ли соединение. Я считаю, что брандмауэр должен также точно настраивать параметры так же, как компьютеры. По умолчанию многие брандмауэры поддерживают открытые соединения только в течение 60 минут, но это время может меняться в зависимости от поставщика.
У некоторых поставщиков будут такие функции, как TCP Intercept, TCP State Bypass и Dead Connection Detection, которые позволят обрабатывать особые ситуации, подобные вашей.
Другой вариант - настроить сам брандмауэр на те же параметры, что и на серверах, чтобы убедиться, что все согласовано.
На брандмауэре cisco у вас есть следующая команда для его настройки.
у вас есть несколько параметров в соответствии с вашими потребностями.
Я бы посоветовал поговорить с командой, которая управляет брандмауэром, и настроить время в соответствии с вашими потребностями или проверить функциональность.
источник