dpi:opt_cgnat:cgnat_faq:cgnat_faq_3 [Документация VAS Experts]

Это старая версия документа!


3 После подключения NAT стали отваливаться неактивные SSH сессии

Действительно, время жизни сессии в NAT ограничено, т.к. количество сессий у абонента - ограниченный ресурс и большое количество мертвых сессий в пуле уменьшает производительность NAT и общую.

У NAT нет возможности отличить, умерла сессия аварийно или просто в ней нет никакой активности, и закрывает такие долго висящие сессии по таймауту неактивности. Такое поведение предусмотрено стандартом и поддержано большинством производителей CG-NAT.

В СКАТ время жизни сессий можно корректировать следующими параметрами

lifetime_flow=60
lifetime_flow_long=600

где lifetime_flow_long время жизни в секундах неактивных TCP-сессий, lifetime_flow остальных.

Но не следует делать эти настройки слишком большими, т.к. тогда может слишком разрастись таблица сессий и это повлияет на производительность CG-NAT, а также у абонента может закончится лимит сессий (который задается в параметрах nat пула).

Поэтому при необходимости поддержания долгоиграющих неактивных соединений рекомендуется использовать механизм tcp keep-alive, когда периодически в сессии передается пустой пакет, который сигнализирует, что сессия все еще активна.

Настроить tcp keep-alive можно как индивидуально для приложения на стороне сервера или клиента, так и на уровне операционной системы для всех приложений сразу.

Пример настройки на ssh сервере

в файл /etc/ssh/ssh_config добавляем строку
ServerAliveInterval 60

Пример настройки на ssh клиенте

в файл ~/.ssh/config добавляем строки
Host *
  ServerAliveInterval 60
или в командной строке
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60 user@example.com

Пример настройки для всех приложений в centos

в файл /etc/sysctl.conf добавляем строки
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 20