Списки портов для VPN-сервисов копируются между страницами сравнения без детали, которая решает, важны ли они: кто начинает соединение. Правило, разрешающее исходящий TCP 443, ничего не говорит о том, может ли другой хост достучаться до слушателя на вашей машине. Напишите три отдельных требования, прежде чем сравнивать хотя бы один тариф, и отметьте, какие из них действительно нужны вашей задаче. Большинство сравнений сводятся к одному короткому вопросу, как только такой лист существует.

Разделите требование, прежде чем читать любой список портов

Три строки покрывают почти все случаи: добраться до цели за пределами туннеля, опубликовать что-то, чтобы другие могли подключиться внутрь, и нести сам туннель. Каждая строка терпит неудачу по своей причине, и политика провайдера, удовлетворяющая одной, может оставить две другие нетронутыми. Отнести задачу к правильной строке — пять минут, и это экономит спор позже.

LineWho starts itWhat can block itQuestion for the provider
Outbound destinationYour applicationEgress filter on the exit nodeIs this protocol and port allowed to that destination?
Inbound publishingA remote peerNo mapping, no public address, short lifetimeWhich protocol, which external port, and how long does the mapping last?
Tunnel transportYour client to the gatewayThe access network drops that protocolDoes 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, а запрос из сети, которую вы не контролируете, всё ещё истекает по таймауту, разрыв на публичной стороне. Это момент назвать оператору протокол и внешний порт вместо того, чтобы описывать приложение по имени.

Собственный транспорт туннеля — отдельный вопрос

Порты носителя — самая маленькая часть проблемы и самая простая для поиска. Значения по умолчанию различаются по протоколам, и то, о чём клиент может договориться, важнее любого описания тарифа.

ClientOuter transportDefault portWhen it helps
OpenVPNUDP1194Default mode; needs outbound UDP to pass
OpenVPNTCP443UDP is dropped and TCP 443 is not
WireGuardUDP51820Short handshake; there is no TCP mode
IKEv2/IPsecUDP500 and 4500Mobile 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

Читайте вывод как контрольный список. Исходящий работает, когда назначение отвечает при включённом туннеле. Входящий работает только тогда, когда хост вне вашей сети достигает слушателя на внешнем порту. Носитель работает, когда рукопожатие завершается на протоколе, который разрешает ваша сеть доступа.

Две привычки держат лист честным. Записывайте дату и версию клиента рядом с каждым результатом, потому что движутся и политики провайдеров, и значения по умолчанию клиентов. Затем просите самое узкое отображение, которое обслуживает поток, потому что просьба открыть всё обычно приносит отказ или допродажу, а не технический ответ.

Похожие статьи