поддерживайте ssh-соединение активным и постоянным во время переключения сетевых интерфейсов

Вопрос или проблема

Сценарий:

  1. На моем столе с ноутбуком, подключенным к Ethernet и соединенным с удаленным сервером по SSH
  2. Хочу перейти на другую сторону офиса с ноутбуком и переключиться на Wi-Fi без прерывания SSH-соединения

Я пробовал: сначала подключаться к Wi-Fi, а затем отключать Ethernet; и также отключать Ethernet сначала, а затем подключаться к Wi-Fi. Ни один из этих подходов не сработал. Также пробовал с серверами Ubuntu и OS X, а также с обеими ОС в качестве клиента. Никакого успеха.

Казалось бы, мне нужно каким-то образом сообщить моему SSH-соединению, что оно должно начать использовать новый подключенный сетевой интерфейс вместо старого отключенного интерфейса. Есть идеи?

Я понимаю, что мог бы просто находиться на Wi-Fi весь день, но не хочу этого делать. Я также понимаю, что могу просто работать в сессии screen на удаленном сервере, а затем повторно подключиться к этой сессии после смены интерфейсов, но и этого мне не хочется делать. Например, я мог бы передавать какую-то большую команду, такую как дамп базы данных по SSH, или у меня могут быть открыты файлы через SSHFS, или я просто хочу избежать неудобств с повторным подключением

Я подозреваю, что это решение не сработает для SSHFS и т.д., но вы можете обратить внимание на Mosh, который предоставляет поддержку роуминга хотя бы для оболочки.

Боюсь, что вы не можете этого сделать по определению. Сессия SSH проходит по TCP-соединению, которое определяется четырьмя параметрами (источник адреса, источник порта, адрес назначения, порт назначения). Вы не можете перенести существующее соединение на другой адрес на клиенте (не говоря уже о том, что операционная система разорвет соединение, когда интерфейс будет отключен).

NAT может усложнить эту картину, но не так, чтобы помочь вам.

Старая тема, я знаю, но ради полноты, так как я искал то же самое…

В Windows 7 или более новых версиях вы должны просто выбрать и адаптер Wi-Fi, и Ethernet-адаптер и выбрать “Мостовое соединение”. Это даст вам один IP-адрес для обоих, и вы теперь сможете отключать и подключать Ethernet по желанию (при условии бесперебойного покрытия Wi-Fi).

Я справляюсь с этим двумя способами:

Начать сессию с терминального сервера в вашем дата-центре (RDP/Windows и т.д.)

ИЛИ

Установить GNU или и запустить их после входа.

Я предпочитаю tmux, потому что screen довольно старая, но если вам разрешено устанавливать только поддерживаемые пакеты, screen находится в репозитории RHEL.

ИЛИ

Сделайте и то, и другое.

Вы можете объединить соединения Ethernet и Wi-Fi.

Вот как я это делаю на RHEL:

# Запустите от имени sudo:
$ sudo -i

$ modprobe bonding

# Чтобы включить после перезагрузки, добавьте " bonding " в:
$ vi /etc/modules-load.d/bonding.conf

# Получите идентификаторы ваших сетевых интерфейсов
$ nmcli device status | grep -E "wifi|eth"
  # enp0s31f6   ethernet  connected  
  # wlp58s0     wifi      connected  

# Добавьте новые соединения
$ nmcli connection add type bond ifname bond0 con-name My-Connections-Bond
$ nmcli connection add type ethernet ifname enp0s31f6 master My-Connections-Bond con-name My-Eth-Connection
$ nmcli connection add type wifi ifname wlp58s0 master My-Connections-Bond ssid My-SSID con-name My-Wifi-Connection
  
# Добавьте свои учетные данные Wi-Fi
$ nmcli connection modify My-Wifi-Connection wifi-sec.key-mgmt wpa-psk

$ nmcli connection edit My-Wifi-Connection

    nmcli> set wifi-sec.psk YOUR-PASSWORD  
    nmcli> save
    nmcli> quit

# Включите соединения
$ nmcli connection up My-Connections-Bond
$ nmcli connection up My-Eth-Connection
$ nmcli connection up My-Wifi-Connection
  

Это должно позволить вам перемещаться между вашими соединениями Wi-Fi и Ethernet и поддерживать ваше текущее SSH, VPN и т. д. соединения.

Кредиты: https://fedoramagazine.org/bond-wifi-and-ethernet-for-easier-networking-mobility/

