Урок 8 — Маршрутизация и NAT

Как пакет из твоего ноутбука находит дорогу до сервера на другом континенте? Кто решает, в какую сторону его толкать? И почему миллионы устройств за домашним роутером могут жить под одним публичным IP? Финал серии — самые сетевые из всех сетевых тем.

В этом уроке
  1. Зачем нужна маршрутизация
  2. Шлюз по умолчанию
  3. Таблица маршрутизации
  4. Как пакет идёт «по миру» — hop-by-hop
  5. NAT — как миллионы за одним IP
  6. Port forwarding и DNAT
  7. Маршрутизация в облаке (VPC)
  8. Дебаг: ping, traceroute, mtr
  9. Что с этим делает DevOps
  10. Чек-лист
  11. Финальный плейбук: «нет интернета»
  12. Задачи с ответами
  13. Что дальше
Вспомни — сегодня понадобится весь путь

Урок 1: пакеты и хосты. Урок 2: приватные и публичные адреса. Урок 3: маска решает «сосед или чужой», и всё чужое уходит на шлюз. Урок 4: порты и сокеты. Этот финальный урок соединяет кусочки в цельную картину: как пакет реально путешествует через десятки сетей и как твой серый 192.168.1.10 умудряется говорить со всем миром. Если что-то из списка подзабылось — освежи: дальше всё пойдёт в дело.

1. Зачем нужна маршрутизация

Когда твой пакет летит из дома в Лондоне на сервер в Франкфурте, он проходит через 10-20 промежуточных устройств. Никто из них не знает «весь интернет». Каждый знает только: «если адрес такой — толкаю в эту сторону».

Это и есть маршрутизация — процесс «куда отдать пакет дальше». Каждый узел делает локальное решение на основе своей таблицы маршрутизации.

Аналогия

Маршрутизация = почта

Письмо из Москвы в Сан-Франциско. Местный почтальон не знает, как доставить его до конкретной улицы в Калифорнии — но знает, что «всё иностранное → в международный сорт-центр». Тот не знает Калифорнию — но знает «всё в США → грузим в самолёт до Нью-Йорка». И так далее, пока письмо не попадёт в местную почту в SF, где уже знают каждую улицу.

В сети так же: каждый роутер знает только «куда дальше», а не весь путь.

2. Шлюз по умолчанию

Когда твой ноутбук хочет отправить пакет, он смотрит:

  1. Получатель в моей подсети? Тогда отдам напрямую (через MAC через коммутатор)
  2. Не в моей? Тогда отдам своему шлюзу по умолчанию (default gateway) и пусть он разбирается

Шлюз — это обычно твой роутер. У него один интерфейс смотрит в твою LAN, другой — наружу (к провайдеру).

# Узнать свой шлюз
ip route                      # Linux
# default via 192.168.1.1 dev wlan0
# 192.168.1.0/24 dev wlan0 ...

netstat -rn                   # старый универсальный
# 0.0.0.0   192.168.1.1  ...

Здесь 0.0.0.0/0 или default — это «всё, что не подходит ни под одно другое правило». Шлюз — 192.168.1.1.

3. Таблица маршрутизации

У каждого устройства (включая твой ноутбук) есть routing table. Формат: «если адрес назначения подходит под этот CIDR — отправь в этот интерфейс через этот next-hop».

Пример таблицы маршрутизации (ноутбук) Destination Gateway (next hop) Interface Метрика 127.0.0.0/8 lo 0 192.168.1.0/24 wlan0 100 10.20.0.0/16 10.0.0.1 (VPN) tun0 50 0.0.0.0/0 (default) 192.168.1.1 wlan0 600 Правила проверяются сверху вниз. Первое совпадение — выигрывает. Если ничего не подошло — берётся default (0.0.0.0/0).

Логика выбора:

  1. «Хочу на 192.168.1.50?» — подходит под 192.168.1.0/24 → отдаю напрямую через wlan0
  2. «Хочу на 10.20.5.10?» — подходит под 10.20.0.0/16 → отдаю через VPN tun0
  3. «Хочу на 93.184.216.34?» — не подходит ни под что → берётся default, отдаю шлюзу 192.168.1.1

