Вимоги до портів VPN: три рядки, які пишуть перед порівнянням
Визначте, яке питання про порти у вас насправді: вихідне призначення, вхідна публікація чи власний транспорт тунелю. Потім питайте постачальника лише про це.
Списки портів для VPN-сервісів копіюються між сторінками порівняння без деталі, яка вирішує, чи вони важливі: хто починає з’єднання. Правило, що дозволяє вихідний TCP 443, нічого не каже про те, чи може інший хост досягти слухача на вашій машині. Напишіть три окремі вимоги, перш ніж порівнювати хоч один тариф, і позначте, які справді потрібні вашому завданню. Більшість порівнянь зводяться до одного короткого питання, щойно такий аркуш існує.
Відокремте вимогу, перш ніж читати будь-який список портів
Три рядки покривають майже всі випадки: дістатися до цілі за межами тунелю, опублікувати щось, щоб інші могли підключитися всередину, і нести сам тунель. Кожен рядок зазнає невдачі з іншої причини, і політика постачальника, що задовольняє один, може залишити два інші недоторканими. Віднести завдання до правильного рядка займає п’ять хвилин і заощаджує суперечку згодом.
| Line | Who starts it | What can block it | Question for the provider |
|---|---|---|---|
| Outbound destination | Your application | Egress filter on the exit node | Is this protocol and port allowed to that destination? |
| Inbound publishing | A remote peer | No mapping, no public address, short lifetime | Which protocol, which external port, and how long does the mapping last? |
| Tunnel transport | Your client to the gateway | The access network drops that protocol | Does the client offer a fallback the local network permits? |
Маркетингові твердження навмисно розмивають три рядки. Дозвіл P2P описує політику призначення, виділена адреса описує адресу, а твердження про відсутність обмежень на порти зазвичай означає, що тариф їх не перелічує. Жодне з цих формулювань не відповідає на інші.
Виберіть один конкретний потік і запишіть його реченням: ініціатор, транспорт, порт, родина адрес, напрямок. Нічний клієнт резервного копіювання, який завантажує на віддалений хост, — лише вихідний. Ігровий сервер на вашому столі, до якого приєднуються друзі, — вхідний. Пустити обидва через один тунель означає, що аркушу потрібні обидва рядки, а не компроміс між ними.
Вихідний доступ зазнає невдачі через політику призначення, а не через тунель
Вихідний трафік через перекладний шлюз створює стан. Перший пакет із внутрішньої адреси й порту створює запис перекладу, і відповіді зіставляються з ним, що є поведінкою відображення, описаною в RFC 3022. Саме цей механізм пояснює, чому вкладка браузера зазвичай працює взагалі без запиту порту.
Дві речі все ще ламають це. Вихідний вузол може фільтрувати призначення або номери портів, які вважає зловживаними, а застосунок може слухати порт, якого політика виходу зовсім не очікувала. Питайте про пару призначень, а не про вхідні правила, і чекайте різних відповідей для TCP і UDP.
Вимірюйте, перш ніж сперечатися. Запустіть це на машині, що стоятиме за тунелем, один раз із вимкненим тунелем і один раз із увімкненим:
ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://example.com
Ті самі команди, те саме призначення, два стани тунелю дають оператору порівняння до і після, за яким можна діяти. Замініть документаційну адресу на хост, який вам справді потрібен; важливо, щоб порівняння повторювалося, а не щоб якесь число виглядало вражаюче.
Вхідна публікація потребує відображення, адреси та часу життя
Ніщо ззовні не може почати з’єднання з вашим слухачем, якщо щось на публічному боці не знає, куди його доставити. Статичне резервування порту, яке тримає оператор, відображення, запитане клієнтом через UPnP, NAT-PMP або PCP, і маршрутизована публічна адреса — це три різні продукти з трьома різними межами.
Поставте п’ять питань до будь-якого з них: який протокол, який зовнішній порт, чи може зовнішній порт відрізнятися від локального, яку родину адрес він покриває і скільки відображення живе після перепідключення. Резервування, прив’язане до активної сесії, зникає, коли ця сесія закінчується, що б не казала сторінка тарифу.
Спершу підтвердьте локальну половину, бо мертвий слухач і заблокований вхідний шлях ззовні виглядають однаково:
ss -lntup | grep -E ':(8080|51820)\b'
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080
Коли локальний запит повертає 200, а запит із мережі, якою ви не керуєте, все ще вичерпує час, розрив на публічному боці. Це момент назвати оператору протокол і зовнішній порт замість того, щоб описувати застосунок за назвою.
Власний транспорт тунелю — окреме питання
Порти носія — найменша частина проблеми й найпростіша для пошуку. Значення за замовчуванням різняться за протоколом, і те, про що клієнт може домовитися, важливіше за будь-який опис тарифу.
| Client | Outer transport | Default port | When it helps |
|---|---|---|---|
| OpenVPN | UDP | 1194 | Default mode; needs outbound UDP to pass |
| OpenVPN | TCP | 443 | UDP is dropped and TCP 443 is not |
| WireGuard | UDP | 51820 | Short handshake; there is no TCP mode |
| IKEv2/IPsec | UDP | 500 and 4500 | Mobile clients; 4500 carries NAT traversal |
Мережа, яка відкидає вихідний UDP, прийме тунель TCP 443 і відмовить у UDP, тому резервний режим належить до аркуша вимог. Зміна носія не переміщує порт застосунку всередині тунелю й не розширює політику призначення; вони залишаються у своїх рядках.
Фрагментація варта однієї перевірки, поки ви там, бо тунель, який підключається, а потім застрягає на великих передачах, зазвичай має неправильний MTU, а не закритий порт:
ping -M do -s 1400 203.0.113.10 ping -M do -s 1372 203.0.113.10
У Windows та сама перевірка — ping -f -l 1400 203.0.113.10. Встановіть MTU тунелю нижче найбільшого розміру, що проходить, потім повторіть перевірку невдалої передачі.
Перевірте три рядки, перш ніж платити за тариф
Покладіть три рядки на одну сторінку й заповніть кожну клітинку виміряним результатом замість обіцянки. Ці команди створюють локальну половину такої сторінки приблизно за хвилину:
ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080
ping -M do -s 1400 203.0.113.10
Читайте вивід як контрольний список. Вихідний працює, коли призначення відповідає при ввімкненому тунелі. Вхідний працює лише тоді, коли хост поза вашою мережею досягає слухача на зовнішньому порту. Носій працює, коли рукостискання завершується на протоколі, який дозволяє ваша мережа доступу.
Дві звички тримають аркуш чесним. Записуйте дату й версію клієнта поруч із кожним результатом, бо рухаються і політики постачальників, і значення за замовчуванням клієнтів. Потім просіть найвужче відображення, що обслуговує потік, бо прохання відкрити все зазвичай приносить відмову або допродаж, а не технічну відповідь.