Давайте рассмотрим следующий сценарий:
- ваш VPS имеет единый интерфейс Ethernet, настроенный с IP-адресом 4.3.2.1/24;
- ваш VPS может получить доступ к Интернету через шлюз по умолчанию 4.3.2.254
- ваш VPS еще не активировал какое-либо соединение OpenVPN; следовательно, нет активного интерфейса Tun
В таком случае на вашей машине (предположим, что ваша машина работает с 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 4.3.2.1;
- таким образом, новый интерфейс tun0 будет динамически сконфигурирован (предположим, ему будет назначен IP-адрес 10.10.10.2 с PTP 10.10.10.1).
На этом этапе:
Если ни один маршрут не будет перенаправлен с удаленного сервера OpenVPN на ваш локальный VPS, то с точки зрения маршрутизации ничего не изменится, и ваше SSH-соединение будет работать без проблем вообще. В этом случае единственный трафик, проходящий через VPN, - это трафик, направленный на удаленный сервер OpenVPN (10.10.10.1);
Если удаленный сервер OpenVPN будет отодвигать некоторый маршрут и EXPECIALLY если VPS по умолчанию шлюз будет заменен на 10.10.10.1 (удаленной OpenVPN конечной точки), ТОГДА у вас возникли проблемы. В этом случае вы туннелируете ВСЕ исходящий IP-трафик (за исключением самого OpenVPN) внутри VPN.
Во втором случае (замена def-gw сразу после установки VPN-соединения) ваше предыдущее SSH-соединение будет «зависать» из-за асимметричной маршрутизации:
- Трафик с вашей машины (9.8.7.6) на VPS (4.3.2.1) будет проходить по предыдущему, никогда не меняющемуся пути;
- Трафик с VPS (4.3.2.1) на ваш компьютер (9.8.7.6):
- без VPN (следовательно, изначально) был маршрутизирован через шлюз 4.3.2.254;
- после установления VPN-канала с соответствующей заменой def-gw маршрутизируется через VPN (10.10.10.1).
Другими словами: как только 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
где:
- 9.8.7.6 - публичный IP-адрес вашей машины
- 4.3.2.254 - это исходный шлюз по умолчанию вашего VPS.
PS: предоставив гораздо более подробный вопрос, вы бы получили гораздо более быстрый ответ :-)