Розглянемо наступний сценарій:
- ваш 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 буде динамічно налаштований (припустимо, йому буде призначено 10.10.10.2 IP, з 10.10.10.1 PTP).
На цій стадії:
Якщо жоден маршрут не буде висунутий з віддаленого сервера OpenVPN до локального VPS, то в процесі маршрутизації нічого не зміниться, і ваше SSH-з'єднання виживе без проблем. У цьому випадку єдиним трафіком, що проходить через VPN, є той, який спрямований на віддалений сервер OpenVPN (10.10.10.1);
Якщо віддалений сервер OpenVPN відштовхне деякий маршрут, і особливо, якщо шлюз 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, буде NATET із відкритим 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: надавши набагато більш детальне запитання, ви отримали б набагато швидшу відповідь :-)