У нас есть выделенный туннельный сервер SSH, который поддерживает несколько десятков удаленных хостов. Каждый хост создает обратный туннель к серверу с назначенными номерами портов, используя autossh для сохранения постоянных соединений. Это дает нам доступ к удаленным хостам через сервер. Все это прекрасно работало до недавнего времени ...
Comcast требовал от нас перехода от одного соединения к другому. Старый и новый модемы - это одна и та же модель, но на разных кабелях, и, конечно же, новое соединение имеет новый IP-адрес. Мы воспользовались возможностью и заменили серверное оборудование, но новый серверный ящик работает под той же ОС (Ubuntu 10.04 LTS) и OpenSSH (5.3p1), что и старый. Новый ключ хоста был сгенерирован и распространен на удаленные хосты.
После этого изменения все туннельные соединения стали нестабильными и обычно остаются в рабочем состоянии не более 10-15 минут. Autossh обнаруживает и повторно подключается, но из-за этого интерактивные сеансы довольно сложно использовать. Я не могу понять, в чем проблема.
Просматривая журнал на сервере, я вижу: «Получено отключение от x.x.x.x: 11: отключено пользователем», а затем туннель восстанавливается. Даже на уровне журнала DEBUG3 я не вижу ничего, что происходит до отключения на стороне сервера, только ожидаемые сообщения keepalive.
Соединения регулярно умирают, независимо от того, используются они или нет, и они умирают во время использования и передачи данных (например, в середине большого sftp). Не все соединения умирают одновременно - это кажется довольно случайным распределением.
На стороне сервера у нас ClientAliveInterval = 30, ClientAliveCountMax = 6 и TCPKeepAlive = yes.
На удаленных сайтах работает OpenSSH 5.6p1.
Я на грани ... Есть идеи, где мне искать?
Здесь полезный инструмент (для отладки сетевых подключений) - mtr, который представляет собой комбинацию traceroute и ping. Скажем, вы были на своей рабочей станции, вы бы сделали "mtr {remote-server-ip}". Вывод представляет собой матрицу (строки и столбцы) и отображает задержку и потерю пакетов при каждом переходе между вашим компьютером и удаленным сервером. Я использовал это на прошлой неделе, чтобы доказать интернет-провайдеру, что они отбрасывают ~ 40% пакетов на нашем T1 (что приводило к невозможности установить VPN-соединения).