TCP Keepalive и межсетевой экран убивают неактивные сеансы

10

На сайте клиента сетевая команда добавила межсетевой экран между клиентом и сервером. Это приводит к отключению простаивающих соединений после примерно 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-соединения.

Карлос А. Ибарра
источник
2
Вам не хватает описания того, какие порты или протокол (ы) клиенты используют для подключения к серверу. Это SSH?
ewwhite
Определение брандмауэра также может помочь.
Skaperen
3
Проверьте, активирован ли keepalive для сокета, выполнив команду netstat --timers -tn, и проверьте ключевое слово «keepalive» (так как оно должно активироваться программным обеспечением на сокете). Более подробная информация здесь: tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html Также проверьте значения таймера, первое значение равно секундам до следующего пакета keepalive, а третье - количество ожидающих пакетов keepalive, ожидающих ответ (если я правильно помню)
Виктор Джерлин
1
пожалуйста, посмотрите на это: linux-tips.com/t/how-to-keep-ssh-sessions-alive/255 и это: access.redhat.com/solutions/23874
P.Goli
2
Люди в вашей сети, вероятно, не правы. Если они используют межсетевой экран с отслеживанием состояния (они почти наверняка), запись требуется для каждого установленного соединения. Без простоя тайм-аут памяти на брандмауэре будет протекать, и в конечном итоге брандмауэр закончится и аварийно завершит работу. У них определенно есть время простоя где-то ...
Джеймс Шиви

Ответы:

1

Брандмауэр Statefull проверяет пакеты, а также подтверждает, живо ли соединение. Я считаю, что брандмауэр должен также точно настраивать параметры так же, как компьютеры. По умолчанию многие брандмауэры поддерживают открытые соединения только в течение 60 минут, но это время может меняться в зависимости от поставщика.

У некоторых поставщиков будут такие функции, как TCP Intercept, TCP State Bypass и Dead Connection Detection, которые позволят обрабатывать особые ситуации, подобные вашей.

Другой вариант - настроить сам брандмауэр на те же параметры, что и на серверах, чтобы убедиться, что все согласовано.

На брандмауэре cisco у вас есть следующая команда для его настройки.

имя хоста (config) # время ожидания функции

timeout conn hh: mm: ss - время простоя, после которого соединение закрывается, между 0: 5: 0 и 1193: 0: 0. По умолчанию это 1 час (1: 0: 0).

у вас есть несколько параметров в соответствии с вашими потребностями.

Я бы посоветовал поговорить с командой, которая управляет брандмауэром, и настроить время в соответствии с вашими потребностями или проверить функциональность.

Хьюго
источник