Проброс портов на NAT VPS: как работают 999 портов

Сети и VPN
Проброс портов на NAT VPS: как работают 999 портов

Проброс портов — это механизм, который превращает NAT VPS с общим IPv4-адресом в полноценный сервер, доступный из интернета. Именно благодаря пробросу портов виртуальная машина за 59 ₽/мес принимает входящие подключения: VPN, веб-приложения, боты с вебхуками, прокси. В этой статье разберём, как устроены NAT-порты технически: почему их именно 999, как работает правило DNAT на стороне хостера, как запустить свой сервис на выданном порту и проверить его доступность снаружи. Всё — на примере NAT VPS линейки Cheap-Host в Германии, где каждый сервер получает 999 портов TCP/UDP плюс отдельный порт для SSH.

Почему у NAT VPS общий IP-адрес

Свободные IPv4-адреса закончились ещё в 2019 году, и сегодня каждый выделенный адрес — это заметная часть себестоимости сервера (подробно мы разбирали это в статье о дефиците IPv4). NAT VPS решает проблему иначе: десятки серверов делят один публичный IPv4, а различаются они номерами портов.

Схема выглядит так:

  • у хостера есть публичный адрес, условно 203.0.113.10;
  • каждый NAT VPS получает приватный адрес внутри сети хостера, например 10.0.15.42;
  • за каждым сервером закрепляется свой диапазон внешних портов — например, 21000–21998;
  • всё, что приходит на 203.0.113.10 в этот диапазон, автоматически передаётся на ваш сервер.

Это и есть проброс портов (port forwarding, DNAT — destination NAT). Для исходящих соединений ничего пробрасывать не нужно: ваш сервер свободно ходит в интернет через SNAT, как домашний компьютер за роутером. Ограничение касается только входящих подключений — они возможны лишь на порты из вашего диапазона.

Как работает проброс портов: DNAT на пальцах

На маршрутизаторе хостера выполняется правило трансляции адресов. В терминах iptables оно выглядит примерно так (это конфигурация на стороне провайдера, вам её настраивать не нужно — она уже работает):

iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 21000:21998 -j DNAT --to-destination 10.0.15.42
iptables -t nat -A PREROUTING -d 203.0.113.10 -p udp --dport 21000:21998 -j DNAT --to-destination 10.0.15.42

Читается это так: «любой TCP- или UDP-пакет, пришедший на публичный IP в порты 21000–21998, переслать на приватный адрес 10.0.15.42, сохранив номер порта». Диапазон из 999 портов покрывает практически любые задачи: одному сервису нужен один порт, значит, параллельно можно держать сотни служб.

Важная деталь реализации у Cheap-Host: номер порта при пробросе не меняется. Если снаружи клиент стучится на 203.0.113.10:21443, то на вашем сервере пакет придёт тоже на порт 21443. Это упрощает жизнь: достаточно настроить приложение слушать порт из своего диапазона — и никаких дополнительных правил не требуется.

Отдельно пробрасывается SSH: каждому серверу выдаётся индивидуальный внешний SSH-порт вне общего диапазона, который транслируется на порт 22 внутри виртуальной машины. Подключение выглядит так:

ssh root@203.0.113.10 -p 34567

Практика: запускаем сервисы на своих NAT-портах

Предположим, ваш диапазон — 21000–21998. Разберём три типовых сценария на Ubuntu 24.04.

Веб-приложение на Nginx

Меняем порт в конфигурации сайта:

sudo nano /etc/nginx/sites-available/default

В блоке server указываем порт из диапазона:

server {
    listen 21080;
    listen [::]:21080;
    server_name _;
    root /var/www/html;
}

Проверяем и перезапускаем:

sudo nginx -t
sudo systemctl reload nginx

Сайт станет доступен по адресу http://203.0.113.10:21080. Если нужен «красивый» адрес без порта — поставьте перед сервером бесплатный CDN или обратный прокси, который принимает трафик на 80/443 и передаёт на ваш нестандартный порт.

VPN на WireGuard

WireGuard работает по UDP, и ему всё равно, какой номер порта использовать. В /etc/wireguard/wg0.conf задаём порт из диапазона:

[Interface]
Address = 10.8.0.1/24
ListenPort = 21500
PrivateKey = <ваш_ключ>

В конфигурации клиента указываем Endpoint = 203.0.113.10:21500. Пошаговая настройка — в статье про личный VPN на WireGuard.

Telegram-бот с вебхуком

Telegram принимает вебхуки только на порты 443, 80, 88 и 8443, которых в NAT-диапазоне нет. Решения два: либо использовать long polling (бот сам опрашивает Telegram, входящие порты не нужны вообще), либо пропустить вебхук через прокси-слой, слушающий 443. Для большинства ботов long polling проще и надёжнее — как это развернуть, читайте в статье про Telegram-бота на VPS.

