VPS · сеть

Порты: как открыть доступ к своей программе

Как открыть порт на VPS, чтобы программу стало видно снаружи: где доступ закрыт на самом деле и чем это отличается от игрового сервера, которому порт даёт панель.

Адрес приводит к машине, порт — к конкретной программе на ней. Порт 22 занят входом по SSH, 80 и 443 — сайтами. Программа «слушает» свой порт, а тот, кто к ней обращается, стучится именно в этот номер.

Задняя сторона сетевой стойки: коммутаторы и патч-панели, в которые воткнуты десятки одинаковых кабелей
Адрес — это гнездо в стойке. Порт — номер программы за этим гнездом, и таких номеров у одного адреса шестьдесят пять тысяч.
Схема: у машины один адрес и несколько портов; программа на 0.0.0.0 видна снаружи, программа на 127.0.0.1 доступна только изнутри машины
Один адрес, много номеров. Что видно снаружи, решает не панель, а то, на каком адресе программа согласилась слушать.

У машины портами распоряжаетесь вы

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

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

Почему программу всё-таки не видно

Причин обычно три, и все они внутри машины. Проверять их удобно командой ss -tlnp — она показывает, какая программа какой порт и какой адрес слушает.

Кто и на каком адресе слушаетвнутри машины
sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=701,fd=5))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=812,fd=6))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=640,fd=3))
Колонка Local Address:Port и есть ответ. 0.0.0.0:80 — снаружи видно. 127.0.0.1:5432 — только изнутри машины, и для базы данных это правильно. Без sudo команда работает тоже, но не покажет имена программ в последней колонке.
  • Программа не запущена. Самая частая причина, и самая обидная: убедитесь, что она вообще работает.
  • Программа слушает только сама себя. Адрес 127.0.0.1 виден изнутри машины и больше ниоткуда. Снаружи доступен только тот адрес, который панель показала во вкладке «Обзор», — программу надо настроить на него или на 0.0.0.0.
  • Внутри системы работает брандмауэр. Он свой у каждой системы — где-то ufw, где-то firewalld, где-то правила nftables, — и порт открывается его командой. Что именно стоит на вашей машине, зависит от образа, который вы выбрали при заказе.

Исходящая почта закрыта

Порты исходящей почты — 25, 465 и 587 — и порты файловых сетей Windows — со 137 по 139 и 445 — на нодах закрыты по умолчанию. Это защита от рассылки спама с чужих машин, и она касается того, что машина отправляет наружу, а не входящих подключений к ней.

Снять запрет может только поддержка, и делается это исключением на конкретную машину. Если вы собираетесь рассылать почту, заводите ещё и обратную запись PTR во вкладке «Обзор»: без неё письма попадают в спам независимо от портов.

Как проверить, что снаружи видно

  • Изнутри машины: ss -tlnp — кто слушает и на каком адресе.
  • Снаружи: откройте http://адрес:порт в браузере на своём компьютере, а не на самой машине.
  • Если изнутри работает, а снаружи нет — дело в адресе прослушивания или в брандмауэре системы.
Проверка снаружи, со своего компьютерау себя на компьютере
curl -I http://203.0.113.10
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
Ответ пришёл — снаружи видно. Connection refused означает, что на этом порту никто не слушает; молчание до истечения времени — что до порта не доходит вовсе, и тогда смотрят брандмауэр внутри системы.

Читайте дальше

VPS

Что такое VPS и чем она отличается от игрового сервера

Что такое VPS простыми словами: машина с чистой системой и полными правами, программы на неё вы ставите сами. Что панель у неё умеет, чего нет и зачем её берут.

VPS · вход

Первый вход на машину по SSH

Как зайти на VPS по SSH с Windows, macOS или Linux: где панель показывает имя пользователя и адрес, откуда берётся пароль и почему ключ добавляют до заказа.

VPS · тариф

Сколько нужно ядер, памяти и диска

Сколько ресурсов нужно вашей VPS: что такое vCPU, память и диск на примерах бота, небольшого сайта и базы, и как увидеть в панели, чего машине не хватает.

VPS · разбор

Машина не отвечает: что проверить

Что делать, если VPS не отвечает: состояние в панели, консоль вместо SSH, перезагрузка и переустановка — по порядку, от безопасного к необратимому.

VPS · данные

Снимки и резервные копии: в чём разница

Чем снимок VPS отличается от резервной копии: снимок лежит на той же ноде и вместе с ней теряется. Когда он выручает, когда бесполезен и что считать копией.

VPS · безопасность

Как защитить VPS своими руками

Как защитить свой VPS в первый же день: обновления, вход по ключу вместо пароля, права администратора на одну команду и признаки того, что вы на машине не одни.