На сервере (роутере, фаерволе, ALB) таблица сложнее, но принцип тот же.

4. Как пакет идёт «по миру» — hop-by-hop

Каждое промежуточное устройство называется hop (прыжок). Пакет от тебя до сервера на другом континенте проходит 10-20 хопов.

Путь пакета: Лондон → Франкфурт 💻 📡 🏢 🌐 🏢 🖥️ ноут192.168.1.42 роутершлюз ISPЛондон backboneЕвропа ISPГермания сервер203.0.113.10 Каждый хоп смотрит таблицу маршрутизации и решает, куда дальше.

На каждом хопе:

TTL — это защита от вечно блуждающих пакетов в случае «петли» в маршрутизации. И именно благодаря TTL работает traceroute — он намеренно отправляет пакеты с TTL=1, TTL=2, TTL=3..., и каждый умирающий пакет на N-ном хопе отвечает «я хоп номер N». Так строится карта пути.

5. NAT — как миллионы за одним IP

В уроке 2 мы видели, что у Алисы и Боба дома одинаковые приватные IP (192.168.1.50), но интернет видит только один публичный IP их роутера. Как это работает?

NAT — Network Address Translation. Роутер «подменяет» адреса при выходе и обратно.

Как роутер «прячет» приватный IP 💻 Ноутбук 192.168.1.42:54321 📡 Роутер (NAT) внутр. 192.168.1.1 внеш. 85.142.55.10 🖥️ Сервер 203.0.113.10:443 → от 192.168.1.42:54321 → к 203.0.113.10:443 → от 85.142.55.10:62000 → к 203.0.113.10:443 Таблица соответствий внутри роутера 192.168.1.42:54321 ↔ 85.142.55.10:62000 192.168.1.51:55001 ↔ 85.142.55.10:62001 192.168.1.51:55002 ↔ 85.142.55.10:62002
Роутер ведёт таблицу соответствий. Исходящий пакет — подменил src на свой публичный IP+новый порт. Ответ пришёл — нашёл в таблице кому отдать.

То, что показано на схеме — это PAT (Port Address Translation) или NAT Overload. Самый частый вид. Роутер запоминает не только адрес, но и порт — поэтому из одного публичного IP может выходить тысячи устройств одновременно.

Плюсы NAT:

Минусы:

6. Port forwarding и DNAT

Если ты хочешь, чтобы кто-то извне мог достучаться до твоего сервера, который сидит за NAT (например, домашний NAS), — настраиваешь port forwarding.

На роутере: «приходит пакет на мой публичный IP, порт 8080 — переадресуй на 192.168.1.100:80».

Это разновидность NAT — DNAT (Destination NAT). Обратная задача — SNAT (Source NAT, что мы видели в обычном NAT).

7. Маршрутизация в облаке (VPC)

В AWS/GCP/Azure ты будешь конфигурировать те же концепции, только через API. Главные понятия:

VPC

Твоя приватная сеть (LAN) в облаке. Размер — выбираешь сам (например, 10.0.0.0/16).

Subnet

Подсеть внутри VPC. Привязана к зоне доступности (AZ). Бывает public (есть выход в интернет) или private.

Route Table

Та же таблица маршрутизации, что мы видели — но для AWS-подсети. Можешь указать «весь трафик 0.0.0.0/0 → в IGW».

Internet Gateway (IGW)

Шлюз для public-подсетей. Через него VPC общается с интернетом.

NAT Gateway

Тот самый NAT для private-подсетей. Позволяет инстансам в private-подсети ходить в интернет, не пуская никого извне.

Security Group / NACL

Фаерволы. SG — на уровне инстанса (stateful). NACL — на уровне подсети (stateless). Default deny — твой друг.

8. Дебаг — ping, traceroute, mtr

ping

Отправляет ICMP echo-пакеты и измеряет, кто отвечает за сколько мс.

ping example.com
ping -c 4 8.8.8.8           # 4 пакета и выход

