Два домашні маршрутизатори, жодного переспрямованого порту і VPN, який іноді все ж підключається. UDP це дозволяє, бо міжмережевий екран пропустить пакет, який зможе зіставити з потоком, що його машина вже почала. Це умовний трюк, а не функція, і умови легко перелічити, коли знаєш, що саме порівнює міжмережевий екран. Вони ж — причина того, що однакові профілі поводяться по-різному в різних мережах.

Порівняння, яке робить міжмережевий екран

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

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

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

Закріплення одного порту на кожному кінці

Стандартний UDP-порт OpenVPN — 1194, а lport задає порт джерела, з якого йде надсилання. Закріпіть обох партнерів, і вихідна четвірка кожного вказуватиме на порт, який слухає інший:

# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194

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

Де четвірка перестає збігатися

NAT, який відображає за призначенням, дає кожному партнеру інший зовнішній порт. Адреса, яку партнеру сказали використовувати, — не та адреса, що до нього доходить, тож вхідний пакет ні з чим не збігається і тихо відкидається.

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

Потоковим транспортам гірше. Рукостискання TCP відстежується крок за кроком, тож VPN на базі TCP узагалі не пробити в такий спосіб, і йому потрібен слухач десь на шляху.

Зазвичай першою здається одна сторона

На практиці дві мережі рідко поводяться однаково. Один маршрутизатор може давати передбачуване відображення, а інший — порти за призначенням, і результат — конфігурація, що працює між двома домівками й не працює з мобільної мережі. Звіти, що суперечать один одному, зазвичай описують дві різні пари маршрутизаторів. Жоден автор не помиляється, і жоден результат не узагальнюється.

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

Два партнери з публічними адресами IPv6 обходять усю проблему. Без перетворення зіставляти нічого, тому достатньо правила міжмережевого екрана, що називає партнерів, і проєкт перестає залежати від поведінки маршрутизатора.

Коли припиняти спроби

Хост із публічною адресою — надійна відповідь. Він може завершити тунель для обох партнерів або просто допомогти їм дізнатися поточну зовнішню адресу одне одного, і обидві схеми працюють незалежно від того, що роблять NAT. Керований оверлей дає ту саму координацію, якщо політика дозволяє.

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

Спершу спробуйте пряму схему, а потім запишіть, що побачили. Поведінка NAT і перехоплення, яке її показало, вартують більше за пару портів, яку ви зрештою використали, бо наступна мережа буде іншою. посібник OpenVPN 2.6 документує lport і параметри remote, від яких це залежить.

Схожі статті