Підключіться до офісного VPN, запустіть невеликий сервіс на порту 8443, надішліть адресу тунелю колезі й спостерігайте, як з'єднання не вдається, поки клієнт досі повідомляє про підключення. У тунелі нічого не зламано: адресу видано, сеанс активний, а пакети, які мали б нести відповідь, просто ніколи не пропускаються. Виконайте три перевірки нижче по черзі й зупиніться на тій, що не вдалася, бо кожна має своє виправлення і лише одна з них стосується VPN.

Почніть із того, куди насправді прив'язаний сокет

Перш ніж щось буде маршрутизовано, щось має слухати адресу, до якої викликач може дістатися. Сервери розробки — звичний винуватець, бо багато з них за замовчуванням прив'язуються до loopback і приймають лише з'єднання з тієї самої машини. Адреса тунелю не змінює цю прив'язку, і операційна система відмовить у з'єднанні задовго до того, як VPN узагалі буде задіяно.

ss -ltnp | grep 8443
netstat -ano | findstr 8443

Читайте стовпець локальної адреси, а не стан. 127.0.0.1:8443 означає лише loopback, і виправлення — прив'язка до 0.0.0.0 або до самої адреси тунелю. 0.0.0.0:8443 приймає на всіх інтерфейсах, що ширше, ніж більшість має на увазі, коли машина має й публічну адресу; 10.64.7.15:8443 — вузька версія, яка слухає лише там, куди може дістатися колега. Зверніть увагу й на назву процесу в тому самому виводі, бо загублений примірник із попереднього тесту — часта причина того, що порт виглядає відкритим і відповідає неправильним вмістом.

Потім запитайте, чи може щось маршрутизувати до цієї адреси

Адреса тунелю має сенс лише для вузлів, налаштованих надсилати цей префікс у тунель. Машина колеги має власну таблицю, і якщо для підмережі тунелю немає маршруту, пакет іде на шлюз за замовчуванням і гине в місці, яке гадки не має про існування адреси. Це питання маршрутизації на боці викликача, а не дозвіл на вашому боці.

Symptom from the callerWhat it usually meansWhere to look next
Connection refused immediatelyNothing is listening on the address the packet reachedThe bind address and the process owning the port
Connection times out with no replyA policy dropped the packet, or no route returnsServer forwarding, host firewall, cloud security group
Works from the same machine onlyListener is on loopback, or no route reaches the tunnel addressBind address, then the caller's route to that prefix

Сервер між двома клієнтами важить не менше. У звичайній схемі віддаленого доступу кожен клієнт відкриває вихідне з'єднання до шлюзу, і шлюз зберігає стан цих потоків, тож відповіді повертаються шляхом, який він уже знає. З'єднання від одного клієнта до іншого — це новий потік, який шлюз має прийняти й передати далі, і багато розгортань навмисно вимикають це, щоб тримати клієнтів ізольованими один від одного. Споживчі VPN-сервіси зазвичай ізолюють за замовчуванням; корпоративні шлюзи іноді дозволяють це за групами.

Перевірте напрямок, перш ніж щось змінювати на хості. Якщо адреса тунелю відповідає із самого шлюзу, але не від вузла-партнера, різниця в налаштуванні клієнт-до-клієнта на шлюзі, і жодне редагування локального брандмауера його не замінить.

Нарешті, знайдіть політику, що дозволяє потік

Між маршрутизованим пакетом і сервісом, що відповідає, стоять три рівні політики: рішення VPN-сервера про пересилання, брандмауер хоста й будь-яка хмарна група безпеки перед примірником. Усі три мають погодитися, і вони відмовляють по-різному, тому симптом із таблиці вище корисніший за повідомлення про помилку в браузері.

Брандмауер хоста — це рівень, який забувають після успішної прив'язки, бо правило, що дозволяє порт на інтерфейсі LAN, не дозволяє його автоматично на інтерфейсі тунелю. Правила, обмежені інтерфейсом, — правильний дизайн і водночас звична причина сервісу, що працює з офісу, але не з дому. Читайте область дії правила, а не номер порту.

Фільтрація з урахуванням стану пояснює зворотний випадок. Вихідне з'єднання з вашого ноутбука створює стан, і відповіді на нього пропускаються без вхідного правила. З'єднання колеги — цілком новий потік без стану за ним, тож йому потрібен явний дозвіл. Ця асиметрія і є вся причина, чому робочий сеанс браузера на вашій машині нічого не каже про доступність сервісу ззовні.

Коли одна перевірка не вдалася, змінюйте дизайн, а не тунель

Якщо вимога — щоб колега відкрив ваш локальний сервіс, чесна відповідь зазвичай механізм, побудований для вхідного доступу. Зворотний SSH-тунель — найменший: ваша машина вихідним з'єднанням підключається до хоста, до якого колега вже може дістатися, і слухач існує на цьому хості.

ssh -N -R 8443:127.0.0.1:8443 [email protected]

Ретранслятору потрібен GatewayPorts clientspecified у конфігурації SSH-сервера, інакше переданий слухач прив'язується до loopback на ретрансляторі, і колега натрапляє на ту саму відмову, що й раніше. Для всього, що живе довше за один день, кращий інструмент — балансувальник навантаження або ingress із перевіркою стану й сертифікатом для опублікованого імені, а тунель між локаціями з маршрутами для обох підмереж — правильна відповідь, коли дві мережі справді мають розмовляти.

Кожен із цих варіантів робить експозицію явною, і в цьому сенс. VPN переміщує пакети між мережами, на які ви вже були авторизовані; він не публікує сервіс і не перетворює ноутбук на хост, обернений в інтернет. Завдання — вирішити, який із трьох рівнів змінювати, і тунель рідко буває одним із них.

Схожі статті