Документация

Быстрый старт + описание функций по разделам и устройствам (постоянно дополняется)

Определение NAT-серверов и рекомендации по туннелированию

В этой статье описано, как панель автоматически распознаёт NAT-серверы, различает «NAT, где порт можно настроить» и «NAT, где порт настроить нельзя», а при необходимости направляет пользователя к туннельному управлению.

Сначала разберёмся: что такое NAT

NAT-сервер — это сервер, у которого «есть только внутренний IP и нет отдельного публичного IP». Например, многие дешёвые NAT VPS: провайдер выдаёт внутренний адрес (вроде 192.168.x.x), и обратиться к нему напрямую из публичной сети нельзя — только через проброс портов, предоставляемый провайдером (когда какой-то публичный порт переадресуется на ваш внутренний).

Что делает эта функция

После добавления сервера панель при успешном SSH-соединении автоматически определяет, является ли эта машина NAT-типом (на машине только внутренние адреса, без отдельного публичного IP). Обнаружив NAT, панель показывает небольшой значок на карточке сервера и выводит сводное пояснение вверху вкладки «Обзор». Пользователь может нажать на жёлтый значок и подтвердить, можно ли на этой NAT-машине самостоятельно настроить проброс портов в панели провайдера, — тем самым решив, требуется ли туннельное управление.

Почему важно различать типы NAT

«Внутренний IP» ≠ «нужен туннель». NAT-серверы делятся на два типа:

ТипОсобенностиНужен ли туннель
NAT, где порт можно настроитьПровайдер даёт панель проброса портов, и пользователь сам может переадресовать публичный порт на внутренний❌ Не нужен, с портом можно справиться самостоятельно
NAT, где порт настроить нельзяПровайдер жёстко закрепил лишь несколько портов вроде SSH (22), остальные порты снаружи недоступны✅ Нужно туннельное управление

Туннельное управление нужно только для «NAT, где порт настроить нельзя». У NAT, где порт можно настроить, порты мапятся самостоятельно, и по удобству он не отличается от машины с публичным IP — о нём не следует напоминать постоянно.

Как работает определение

После успешного SSH-соединения панель выполняет команду только для чтения ip -4 addr show, читает локальные IP сетевых интерфейсов сервера и проверяет, все ли они относятся к внутренним диапазонам:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 100.64.0.0/10 (CGNAT, операторский NAT)
  • 127.0.0.0/8, 169.254.0.0/16, 0.0.0.0/8

Если существует хотя бы один IP публичного диапазона, сервер считается «имеющим публичный IP» (не NAT); если все адреса внутренние — он считается «NAT».

> Команда определения работает только на чтение и не изменяет состояние сервера. Результат записывается в базу данных, определяется лишь при первом подключении, а затем просто переиспользуется — соединение не замедляется.

Значки и места подсказок

Обнаружив NAT, панель показывает подсказки в двух местах:

1. Вкладка «Обзор» панели «Управление системой»: нажав на карточке сервера «Управление системой» и войдя в панель, вы увидите на первой вкладке «Обзор» соответствующий баннер-подсказку о NAT — у жёлтой отметки отображается жёлтое пояснение (с инструкцией по снятию), у красной отметки — красное руководство по туннелированию. Подсказка появляется только у NAT-серверов с прямым подключением и без подтверждения и не занимает место на карточке.

2. Небольшой значок на карточке: на карточке остаётся лишь маленький значок с тремя состояниями:

ЗначокЦветЗначениеДействие при нажатии
NATЖёлтыйОбнаружен NAT (локальные IP внутренние), ждёт подтвержденияОткрывается окно подтверждения
Нужен туннельКрасныйПорт недоступен из публичной сети, нужен туннельОткрывается руководство по туннельному управлению
(нет значка)—Подтверждено, что «с портом всё в порядке», отметка снята—

Жёлтый значок NAT — это состояние «ждёт подтверждения»: при нажатии открывается окно подтверждения с выбором из двух вариантов:

  • «С портом всё в порядке, снять отметку» → значок исчезает, больше не напоминает;
  • «Порт недоступен, отметить как требующий туннеля» → значок становится красным и ведёт к туннельному управлению.

Красный Нужен туннель — это «предупреждение»: при нажатии сразу открывается туннельное управление + проброс портов.

> Почему не делается «автоматическая проверка доступности порта»: сервер панели и целевой сервер могут находиться в одном дата-центре, и проверка из панели идёт по внутренней сети — «проходит» не означает, что пройдёт у внешнего посетителя, результат недостоверен. Поэтому «нужен туннель» пользователь отмечает вручную в жёлтом окне пояснения.

Почему NAT-сервер «через какое-то время отключается»

У NAT-сервера на шлюзе провайдера есть idle timeout (тайм-аут простаивающего соединения). После нескольких минут простоя SSH-соединения шлюз тихо обрывает его (TCP в полуоткрытом состоянии), и обе стороны этого не замечают.

Панель решает проблему следующими двумя способами:

1. Включение keepalive для SSH-соединений: после установления каждого соединения каждые 30 секунд отправляется пакет поддержания активности — это и предотвращает обрыв из-за простоя в NAT, и позволяет вовремя обнаружить полумёртвые соединения.

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

Важные замечания

1. Определение зависит от успешного SSH-соединения: когда сервер офлайн или пароль неверен, определить нельзя — значок не отображается.

2. Серверы без значка: у серверов с публичным IP, Android-устройств (Termux) и уже туннелированных устройств (с tunnel_token) значок NAT не показывается — они и так идут по своим каналам, напоминание о NAT им не нужно.

3. Особые случаи учтены: у крайне редких «1:1 NAT» (серверы, где открыты все порты) локальный IP тоже внутренний, и они определяются как NAT. В этом случае пользователю достаточно выбрать «Да» в окне подтверждения — на использование это не влияет.

4. После подтверждения можно изменить: состояние значка определяется подтверждением пользователя и в любой момент может быть скорректировано нажатием на значок.

Связанные документы