Тригер портів проти перенаправлення портів для домашнього VPN-сервера
Тригер відкриває зіставлення лише після вихідного трафіку; перенаправлення зіставляє порт назавжди. Домашньому VPN-серверу потрібне друге, обмежене реальним слухачем.
Перенаправлення портів і тригер портів перебувають в одному меню на більшості домашніх маршрутизаторів, тому їх сприймають як два способи зробити одну роботу. Перенаправлення — це статичне правило: вхідне з’єднання до порту WAN перетворюється на фіксовану внутрішню адресу й порт, незалежно від того, чи відбувається щось інше. Тригер умовний: маршрутизатор стежить за вихідним трафіком і відкриває вхідне зіставлення лише після того, як вийде відповідне з’єднання. VPN-сервер чекає, поки хтось інший підключиться першим, тому саме ця умова є єдиним, чого він ніколи не може виконати.
Два правила з різними життєвими циклами
IPv4 NAT зберігає стан. Коли внутрішній хост надсилає пакет назовні, маршрутизатор створює зіставлення, щоб відповіді знайшли зворотний шлях; вхідний пакет, який не відповідає жодному зіставленню, відкидається, і саме ця поведінка тримає неоновлений комп’ютер поза інтернетом. Перенаправлення — постійний запис перетворення, доданий вручну. Тригер — тимчасова діра, яку охороняє шаблон трафіку.
Практична різниця — час. Перенаправлення існує з моменту збереження, доки хтось його не видалить. Спрацьоване зіставлення існує після спрацювання тригера і закривається за таймером простою, що вимірюється в хвилинах на споживчому обладнанні, або одразу під час перезавантаження.
Жодне з них не є безпечнішим в абстрактному сенсі. Перенаправлення постійно відкриває один порт; тригер відкриває його лише після певного вихідного трафіку. Для сервісу, який має прийняти перший пакет від незнайомця, підходить лише одне з двох.
Чому тригер не опублікує сервер
VPN-сервер пасивний за своєю конструкцією. Партнер, чи то ноутбук у кав’ярні, чи телефон на мобільних даних, надсилає перший пакет, а маршрутизатор не має для нього зіставлення. Ніщо всередині не почало трафік до порту тригера, тому правило ніколи не спрацьовує і з’єднання гине ще до початку рукостискання.
Там, де тригер виглядає працюючим, трафік на порту тригера створює щось інше: клієнт у LAN, зонд моніторингу або власні вихідні перевірки сервера. Тоді зіставлення відкривається для одного хоста і закривається, коли трафік припиняється, тому наступний зовнішній партнер знову зазнає невдачі, а перший успіх лежить у журналі й виглядає як доказ.
Тригер зазвичай розрахований і на один хост. Багато реалізацій дозволяють тримати зіставлення лише одному внутрішньому пристрою одночасно, що цілком неправильно для сервера, який має відповідати кільком партнерам. Функцію створювали для програм, які відкривають вихідне керівне з’єднання і чекають вхідних даних на другому порту, і вона досі відповідає цій формі.
Що насправді зіставляє перенаправлення
Перенаправлення — це один запис перетворення: порт і протокол WAN до внутрішньої адреси й порту. Йому потрібен слухач, який уже працює на іншому кінці, і потрібно, щоб внутрішня адреса залишалася на місці. Оренда DHCP, що переїжджає на іншу машину, тихо надсилає кожен тунель не тому хосту, тому створіть резервування до правила.
| Rule | Opens when | Closes when | Fits a VPN listener |
|---|---|---|---|
| Port forward | Saved, at boot | You delete it | Yes |
| Port trigger | Matching outbound traffic | Idle timeout or reboot | No |
Протокол важливіший, ніж підказує форма. OpenVPN поверх UDP потребує перенаправлення UDP, WireGuard потребує UDP, а дані IPsec надходять як ESP, протокол IP 50, у якого взагалі немає портів. Форма перенаправлення, що приймає лише TCP або UDP, не може це виразити, тому IPsec потребує passthrough або статичного зіставлення один до одного замість правила порту.
Рівень над вашим маршрутизатором
Перенаправлення керує лише тим перетворенням, яке належить вам. Якщо адреса WAN не ваша, а це випадок за NAT оператора, де абоненти ділять 100.64.0.0/10, як описано в RFC 6598, вхідне з’єднання ніколи не досягне вашого маршрутизатора, бо провайдер перетворив першим. Жодне правило на вашому пристрої не виправить цей порядок.
Подвійний NAT — та сама проблема в мініатюрі. Ваш маршрутизатор перенаправляє на маршрутизатор провайдера, який не має відповідного правила і відкидає пакет. Або додайте правило на зовнішньому пристрої, або переведіть зовнішній пристрій у режим мосту й дозвольте своєму тримати публічну адресу.
Тому перевірка має приходити ззовні. Перевірка з того ж LAN через публічну адресу залежить від підтримки hairpin NAT і може пройти або не пройти з причин, не пов’язаних із правилом; телефон на мобільних даних або друг в іншій мережі — чистіша перевірка.
Обмежте правило, потім перевірте обидві половини
Перенаправте один порт на одну адресу. Діапазон, доданий тому, що перші спроби не вдалися, — це шлях, яким інтерфейси керування потрапляють в інтернет, а слухачеві VPN не потрібна опублікована поруч адміністративна сторінка маршрутизатора.
Збережіть усе, що вже захищало цього слухача: ідентичність за сертифікатом або ключем, брандмауер хоста, актуальні версії пакетів. Перенаправлення пропускає пакет; автентифікація вирішує, чи стане пакет тунелем, і це дві окремі несправності, коли щось іде не так.
Перевірка має дві половини. Рукостискання має завершитися із зовнішньої мережі, а потім приватний ресурс за сервером має відповісти через тунель. Перенаправлення пропускає з’єднання тунелю і не більше; маршрутизація й авторизація для 10.8.0.0/24 — інше налаштування на іншому екрані.
Вирішіть трьома питаннями
Три питання вирішують вибір швидше за будь-яку таблицю порівняння:
- Чи щось підключається ззовні як перший пакет? Тоді використовуйте перенаправлення або релей. Тригер не може відкритися без вихідного трафіку, якого ніколи не буде.
- Чи має діра пережити час простою? Тоді використовуйте перенаправлення, бо спрацьоване зіставлення закривається за власним розкладом.
- Чи адреса WAN ваша, щоб її публікувати? Якщо ні, виправте рівень вище, перш ніж редагувати будь-яке правило.
Якщо відповідь на всі три — ні, а це випадок ноутбука, який сам телефонує комерційному провайдеру, жодне з правил не потрібне. Клієнт за NAT працює, бо сам створює зіставлення зі станом, і це охоплює більшість людей, які читають сторінку про перенаправлення портів опівночі.