Проблема, вероятно, в том, что ваш исходный IP-адрес меняется, когда вы переключаетесь между проводным и Wi-Fi. Это помешает SSH-сессиям вернуться.

Я решал это в Linux, подключаясь через VPN и обеспечивая, чтобы VPN-соединение всегда давало одинаковый IP для вашей учетной записи (это не сложно обеспечить, но вероятность высока, что вы уже по умолчанию получите одинаковый IP через VPN, если он доступен, но лучше обеспечить это для уверенности). Я в основном использую vtun, но openvpn тоже подходит. Убедитесь, что ваши соединения проходят через VPN (правильная маршрутизация, переданные префиксы,…)

Я мог быть отключен от кабеля даже на 5 минут, а затем подключиться к Wi-Fi и всё еще оставаться подключенным ко всем своим SSH-сессиям. Постоянный ping, mtr, htop,… просто продолжают работать, когда VPN восстанавливается, как будто ничего не произошло.

Сделать это легко нельзя.

Я могу указать вам на ряд дорогостоящих приложений, которые позволяют поддерживать сессию telnet или SSH при переходе между IP-адресами или точками доступа, или даже на время длительного отключения сети, но они, по сути, достигают этого, создавая всегда открытое серверное соединение для клиентского компьютера, так что сервер не знает, что соединение изменилось или было прервано.

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

Тем не менее, я наткнулся на screen, который утверждает, что создает постоянные SSH-сессии, что может на самом деле сработать… попробуйте.

Попробуйте быть только на Wi-Fi, когда вы впервые запускаете SSH-сессию. Затем подключите Ethernet. Это должно позволить новым соединениям проходить через Ethernet, но установленное соединение останется на Wi-Fi. По крайней мере, я видел, что это работает так на OSX, так что ОС/аппаратное обеспечение могут отличаться.

Я почти уверен, что вы можете сделать это с некоторым количеством хаков с использованием ВМ и туннелирования.

Это не тестировалось, но дайте знать, если это действительно сработает.

  1. Создайте гостевую ВМ с 2 интерфейсами, 1 мостовым адаптером (к Wi-Fi) и 1 с сетью только для хоста
  2. Пусть ВМ имеет 192.168.0.25 для мостового адаптера к Wi-Fi и 192.168.56.5 для только хоста.
  3. Внутри ВМ создайте SSH-соединение с туннелем к порту 22 удаленной стороны ssh -L 10022:remote.server.example.com:22
  4. Теперь подключитесь через туннель. ssh 192.168.56.3 -p 10022
  5. Когда вы потеряете соединение Wi-Fi, переключите адаптер на ВМ на адаптер Ethernet.
  6. Надеюсь, это не обломает или не испортит таблицу маршрутизации

Дайте знать, если сработает.

1. Способ ретрансляции соединения

теоретическая схема

[ ssh сервер ] <=== tcp 22 ==== ПроксиСервер
                                   /\
                                   ||
     обернутое tcp соединение (виртуальная сессия с повторным подключением/перепередачей)
                                   ||
[ ssh клиент ] ==== stdio ===> ПроксиКоманда

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

2. Инструменты реализации

вот некоторые инструменты, которые сохраняют ваше SSH-соединение в случае изменения Wi-Fi или колебаний сети
(без разрыва сессии)
(может пережить гибернацию, но не может пережить перезагрузку)

  1. Android телефон с хорошим оборудованием (samsung10+)
    2. Установить VMOS apt на телефон для корневой среды ВМ или использовать любую ВМ для подключения к ноутбуку, но используйте VirtualBox, так как это секретный способ
  2. Загрузиться в живую Linux ОС, такую как NST
  3. Используйте функцию хот-спота на своем телефоне (Android 10) вместе с Bluetooth хот-спотом и также USB-шаринг от телефона ко всем посетителям. Все одновременно подключаются к вашему телефону как к основному источнику сети или позволяют подключаться к Linux ВМ, используя соединения от телефона и Wi-Fi одновременно
  4. Создайте разработку Windows 10 ОС на Hyper-V и запустите все 3 устройства вместе, так как все параметры сети подключены (pan, eth0, wlan0, usbnet) хот-спот, репитер и USB-шаринг от телефона, также хот-спот и USB-шаринг на VM Windows 10 с Wi-Fi и еще один хот-спот из настроек ОС разработчика Windows 10
  5. Проще использовать Tor и i2p для более быстрого настроя, но это не обязательно
  6. Запустите ssh на всех 3, или подключитесь, используя обычные предпочтения для ssh-соединения. Это должно дать вам возможность летать, как орел

