Приватные адреса и NAT

Разбираемся, почему дома у всех «192.168.x.x», что такое приватные адреса и как работает NAT.

NAT (Network Address Translation) — подмена приватных адресов на один публичный при выходе в интернет. Позволяет целой локальной сети «прятаться» за единственным внешним IP.

Приватные диапазоны

Поскольку IPv4-адресов всего ~4,3 млрд, их не хватает на каждое устройство. Решение: выделить специальные приватные диапазоны, которые можно свободно использовать внутри любых локальных сетей. Они не маршрутизируются в интернете — их используют миллионы сетей одновременно, не конфликтуя.

ДиапазонCIDRГде встречается
10.0.0.0 – 10.255.255.25510.0.0.0/8крупные корпоративные сети, облака
172.16.0.0 – 172.31.255.255172.16.0.0/12средние сети, Docker
192.168.0.0 – 192.168.255.255192.168.0.0/16домашние роутеры

Проверить, приватный ли адрес, легко на Python — у объекта адреса есть свойство is_private:

import ipaddress

print('Проверка адресов:')
for ip in ['10.0.0.5', '192.168.1.1', '172.16.0.1', '8.8.8.8', '93.184.216.34']:
    a = ipaddress.ip_address(ip)
    kind = 'приватный' if a.is_private else 'публичный'
    print(f'  {ip:16} -> {kind}')

Вывод:

Проверка адресов:
  10.0.0.5         -> приватный
  192.168.1.1      -> приватный
  172.16.0.1       -> приватный
  8.8.8.8          -> публичный
  93.184.216.34    -> публичный

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

Дома десяток устройств с адресами 192.168.1.x, а от провайдера у вас один публичный IP. Как все они выходят в интернет? Роутер делает NAT: подменяет приватный адрес отправителя на свой публичный, запоминая соответствие в таблице.

Ноутбук 192.168.1.5:51000  --запрос-->  Роутер  --подмена-->  203.0.113.7:40000  -->  сайт
Сайт отвечает на 203.0.113.7:40000  -->  Роутер смотрит таблицу  -->  192.168.1.5:51000

Роутер ведёт таблицу трансляций: «внутренний адрес:порт ↔ внешний адрес:порт». Когда приходит ответ, он по таблице понимает, какому из домашних устройств его вернуть. Поскольку различают по портам, такой вариант называют PAT (Port Address Translation), или NAT-overload — именно он работает в большинстве домашних роутеров.

Последствия NAT

  • Плюс: экономия публичных адресов и побочная «защита» — снаружи к домашним устройствам напрямую не достучаться.
  • Минус: входящие соединения извне не проходят без проброса портов (port forwarding). Поэтому хостить сервер дома сложнее.
  • Отсюда же сложности с P2P, играми, видеозвонками — придумали обходные техники (STUN/TURN, UPnP).

Зачем это веб-разработчику

Когда вы видите в логах сервера один и тот же IP от сотни пользователей — скорее всего, они за общим NAT (офис, провайдер). Когда ваш локальный localhost:3000 не виден коллеге — это NAT и приватные адреса. Понимание NAT объясняет, почему «у меня работает, а снаружи нет».

Итог

  • Приватные диапазоны: 10/8, 172.16/12, 192.168/16 — не маршрутизируются в интернете.
  • NAT подменяет приватный адрес на публичный при выходе наружу.
  • Роутер ведёт таблицу трансляций и различает соединения по портам (PAT).
  • NAT экономит адреса, но усложняет входящие соединения.
Проверьте себя
1. Какой из диапазонов является приватным?
A8.8.8.0/24
B192.168.0.0/16
C93.184.216.0/24
D1.1.1.0/24
2. Что делает NAT?
AШифрует трафик
BПодменяет приватный адрес на публичный при выходе в интернет
CНазначает доменные имена
DУскоряет загрузку страниц
3. Почему за одним публичным IP может работать много устройств?
AОни используют один MAC-адрес
BРоутер различает соединения по номерам портов (PAT)
CИнтернет ограничивает скорость
DЭто невозможно
Поддержать проект