Если ping не идёт — проблема либо в сети до хоста, либо хост блокирует ICMP. На AWS по умолчанию SG не пропускает ICMP — не пугайся.

traceroute

Показывает каждый хоп на пути. Это «карта пути».

traceroute example.com       # Linux/macOS
tracert example.com          # Windows

Вывод покажет 5-20 строчек — каждая строчка это промежуточный роутер с задержкой до него. Если на каком-то хопе обрыв — там и проблема.

mtr

Лучший инструмент. Сочетает ping + traceroute в реальном времени, показывает потери на каждом хопе.

sudo apt install mtr
mtr example.com

Если на конкретном хопе видишь 80% потерь — там «узкое горлышко». Часто проблема не у тебя и не у получателя, а где-то посередине у транзитного провайдера.

9. Что с этим делает DevOps / DevSecOps

10. Чек-лист «понимаю это»

11. Финальный плейбук: «нет интернета» — весь путь в одном алгоритме

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

Физика: есть ли связь с роутером? (урок 1)
Горит ли значок Wi-Fi / воткнут ли кабель? Открой ipconfig (Windows) / ip addr (Linux). Интерфейс вообще активен? Если нет — дальше проверять нечего: чини физическое подключение (кабель, Wi-Fi, драйвер, авиарежим).
Адрес: а он нормальный? (уроки 2–3)
Смотри свой IPv4-адрес. 192.168.x.x / 10.x.x.x — хорошо, иди дальше. 169.254.x.x — стоп: DHCP не выдал адрес, устройство придумало заглушку. Перезагрузи роутер, переподключись к сети; не помогло — проблема в роутере/DHCP.
Шлюз: доступен ли выход из «района»? (урок 3 + этот)
Найди «Основной шлюз» в ipconfig и пингани его: ping 192.168.1.1. Отвечает за 1–5 мс — LAN в порядке, иди дальше. Не отвечает — проблема между тобой и роутером (или сам роутер завис): перезагрузка роутера решает 80% таких случаев, и теперь ты понимаешь почему — она сбрасывает его таблицы и процессы.
Мир по IP: выпускает ли провайдер? (этот урок)
ping 8.8.8.8 — публичный адрес, DNS не нужен. Отвечает — весь транспорт до интернета жив, остался один подозреваемый (шаг 5). Не отвечает при живом шлюзе — проблема выше твоей квартиры: авария у провайдера или неоплата. tracert 8.8.8.8 покажет, на каком хопе всё обрывается: обрыв на 2–3 хопе = сеть провайдера, звони в поддержку и говори фактами: «до шлюза пинг есть, дальше второй хоп не отвечает».
Имена: «It's always DNS» (урок 5)
ping 8.8.8.8 работает, а сайты не открываются? Проверь: ping ya.ru. «Не удаётся разрешить имя» — диагноз готов: DNS. Плейбук урока 5: другой резолвер (nslookup ya.ru 8.8.8.8), сброс кэша (ipconfig /flushdns), настройки DNS.
Конкретный сервис: а может, не у тебя? (уроки 4, 6)
Всё работает, кроме одного сайта/приложения? Тогда «интернет» ни при чём: проверь порт (nc -zv хост 443, плейбук урока 4) и статус самого сервиса — сайты падают, и 5xx-ответы (урок 6) означают «проблема у них, не у тебя». Есть публичные «downdetector»-сервисы — загляни туда, прежде чем перетряхивать свой роутер.
Почему этот плейбук — «выпускной»

Посмотри, что произошло: шесть шагов — шесть слоёв — шесть уроков. Ты больше не гадаешь «перезагрузить или подождать» — ты локализуешь проблему за минуты и говоришь о ней фактами. Это и есть главный профессиональный навык сетевого инженера, и дальше (в треках профессии СПД) он будет только углубляться: те же шаги, но на операторском оборудовании.

12. Задачи — реши сам (ответы спрятаны)

Задача 1. В таблице маршрутов: default via 192.168.1.1 и 192.168.1.0/24 dev eth0. Куда поедет пакет на 192.168.1.50? А на 8.8.8.8? Почему?