Ответ или решение

Краткое введение

В мире IT поддержание непрерывного SSH-соединения при смене сетевых интерфейсов (например, Ethernet на Wi-Fi) становится все более важной задачей для профессионалов, работающих в условиях мобильности. Эта статья исследует методы, позволяющие достигнуть стабильности соединения SSH, даже когда сетевые соединения меняются. Рассматриваются возможные решения, включая Bonding, использование VPN, и альтернативные программы для управления SSH-сессиями.

Проблема

Большинство пользователей сталкиваются с проблемой разрыва SSH-сессии при смене сетевого подключения. Это связано с тем, что SSH использует TCP соединение, которое определено набором параметров (IP-адрес источника, порт источника, IP-адрес назначения, порт назначения). При смене сетевого интерфейса меняется IP-адрес источника, что приводит к завершению активной SSH-сессии.

Решение

Существует несколько способов решения этой проблемы, каждый из которых подходит для различных сценариев использования. Рассмотрим их подробнее.

  1. Bonding

Bonding объединяет несколько сетевых интерфейсов в один логический интерфейс. Это может быть особенно полезно для пользователей RHEL и систему Ubuntu.

Для настройки bonding делаем следующее:

# Получаем статус сетевых интерфейсов
$ nmcli device status | grep -E "wifi|eth"

# Создаем объединение
$ nmcli connection add type bond ifname bond0 con-name My-Connections-Bond
$ nmcli connection add type ethernet ifname enp0s31f6 master My-Connections-Bond con-name My-Eth-Connection
$ nmcli connection add type wifi ifname wlp58s0 master My-Connections-Bond ssid My-SSID con-name My-Wifi-Connection

# Добавляем Wi-Fi credentials
$ nmcli connection modify My-Wifi-Connection wifi-sec.key-mgmt wpa-psk
$ nmcli connection edit My-Wifi-Connection
nmcli> set wifi-sec.psk YOUR-PASSWORD  
nmcli> save
nmcli> quit

# Активируем соединение
$ nmcli connection up My-Connections-Bond

Такое объединение позволяет безболезненно переключаться между Wi-Fi и Ethernet без разрыва активной SSH-сессии.

  1. Перманентные VPN-соединения

Использование VPN может также обеспечить непрерывность SSH-сессии, даже если IP-адрес изменяется. Подключение через VPN создает постоянный туннель, что позволяет сохранить соединение, даже если сетевой интерфейс сменяется. Для реализации:

  • Настройте VPN таким образом, чтобы он предоставлял постоянный IP-адрес для вашей учетной записи.
  • Убедитесь, что маршрутизация настроена корректно, чтобы трафик SSH проходил через VPN.
  1. Использование утилит, таких как ‘screen’ или ‘tmux’

Хотя вы указали на нежелание использовать ‘screen’ или ‘tmux’ из-за их природы управления сессиями, стоит упомянуть, что эти утилиты обеспечивают возможность восстановления сессий. В случае разрыва SSH-соединения вы можете снова подключиться к сессии, несмотря на временное отключение.

Для установки и использования ‘tmux’:

# Установка
$ sudo apt-get install tmux

# Запуск сессии
$ tmux

# Чтобы отсоединиться, нажмите Ctrl+b, затем d. Для повторного подключения:
$ tmux attach
  1. Использование Mosh

Mosh (Mobile Shell) – это альтернатива SSH, разработанная специально для работы в условиях нестабильных сетей. Она поддерживает перемещение между IP-адресами и работу с временными потерями соединения, что делает ее полезной для пользователей, часто перемещающихся между сетевыми интерфейсами.

Вывод

Сохранение активных SSH-соединений при смене сетевых интерфейсов представляет собой серьезный вызов, но существует ряд методов и инструментов, позволяющих это осуществить. Выбор наиболее подходящего зависит от конкретной ситуации и доступных ресурсов. Несмотря на то что использование ‘screen’, ‘tmux’ или альтернативных SSH-программ, таких как ‘Mosh’, имеет свои ограничения, они все же обеспечивают необходимую гибкость и надежность. Bonding и постоянные соединения через VPN – более сложные, но эффективные решения для управления сетевыми подключениями.

Оцените материал
Добавить комментарий

Капча загружается...