Маршрутизация: как пакет выбирает следующий узел
Таблица маршрутизации, default gateway, longest prefix match и практическая диагностика.
IP-маршрутизация отвечает на простой вопрос: куда отправить пакет дальше. Каждый маршрутизирующий узел сравнивает адрес назначения со своей таблицей маршрутов и выбирает наиболее специфичное совпадение.
Directly connected сети
Если интерфейс имеет адрес 192.168.10.1/24, ядро автоматически знает, что сеть 192.168.10.0/24 доступна напрямую через этот интерфейс. Для отправки кадра конкретному соседу в IPv4 затем используется ARP.
Default route
Маршрут 0.0.0.0/0 подходит для любого IPv4-адреса, поэтому используется, когда более специфичного маршрута нет.
Longest prefix match
Если таблица содержит сети /8, /16 и /24, а адрес подходит под все три, будет выбран /24, потому что это наиболее длинный и специфичный префикс.
Почему ping в одну сторону работает, а обратно нет
Маршрутизация нужна в обоих направлениях. Даже если запрос дошёл до назначения, ответ должен найти обратный маршрут. Асимметрия допустима, но stateful firewall и некоторые политики могут реагировать на неё неожиданно.
Практическая диагностика
На Linux полезно спрашивать ядро напрямую: ip route get <адрес>. Команда показывает выбранный маршрут, интерфейс и source address. Затем стоит проверить neighbor table, firewall и прохождение пакетов с помощью tcpdump.
Практический вывод
Сетевую проблему удобно раскладывать по этапам: выбор маршрута, разрешение L2-соседа, отправка пакета, обратный маршрут и фильтрация.