Глиф Учебники

Урок 6. NAT и проброс портов

Курс «Компьютерные сети» · урок 6 из 9 · 5 минут чтения

Дома десяток устройств — компьютеры, телефоны, телевизор, — а внешний адрес у всех один. Это работа NAT (Network Address Translation — преобразование адресов). В этом уроке — как он устроен, почему из-за него к домашним устройствам не подключиться из интернета и как это обойти пробросом порта.

Как работает NAT

Частные адреса вроде 192.168.1.25 по интернету не передаются (урок IP-адрес, маска, шлюз и DHCP). Поэтому роутер у каждого пакета, который уходит наружу, заменяет адрес отправителя своим внешним адресом и записывает в таблицу, какому устройству принадлежит это соединение. Когда приходит ответ, роутер смотрит в таблицу и отдаёт его нужному устройству.

Таблица выглядит примерно так (адреса 203.0.113.x и 198.51.100.x — из диапазонов для примеров):

Устройство внутриКак видно снаружиС кем соединение
192.168.1.25:51000203.0.113.7:51000198.51.100.20:443
192.168.1.30:51000203.0.113.7:40001198.51.100.20:443

Два устройства взяли один и тот же свой порт 51000. Роутер различает их, подставляя снаружи разные порты.

адрес внутри сети адрес снаружи 192.168.1.25:51000 192.168.1.30:51000 203.0.113.7:51000 203.0.113.7:40001 ноутбук телефон роутер NAT помнит, чьё соединение сервер 198.51.100.20 порт 443
Роутер подставляет вместо адресов ноутбука и телефона свой внешний адрес 203.0.113.7 с разными портами и по таблице NAT возвращает ответы нужному устройству.

Почему снаружи не подключиться

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

Это полезный побочный эффект, но NAT — не брандмауэр. Защиту даёт брандмауэр роутера и самих устройств, а NAT просто не знает, куда отправить незваный пакет.

Проброс порта

Проброс порта (переадресация, port forwarding, «виртуальный сервер») — правило в роутере: «всё, что пришло на внешний порт X, отдавать устройству Y на порт Z». Например, внешний порт 8080 по TCP — на 192.168.1.10:80, где работает домашний сайт. Тогда снаружи сайт открывается по адресу http://203.0.113.7:8080/.

Без правила из интернета 203.0.113.7:8080 роутер отброшен — в таблице NAT нет записи домашний сайт 192.168.1.10:80 С пробросом порта из интернета 203.0.113.7:8080 роутер домашний сайт 192.168.1.10:80 правило: TCP 8080 → 192.168.1.10:80
Без правила роутер отбрасывает подключение из интернета, а правило проброса отдаёт внешний порт 8080 домашнему сайту 192.168.1.10 на порт 80.

Чтобы проброс заработал, нужны четыре условия:

  1. У устройства постоянный адрес в сети — иначе правило однажды укажет в пустоту. Проще всего зарезервировать адрес в DHCP роутера.
  2. Программа на устройстве слушает этот порт (урок Порты и протоколы).
  3. Брандмауэр самого устройства пропускает подключения на этот порт.
  4. Внешний адрес роутера — публичный, «белый». Об этом — ниже.

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

Белый и серый адрес: CGNAT

Адресов IPv4 не хватает и провайдерам. Поэтому многие из них ставят свой NAT и выпускают в интернет сразу многих абонентов под одним адресом — это CGNAT (Carrier-Grade NAT, NAT провайдера). Тогда у вашего роутера снаружи серый адрес: частный или из диапазона 100.64.0.0 – 100.127.255.255.

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

Ваша сеть Сеть провайдера устройства ваш роутер 100.72.15.4 серый адрес NAT провайдера 203.0.113.7 его видят сайты интернет входящее подключение остановится у провайдера — проброс порта на своём роутере не поможет
При CGNAT у роутера серый адрес 100.72.15.4, сайты видят белый адрес NAT провайдера, а подключение из интернета до роутера не доходит.

Как проверить: откройте в настройках роутера страницу состояния и найдите внешний адрес (WAN, «Интернет»). Затем посмотрите, под каким адресом вас видят сайты проверки IP-адреса (справка Как узнать свой IP-адрес). Совпадают — адрес белый. Различаются или адрес роутера начинается с 10., 100.64–100.127, 172.16–172.31, 192.168. — серый.

Что делать: спросить провайдера о публичном адресе (часто это отдельная услуга) или пользоваться IPv6, если провайдер его даёт (урок IPv6: что это и зачем).

Проверка снаружи

Проверять проброс изнутри своей сети бесполезно: не все роутеры умеют вернуть подключение на внешний адрес обратно внутрь (это называется NAT loopback). Проверяйте с телефона через мобильный интернет, выключив на нём Wi‑Fi, или попросите знакомого открыть адрес из другой сети.

UPnP

UPnP позволяет программам внутри сети самим попросить роутер пробросить порт: так делают игровые приставки, программы для звонков и обмена файлами. Удобно, но открыть порт так может любая программа на любом устройстве — и вредоносная тоже. Если UPnP вам не нужен — выключите его в настройках роутера. Если нужен — иногда заглядывайте в список правил UPnP там же: в нём видно, кто и какие порты открыл.

DMZ

DMZ в домашнем роутере — правило «всё входящее, для чего нет других правил, отдавать одному устройству». Оно открывает это устройство из интернета целиком, со всеми его портами.

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

DDNS — имя вместо меняющегося адреса

Белый адрес бывает динамическим: после переподключения провайдер выдаёт другой. Чтобы не узнавать его каждый раз, пользуются DDNS (динамический DNS): роутер сам сообщает службе DDNS свой текущий адрес, а вы подключаетесь по постоянному имени. Поддержка DDNS есть во многих роутерах, у некоторых производителей — своя бесплатная служба. С серым адресом DDNS не поможет: имя будет указывать на адрес провайдера.

Что не стоит открывать

Открытый в интернет порт находят боты, которые без остановки проверяют все адреса подряд, — обычно в течение часов. Не пробрасывайте удалённый рабочий стол Windows (3389), общие папки (445), страницу настроек роутера и базы данных. Для SSH разрешайте вход только по ключу. Обновляйте программу, к которой открыт доступ, и удаляйте правило проброса, когда оно больше не нужно.

Коротко

Проверьте себя

1. Почему к домашнему компьютеру за роутером по умолчанию не подключиться из интернета?
2. Внешний адрес на странице роутера — 100.72.15.4, а сайты проверки показывают другой. Что это значит?
3. Как правильно проверить, работает ли проброс порта?
4. Чем опасен DMZ в домашнем роутере?