На 192.168.1.50напрямую через eth0: маршрут /24 точнее (длиннее префикс), чем default /0, а побеждает самое точное совпадение. На 8.8.8.8 — подходит только default → пакет уедет шлюзу 192.168.1.1. Это правило longest prefix match — сердце всей маршрутизации.

Задача 2. Админ настроил серверу адрес 192.168.1.10/24 и шлюз 10.0.0.1. Сервер не видит другие сети. В чём ошибка?

Шлюз не из подсети сервера: 10.0.0.1 не входит в 192.168.1.0/24, значит сервер не может добраться до него напрямую — а шлюз обязан быть соседом. Правильный шлюз — что-то вроде 192.168.1.1. Одна из самых частых ошибок ручной настройки.

Задача 3. Дома за NAT ты запустил веб-сервер на 192.168.1.10:80. Друг из интернета зайти не может, хотя у тебя «всё работает». Почему — и что настроить на роутере?

Твой адрес приватный: из интернета он немаршрутизируем, а NAT по умолчанию пропускает только соединения, начатые изнутри. Входящему соединению друга роутер не знает, кому отдать пакет. Решение — port forwarding (DNAT): правило «всё, что пришло на мой публичный :80 → отдавать на 192.168.1.10:80».

Задача 4. traceroute до сервера показывает 12 хопов, на 7-м — «* * *», но дальше хопы отвечают, и сайт работает. Авария ли это?

Нет. «* * *» на промежуточном хопе чаще всего значит, что этот роутер просто не отвечает на служебные запросы (так настроен) — но трафик через себя пропускает: следующие хопы же видны. Тревога — когда звёздочки идут до самого конца: тогда путь реально обрывается.

Задача 5. Почему у пакета есть TTL и что произойдёт без него? Как TTL использует traceroute?

TTL (time to live) уменьшается на 1 на каждом хопе; на нуле пакет уничтожается. Без TTL пакет, попавший в кольцевой маршрут (ошибка конфигурации), крутился бы вечно и забивал сеть. Traceroute хитро этим пользуется: шлёт пакеты с TTL=1, 2, 3… — каждый умирает на своём хопе, и роутер-«убийца» сообщает о себе. Так и рисуется карта пути.

Задача 6. В AWS ты создал приватную подсеть для базы данных. Базе нужно скачивать обновления из интернета, но снаружи она должна быть недоступна. Какой компонент VPC это решает и почему это ровно домашний NAT?

NAT Gateway: подсеть получает маршрут «в интернет — через NAT GW». Исходящие соединения (за обновлениями) работают, а входящие снаружи — нет, ведь у базы нет публичного адреса, и NAT не пропустит незапрошенное. Ровно так же твой домашний роутер защищает 192.168.1.10: выходить можно, войти без приглашения нельзя.

Маршрутизация — это локальные решения «куда дальше» на каждом хопе. У каждого устройства есть routing table. NAT позволяет миллионам приватных адресов жить за одним публичным IP — за счёт подмены адреса+порта. В облаке те же концепции — VPC, subnet, route table, IGW, NAT Gateway. Для дебага — ping, traceroute, mtr.

Что дальше

Поздравляю — ступень 0 пройдена!

Если ты дошёл до сюда, решил задачи и можешь поставить ✅ хотя бы в 80% чек-листов — ты больше не новичок. У тебя есть фундамент, который многие «действующие айтишники» так и не построили. Дальше маршрут профессии продолжается:

  1. Главная дорога: открой страницу профессии «Инженер СПД» — там тебя ждёт ступень 1: «Услуги оператора» (ARP-таблицы, VRF, BGP и реальные услуги провайдера). Именно этот путь ведёт к первому найму.
  2. Хочешь сначала копнуть веб-сторону глубже — трек «Путь HTTPS-запроса — deep dive»: 10 этапов разбора каждой точки на пути запроса. Теперь ты пройдёшь его без вопросов.
  3. И закрепи ступень: тест «Сети — лёгкий», цель — 80%+.
← Назад
Урок 7: HTTPS и TLS