Я столкнулся с проблемой, с которой не могу справиться. Когда я захожу на VPS через SSH и пытаюсь установить VPN-соединение на этом VPS, SSH-соединение между VPS и моей машиной теряется. Я предполагаю, что это потому, что маршрутизация была изменена настройками VPN. Как этого избежать?
Вам нужно добавить route-nopull
вариант (и удалить redirect-gateway
если он существует) в файл конфигурации вашего клиента OpenVPN на вашем VPS.
Таким образом, подключение к VPN-серверу не приведет к изменению каких-либо маршрутов на вашем VPS, поэтому вы сможете самостоятельно настроить те, которые вам нужны.
Рассмотрим следующий сценарий:
В таком сценарии с вашего компьютера (предположим, что ваш компьютер 9.8.7.6/24 с def-gw 9.8.7.254) вы можете успешно установить SSH-соединение с 4.3.2.1. Следовательно, оба хоста 4.3.2.1 и 9.8.7.6 могут успешно подключаться друг к другу.
Теперь, когда такое SSH-соединение установлено, предположим:
На этом этапе:
ЕСЛИ ни один маршрут не будет отправлен с удаленного сервера OpenVPN на ваш локальный VPS, тогда ничего не изменится в плане маршрутизации, и ваше SSH-соединение выживет без каких-либо проблем. В этом случае единственный трафик, проходящий через VPN, направлен к удаленному серверу OpenVPN (10.10.10.1);
ЕСЛИ удаленный сервер OpenVPN отодвинет некоторый маршрут, особенно если шлюз по умолчанию VPS будет заменен на 10.10.10.1 (удаленная конечная точка OpenVPN), ЗАТЕМ у вас проблемы. В этом случае вы проходите через туннель ВСЕ исходящий IP-трафик (за исключением самого OpenVPN) внутри VPN.
Во втором случае (замена def-gw сразу после установки VPN-соединения) ваше предыдущее SSH-соединение «зависнет» из-за асимметричной маршрутизации:
Другими словами: как только соединение VPN будет установлено, ваш обратный маршрут от VPS к вашей машине изменится и ... это нехорошо (несколько сетевых устройств на обратном пути могут распознать такой асимметричный путь и просто отбрасывайте пакеты).
Кроме того, высока вероятность того, что ваш удаленный сервер OpenVPN действует как NAT-бокс: весь трафик, поступающий из VPN, будет преобразован через NAT с общедоступным IP-адресом удаленного сервера OpenVPN. Если это правда, то ничего больше нет ... "не хорошо", но определенно "плохо", что касается вашего SSH-соединения: обратный трафик, в дополнение к тому, чтобы вернуться по другому маршруту, возвращается на вашу машину с другим исходным IP (один из публичных интерфейсов VPN-сервера).
Как решить эту проблему?
Действительно, довольно легко.
Просто проинструктируйте ваш VPS сервер не направлять трафик на вашу машину по VPN, а вместо этого полагаться на предыдущий маршрут. Это должно быть так же просто, как добавить перед запуском OpenVPN:
route add -host 9.8.7.6 gw 4.3.2.254
где:
P.S .: задав более подробный вопрос, вы бы получили гораздо более быстрый ответ :-)
Лично я предпочитаю, чтобы все подключения к SSH проходили через VPN. В случае активного ssh-соединения до установления VPN, ему необходимо повторно подключиться из-за изменения маршрута.
Рекомендую использовать autossh
В конфигурации вашего ssh-клиента просто добавьте .ssh/config
Host *
ServerAliveInterval 300
ServerAliveCountMax 2
BatchMode yes
У меня была эта проблема, я попробовал все рекомендуемые решения, но все же моя проблема не была решена!
После многих попыток решения я использовал screen
команда. (мой VPN-клиент - cisco-any-connect).
$ screen -R VPN
$ openconnect -b "your server"
После ввода учетных данных сразу нажмите ctrl + a + d и вернитесь к сеансу.
Это может помочь:
ставить TCPKeepAlive=yes
в твоем /etc/ssh/sshd_config
Из
man sshd_config | less +/'^ *TCPKeepAlive'
TCPKeepAlive
Указывает, должна ли система отправлять сообщения поддержки активности TCP на другую сторону. Если они будут отправлены, потеря связи или сбой одной из машин будет должным образом замечена. Однако это означает, что соединение прервется, если маршрут временно отключится, и некоторых людей это раздражает. С другой стороны, если пакеты поддержки активности TCP не отправляются, сеансы могут зависать на сервере на неопределенное время, оставляя `` призрачных '' пользователей и потребляя ресурсы сервера.
По умолчанию
yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set to
нет ''.
После подключения к VPN ssh отключается, потому что ssh-трафик с сервера проходит через VPN-сервер. Чтобы этого избежать, перед подключением VPN выполните следующую команду.
route add -host your-machine-public-ip gw Server-gatway-ip dev eth0
your-machine-public-ip: IP-адрес вашей машины, с которой вы используете SSH. Server-gatway-ip: IP-адрес шлюза / маршрутизатора этого сервера.
Приведенная выше команда перенаправит трафик через данный шлюз, а не через VPN-сервер.