У меня ненадежное сетевое соединение между двумя компьютерами: иногда активные соединения TCP теряются по независящим от меня причинам. Я хочу установить надежное TCP-соединение между двумя компьютерами.
Если бы сеть была надежной, я бы просто запустил ssh -L 1234:localhost:1234 remotehost
сервер, прослушивающий порт 1234 remotehost
, и указал бы на клиента localhost:1234
. Но если соединение ssh умирает, то и переадресованное соединение. Как я могу организовать автоматическое восстановление соединения между клиентом и сервером?
Non-решения:
- Это не для интерактивных приложений, поэтому экран не применяется.
- Это не просто автоматическое переподключение SSH-туннеля, а-ля autossh . Я хочу продолжать использовать то же туннельное TCP-соединение, а не начинать новое.
- В принципе, VPN может помочь. Но это кажется излишним, когда я просто хочу одно TCP-соединение, и я бы хотел, чтобы решение работало, даже если у меня нет прав root ни с одной стороны.
У меня тусклое воспоминание о программе, которая называется rocks
именно это, но кажется, что она упала с лица сети. Я в основном интересуюсь Linux с обеих сторон (хотя я ожидаю, что программа на этом уровне будет переносимой на другие устройства), но если вам известна программа, которая работает между QNX и VMS, тем лучше.
scp
. Я отвечал w / ssh keepalive на основе вашего примера переадресации портов. Re: flaky downstream hop, вы ничего не можете сделать, кроме как создать ssh-сессию с keepalive, которые являются более терпимыми (т. Е. Разрешить больше отброшенных keepalive с помощьюServerAliveInterval > 0
andServerAliveCountMax > 3
). NAT требует меньших интервалов keepalive. Ключевой вопрос заключается в том, чтобы определить, в чем заключается проблема, и соответственно адаптировать ее. Поместите варианты,.ssh/config
чтобы они всегда были для васrocks
реализацию ... хотя это, очевидно, реальное препятствиеОтветы:
Является ли старое необслуживаемое надежное гнездо ( скалы ), что вы ищете?
источник
Единственный известный мне протокол с этой возможностью - это MPTCP . Он прозрачен для прикладного уровня, поэтому SSH поверх MPTCP должен просто работать. Он может запускать базовые TCP-соединения по разным путям с разными IP-адресами, поэтому в принципе его можно использовать для миграции вашего SSH-соединения в VPN-подключение и из него в зависимости от того, установлено ли VPN-подключение.
Я не знаю много о зрелости реализаций MPTCP, но дизайн протокола выглядит довольно надежным.
Он должен защищать ваши SSH-соединения от потери из-за нестабильного сетевого подключения. Это не защитит вас от того, кто хочет разорвать ваше соединение SSH. Mitm все еще может ввести поврежденные данные, которые SSH обнаружит и разорвет соединение.
MPTCP-подобный метод переподключения, встроенный в протокол SSH, был бы тем методом, который я мог бы себе представить, поддерживая соединение в течение максимально долгого времени. Но я не думаю, что такая функция была разработана для протокола SSH.
источник
Вы можете использовать,
daemontools
чтобы держать порт SSH вперед; он не обязательно будет поддерживать программы, зависящие от соединения, живыми, пока он не работает (как предположительно, когда ssh отключается, локальный порт начнет отказывать в их соединениях), но это только начало.Я подозреваю, что есть некоторые
iptables
хитрости, такие как вызов этого порта для пакетов DROP, как только ssh forward уходит, поэтому подключающиеся программы просто знают, что пакеты исчезают, а не получают отказ. Я только учусьdaemontools
(снова), поэтому я не уверен, что вы можете запустить собственный скрипт, когда служба умирает, но я подозреваю, что вы можете.источник
TCP делает это автоматически. Вам нужно только отключить или ослабить типичные практические методы очистки, используемые для уничтожения умирающих TCP-соединений. Отключите поддержку активности TCP для своего соединения и значительно увеличьте лимит чрезмерных повторных передач. В Linux, например, напишите большое число в
/proc/sys/net/ipv4/tcp_retries2
.Однако в современной сети брандмауэр с проверкой состояния пакетов может забыть о TCP-соединении, которое не может регулярно обмениваться пакетами, поэтому на вашем параде может пойти дождь.
источник
reasons beyond my control
, который я читаю как динамический IP-адрес или промежуточные блоки с состоянием. В таких случаях TCP keepalive может немного помочь. Но независимо от того, как вы настраиваете поддержку активности TCP, недостаточно поддерживать соединение, когда промежуточный ящик теряет состояние из-за перезапуска.