9.7. Приватні мережі та NAT

IPv4 був розроблений на чотири мільярди адрес, що на той час здавалося достатнім. Але це не так. Кожен підключений до інтернету будинок, офіс і завод потребує власного блоку адрес для внутрішніх пристроїв, а додавши до цього камери, телефони та побутову техніку з усього світу, чотирьох мільярдів явно не вистачить.

Вирішенням, на якому зупинився інтернет, стали приватні мережі: більшість пристроїв у локальній мережі використовують адреси, унікальні лише всередині цієї мережі, а не в глобальному масштабі, і один пристрій на краю мережі виконує перетворення між двома світами. Камера майже завжди знаходиться в одній з таких приватних мереж.

9.7.1. Діапазони приватних адрес

Три діапазони IPv4 зарезервовано як недоступні для маршрутизації в публічному інтернеті. Будь-яка локальна мережа може вільно використовувати адреси з цих діапазонів, не узгоджуючи це ні з ким, оскільки жоден маршрутизатор за межами локальної мережі ніколи не намагатиметься доставити до них пакет:

  • 10.0.0.010.255.255.255 (16 мільйонів адрес; поширено у великих корпоративних мережах).

  • 172.16.0.0172.31.255.255 (близько мільйона адрес; рідше зустрічається на практиці).

  • 192.168.0.0192.168.255.255 (65 тисяч адрес; стандартний діапазон для майже кожного домашнього маршрутизатора).

У типовій домашній мережі камера і ноутбук, що з нею спілкується, обидва мають адреси 192.168.x.x, оскільки саме цей діапазон домашній маршрутизатор обирає для мережі, яку він обслуговує.

9.7.1.1. Як використовується маска підмережі

Сторінка IP-адреси ознайомила з нотацією /24. Тут важливо те, що маска підмережі — це те, що кожен пристрій використовує для визначення, куди далі має піти пакет. Щоразу, коли камера надсилає пакет, вона застосовує власну маску підмережі до адреси призначення й аналізує результат:

  • Якщо призначення має спільні мережеві біти з власною адресою камери, то призначення знаходиться в тій самій локальній мережі. Камера надсилає пакет безпосередньо до нього.

  • Якщо призначення не має спільних мережевих бітів, воно повинно знаходитися в іншій мережі. Камера надсилає пакет своєму шлюзу за замовчуванням (маршрутизатору, автоматично налаштованому під час підключення) і дозволяє шлюзу вирішити решту.

Цей єдиний тест – «чи є у нас спільні мережеві біти?» – і є призначенням маски підмережі. Саме тому домашні мережі за замовчуванням використовують /24: обмеження в 254 пристрої цілком підходить для домашнього використання та забезпечує простоту мережі.

9.7.2. Трансляція мережевих адрес

Камера з адресою 192.168.1.50 не може просто надіслати пакет на сервер у публічному інтернеті – публічний інтернет не маршрутизує до 192.168.x.x. Домашній маршрутизатор вирішує цю проблему за допомогою трансляції мережевих адрес (NAT), і робить це прозоро.

A diagram with three blocks. On the left, two devices on a private network labelled "camera 192.168.1.50" and "laptop 192.168.1.51", both connected to a central box labelled "router". The router has two faces -- a private face labelled "192.168.1.1" toward the devices, and a public face labelled "203.0.113.5" toward the internet. The internet is drawn as a cloud on the right. Arrows from the devices pass through the router and emerge as if from the public address.

NAT переписує вихідну адресу вихідних пакетів на публічну адресу маршрутизатора та зворотно переписує вхідні відповіді, тому приватні пристрої виглядають як такі, що спільно використовують одну публічну адресу.

Маршрутизатор має дві адреси: приватну в локальній мережі (зазвичай 192.168.1.1) і публічну, призначену провайдером інтернету. Коли камера надсилає пакет на публічну адресу, маршрутизатор

  1. записує приватну адресу + порт камери і пов’язує їх з тимчасовим вихідним портом;

  2. переписує вихідну адресу в пакеті на власну публічну адресу (а вихідний порт – на обраний вихідний порт);

  3. надсилає переписаний пакет через публічний бік.

Коли відповідь повертається на публічну адресу + порт маршрутизатора, маршрутизатор шукає збіг, переписує адресу призначення назад на приватну адресу + порт камери і доставляє пакет у локальну мережу. Камера ніколи не знає, що перезапис відбувся; сервер ніколи не знає початкового відправника.

NAT робить домашні мережі практичними. Але він також має дві особливості, про які варто знати.

9.7.3. Що змінює NAT

Вихідний трафік – легко. Камера у приватній мережі може вільно надсилати трафік назовні. Щоразу, коли вона відкриває TCP-з’єднання або надсилає UDP-пакет на віддалений сервер, NAT автоматично налаштовує відповідність. Більшість застосунків для камери працюють саме так: зробити знімок, надіслати на сервер, отримати відповідь.

Вхідний трафік – складно. Пристрій у публічному інтернеті не може безпосередньо підключитися до камери в приватній мережі. Коли на публічну адресу маршрутизатора надходить небажаний пакет, немає жодного запису відповідності для пошуку, тому пакету нікуди йти. Маршрутизатор або відкидає його, або передає сервісу, запущеному на самому маршрутизаторі.

Для вхідного трафіку поширені три обхідні шляхи, наведені в порядку зростання практичності:

  • Переадресація портів. Налаштуйте маршрутизатор так, щоб усі вхідні пакети на обраному публічному порту надходили на конкретний приватний пристрій. Вимагає адміністративного доступу до маршрутизатора; ненадійно, коли публічна адреса маршрутизатора змінюється.

  • VPN. Розгорніть віртуальну приватну мережу, яка помістить камеру в ту саму логічну мережу, що й ті, кому потрібно до неї дістатися. Громіздко; виходить за межі більшості сценаріїв розгортання камер.

  • З’єднання за ініціативою вихідного трафіку. Камера сама підключається до відомого сервера десь у публічному інтернеті та підтримує це з’єднання відкритим; сервер використовує наявне з’єднання для надсилання повідомлень у зворотному напрямку. Саме так працюють push-сповіщення та більшість хмарних протоколів для пристроїв, і саме цей шаблон зазвичай використовують застосунки для камер.

NAT невидимий для Python-коду на камері. Скрипт просто звертається до потрібного адресата; маршрутизатор виконує перетворення у фоновому режимі. Однак напрямок з’єднання має значення, і саме через NAT схема «камера підключається до хмарного сервера» набагато простіша, ніж «хмарний сервер підключається до камери».