Как проверить, что порт проброшен и открыт

Диагностику ведём с двух сторон. Сначала убеждаемся, что сервис слушает порт локально:

sudo ss -tulpn | grep 21080

В выводе должна быть строка вида LISTEN 0 511 0.0.0.0:21080. Если сервис слушает только 127.0.0.1:21080 — снаружи он недоступен, поправьте директиву listen или bind в конфигурации.

Затем проверяем порт снаружи — с домашнего компьютера или другого сервера:

# TCP-порт
nc -zv 203.0.113.10 21080

# UDP-порт (WireGuard и подобные)
nc -zvu 203.0.113.10 21500

# HTTP-сервис целиком
curl -I http://203.0.113.10:21080

Не забудьте про локальный файрвол: если на сервере включён UFW, разрешите свои порты:

sudo ufw allow 21000:21998/tcp
sudo ufw allow 21000:21998/udp
sudo ufw status verbose

Ограничения NAT-портов: что нужно учитывать

Проброс портов покрывает 95% задач, но честный список ограничений выглядит так:

  • Стандартные порты заняты. 80, 443, 53 и другие well-known порты общего IP нельзя занять — они одни на всех. Сервисы работают на портах из вашего диапазона.
  • Порт 25 закрыт. На NAT VPS Cheap-Host исходящий SMTP заблокирован — это защищает общий IP от попадания в спам-листы. Почту отправляйте через внешние SMTP-сервисы по портам 465/587.
  • Общая репутация IP. Если сосед по адресу нарвался на блокировку конкретного сервиса, это может задеть и вас. На практике встречается редко: за портом 25 и злоупотреблениями хостер следит.
  • PTR-запись не настроить. Обратная DNS-зона принадлежит общему IP, свою PTR-запись повесить нельзя — ещё одна причина не строить на NAT VPS почтовый сервер.

Если ваша задача упирается в эти ограничения — нужен классический VPS с выделенным IPv4. Подробное сравнение по задачам — в статье NAT VPS или обычный VPS.

Каким задачам хватает 999 портов

Практически всем, где сервер работает «на себя», а не раздаёт контент широкой публике на стандартных портах:

ЗадачаСколько портов нужноПодходящий тариф
Личный VPN (WireGuard/OpenVPN)1 UDP или 1 TCPNAT Start, 59 ₽/мес
Telegram/Discord-бот0 (long polling)NAT Start, 59 ₽/мес
Прокси-сервер (Squid, 3proxy)1–2 TCPNAT Base, 99 ₽/мес
Парсеры, cron-скрипты0NAT Pro, 199 ₽/мес
Тестовый стенд, pet-проекты1–10NAT Plus, 349 ₽/мес

Все NAT VPS Cheap-Host размещаются в Германии, работают на KVM с NVMe-дисками, трафик безлимитный, канал 100 Мбит/с. Сервер разворачивается автоматически за 45–60 секунд: оплатили — получили IP, SSH-порт и диапазон портов.

FAQ: частые вопросы о NAT-портах

Можно ли на NAT VPS запустить сайт на стандартном порту 443?

Напрямую нет: порт 443 общего IP один на всех клиентов. Сайт запускают на порту из своего диапазона (например, 20443) или прячут за CDN/прокси, который принимает трафик на 443 и передаёт на ваш нестандартный порт.

999 портов — это TCP или UDP?

И то и другое: каждый номер порта из диапазона проброшен одновременно по TCP и по UDP. На одном номере может работать WireGuard (UDP), на соседнем — веб-приложение (TCP).

Почему на NAT VPS закрыт порт 25?

Чтобы общий IPv4 не попадал в спам-листы из-за одного недобросовестного клиента. Почту отправляйте через внешние SMTP-релеи по портам 465 или 587.

Как узнать свой диапазон портов?

Он указан в панели управления и в письме с доступами после создания сервера. Там же — отдельный внешний SSH-порт, не входящий в общие 999.

Хватит ли NAT VPS за 59 рублей для VPN и бота одновременно?

Да. WireGuard занимает один UDP-порт и десятки мегабайт памяти, бот на long polling портов не требует вовсе. NAT Start (1 vCPU, 1 ГБ RAM, 10 ГБ NVMe) тянет такую связку с запасом.

Вывод

Проброс портов — это не костыль, а зрелая технология, которая делает NAT VPS в разы дешевле классического сервера при той же функциональности для типовых задач. 999 портов TCP/UDP закрывают потребности VPN, ботов, прокси и pet-проектов, а ограничения (стандартные порты, SMTP, PTR) важны лишь для узкого класса сценариев. Если хотите попробовать — у Cheap-Host NAT VPS в Германии от 59 ₽/мес: KVM, NVMe, безлимитный трафик, 999 портов и выдача сервера за минуту. Тарифы — на cheap-host.onl.

Читайте также