Подключен к Интернету через NAT на роутере D-Link DI-524UP.
Столкнулся с тем, что если я захожу по ssh на удаленный сервер и больше часа ничего на нем не делаю, то при попытке оживить такое соединение спустя час (например, нажатием Enter), ssh-клиент разрывает соединение вообще. В роутере можно посмотреть список всех активных записей в таблице NAT. Hа каждое TCP-соединение устанавливается время жизни в 1 час. Любой пакет в течение этого часа снова поднимает время жизни записи до максимума. Однако если спустя час запись все же удалится из таблицы, то исходящий пакет без флага SYN, относящийся все к тому же TCP-соединению, не создает в таблице NAT новой записи. Следовательно он не выходит наружу и ssh-клиент в итоге не получает в ответ ACK и рвет соединение.
Простым решением проблемы могло бы быть увеличение времени жизни TCP-сессий в NAT на DI-524UP до 2-х часов. Дело в том, что в большинстве операционных систем, включая FreeBSD и Windows, время неактивности TCP-соединения перед отправкой первого пакета keepalive по умолчанию составляет 2 часа (7200 секунд). Если бы пакеты keepalive успевали проходить через NAT, то TCP-соединение держалось бы неограниченно долго.
Более подробно проблема обсуждалась здесь:
http://groups.google.ru/group/fido7.ru. ... e10?hl=ru#
Просьба к разработчикам прошивки сделать время жизни TCP-сессии в NAT чуть больше 2-х часов. Или сделать возможность ручной настройки этого параметра через web-интерфейс. Другой способ - сделать возможность создания новой TCP-сессии в NAT, даже если исходящий пакет идет без флага SYN (например, так делает natd в FreeBSD).