Что такое таблица маршрутизации и как она работает: полное руководство для администратора | AdminWiki

Что такое таблица маршрутизации и как она работает: полное руководство для администратора

18 сентября 2026 12 мин. чтения
Содержание статьи

Что такое таблица маршрутизации и зачем она нужна

Таблица маршрутизации - это структура данных в ядре операционной системы или в памяти сетевого устройства, которая сопоставляет IP-адрес назначения с исходящим интерфейсом и следующим узлом. Ядро обращается к ней при отправке каждого пакета: находит подходящую запись и передаёт трафик по указанному пути. Если совпадений нет, пакет отбрасывается, а приложение получает ошибку Network is unreachable или тайм-аут соединения.

Без такой таблицы хост знает только о сетях, подключённых к его интерфейсам напрямую. Для выхода в интернет нужна как минимум одна запись: маршрут по умолчанию. На рабочей станции записей обычно 3-6, на пограничном маршрутизаторе провайдера с полным набором BGP-префиксов счёт идёт на миллионы. Логика поиска от масштаба не зависит: ядро всегда выбирает наиболее точное совпадение.

Практическая ценность таблицы в том, что она объясняет поведение сети, которое без неё выглядит непредсказуемым. Почему SSH к серверу в соседней подсети работает, а к узлу за VPN обрывается? Почему трафик уходит через резервный канал, хотя основной доступен? Ответ почти всегда лежит в нескольких строках таблицы и в порядке их выбора. Типовые сценарии для корпоративных сетей собраны в отдельном материале про IP-маршрутизацию и её диагностику.

Ключевые понятия: маршрут, шлюз, интерфейс

Маршрут - правило вида "сеть X доступна через узел Y на интерфейсе Z". Каждая строка таблицы описывает одну такую связку. Часть правил ядро создаёт само, когда вы поднимаете интерфейс с адресом и маской: так появляются маршруты к подключённым подсетям. Остальные записи добавляет администратор или клиент динамической маршрутизации.

Шлюз (gateway) - IP-адрес узла в локальной сети, который принимает пакет и передаёт его дальше. Напрямую в удалённую сеть пакет уйти не может, его нужно отдать тому, кто знает путь. Шлюз обязан быть достижим по подключённому маршруту: если его адрес не попадает в локальную подсеть, запись окажется нерабочей, и Linux даже откажется её принимать с сообщением вида Nexthop has invalid gateway.

Интерфейс - сетевой адаптер, через который пакет физически покидает хост: eth0, enp3s0, wlan0 в Linux, Ethernet или Wi-Fi в Windows. Когда адаптеров несколько, поле интерфейса определяет, в какой сегмент попадёт трафик, а значит и то, какой шлюз окажется доступным.

Пример записи: маршрут по умолчанию 0.0.0.0/0 через шлюз 192.168.1.1 на интерфейсе eth0. Так выглядит типовая офисная или домашняя сеть: всё, что не адресовано локальной подсети, уходит на роутер.

Структура таблицы маршрутизации: разбор ключевых полей

Формат вывода зависит от операционной системы, но набор смысловых полей одинаков: целевая сеть, маска, шлюз, интерфейс и метрика. Названия колонок различаются, назначение остаётся тем же.

ПолеЧто означаетПример значения
DestinationСеть назначения192.168.1.0
Netmask / GenmaskМаска целевой сети255.255.255.0
GatewayСледующий узел, которому передаётся пакет192.168.1.1
Interface / IfaceИсходящий сетевой адаптерeth0
MetricПриоритет маршрута при прочих равных100

Помимо смысловых полей, вывод утилит содержит служебные: Flags (состояние записи), Ref (число ссылок в ядре), Use (счётчик обращений). Буква U во флагах означает, что маршрут активен, G - что пакет идёт через шлюз, H - что адрес назначения указывает на конкретный хост, а не на сеть. Служебные колонки полезны при отладке: по счётчику Use видно, использовался ли маршрут вообще, а по Ref можно заметить, что запись кто-то удерживает.

Destination и Netmask: определение целевой сети

Destination задаёт сеть назначения, netmask (в выводе route - колонка Genmask) определяет её размер. Вместе они описывают диапазон адресов. Запись 192.168.1.0 с маской 255.255.255.0 охватывает адреса с 192.168.1.0 по 192.168.1.255: 256 значений, из которых 254 можно назначить хостам.

Маска задаёт и длину префикса в нотации CIDR: 255.255.255.0 соответствует /24, 255.255.0.0 - /16, 255.0.0.0 - /8. Маршрут по умолчанию записывают как 0.0.0.0/0. Нулевая маска подходит под любой адрес, поэтому к этой строке ядро обращается последней, когда более точных совпадений не нашлось.

Gateway: куда отправлять пакеты

Gateway содержит адрес следующего узла, которому передаётся пакет, если целевая сеть недоступна напрямую. Для выхода в интернет здесь стоит адрес провайдерского или корпоративного роутера. Если в поле указан 0.0.0.0 или символ *, маршрут ведёт в сеть, подключённую к интерфейсу напрямую, и шлюз для него не нужен: пакет уйдёт по адресу назначения в тот же L2-сегмент.

В выводе ip route шлюз обозначается словом via, а в выводе route print для Windows вместо нуля используется метка On-link. Это разные записи одного смысла: прямая доставка без промежуточного узла.

Interface: выбор сетевого адаптера

Interface указывает, через какой адаптер уйдёт пакет: eth0, enp3s0, wlan0 в Linux или имя подключения в Windows. Если на хосте один интерфейс, поле редко вызывает вопросы. С двумя и более начинается самое интересное: маршрут к одной и той же сети может существовать на разных адаптерах, и выбор между ними решают метрики.

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

Metric: приоритет маршрута

Metric - числовое значение, которое используется для выбора между маршрутами одинаковой специфичности. Чем меньше метрика, тем выше приоритет. Если в таблице два маршрута по умолчанию, например через 192.168.1.1 с метрикой 100 и через 10.0.0.1 с метрикой 50, весь неопределённый трафик уйдёт через второй.

Метрику задают вручную или система вычисляет её сама. В Windows значение по умолчанию связано со скоростью интерфейса: у гигабитного адаптера метрика будет меньше, чем у Wi-Fi, и при наличии обоих подключений предпочтение достанется кабелю.

Как ядро выбирает маршрут: longest prefix match, административная дистанция и метрика

Выбор маршрута - последовательность сравнений, а не один критерий. Ядро действует по шагам.

  1. Собирает все записи, под которые подходит IP-адрес назначения.
  2. Оставляет маршруты с самой длинной маской, то есть с самым специфичным префиксом (longest prefix match).
  3. Если кандидатов несколько, сравнивает административную дистанцию, то есть уровень доверия к источнику маршрута.
  4. При равной дистанции сравнивает метрики: выигрывает меньшее значение.

Когда совпадают и метрики, решение зависит от реализации: ядро может распределять трафик между равнозначными маршрутами (ECMP) либо использовать первый по внутреннему порядку. Рассчитывать на конкретное поведение в таком случае не стоит, лучше развести маршруты по метрике или таблице.

Longest prefix match на практике

Пусть в таблице есть три записи: 10.0.0.0/8 через шлюз A, 10.1.0.0/16 через шлюз B и 10.1.1.0/24 через шлюз C. Пакет к адресу 10.1.1.5 подходит под все три, но ядро выберет /24: у него самая длинная маска.

МаршрутШлюзПодходит для 10.1.1.5Итог
10.0.0.0/8AДаОтклонён: короткий префикс
10.1.0.0/16BДаОтклонён: короткий префикс
10.1.1.0/24CДаВыбран

Такой механизм позволяет строить точечные исключения: общий трафик в 10.0.0.0/8 идёт через корпоративный шлюз, а одна подсеть уходит через VPN или локальный сегмент. Достаточно добавить более длинный префикс, и он победит без изменения остальных записей.

Административная дистанция: когда метрика не главное

Административная дистанция (administrative distance, AD) показывает, насколько источник маршрута заслуживает доверия. Сравнение идёт до метрики, поэтому маршрут от более надёжного источника выигрывает даже при худшей метрике. У вендоров сетевого оборудования приняты такие значения по умолчанию:

Источник маршрутаАдминистративная дистанция
Подключённая сеть (connected)0
Статический маршрут1
eBGP20
EIGRP90
OSPF110
RIP120

Отсюда типовое правило проектирования: статический маршрут к 10.1.0.0/16 с AD 1 перекроет анонс той же сети, пришедший по OSPF с AD 110. Значения можно менять вручную, но делать это стоит осознанно: слишком низкая дистанция у динамического протокола приводит к перехвату трафика, который должен идти по статике.

В Linux явного поля для административной дистанции нет. Приоритет задают метрикой и номером таблицы, а источник маршрута виден в поле proto: kernel, static, dhcp, boot, ra. Значения proto служат для отладки, а не для сравнения при выборе пути.

Как посмотреть таблицу маршрутизации в Linux и Windows

Просмотр не требует прав root, а вот добавление и удаление записей - требует. В Linux современный инструмент это ip route из пакета iproute2, в Windows - route print или netstat -rn.

Просмотр таблицы в Linux: ip route и route -n

Команда ip route show выводит основную таблицу:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.8.0.0/24 via 192.168.1.1 dev eth0 metric 50

Первая строка описывает маршрут по умолчанию: default вместо 0.0.0.0/0, шлюз после via, исходящий адаптер после dev, метрика в конце. Вторая строка - подключённая подсеть: шлюза нет, scope link означает прямую доставку, src задаёт адрес источника. Третья строка - статический маршрут к сети 10.8.0.0/24 через тот же шлюз с метрикой 50.

Утилита route -n из пакета net-tools выводит те же данные в старом формате с колонками Destination, Gateway, Genmask, Flags, Metric, Ref, Use, Iface. В актуальных дистрибутивах её считают устаревшей. Практические примеры работы с ip route, включая маршруты для нескольких провайдеров и VLAN, собраны в руководстве по статической маршрутизации в Linux.

Для проверки конкретного решения полезнее команда ip route get: она показывает, по какому маршруту и с какого адреса источника уйдёт пакет к заданному IP. Например, ip route get 8.8.8.8 вернёт интерфейс, шлюз и адрес источника, которые выберет ядро. Все таблицы сразу выводит ip route show table all.

Просмотр таблицы в Windows: route print и netstat -rn

Команда route print показывает таблицы для IPv4 и IPv6, а также список интерфейсов с их индексами. Раздел IPv4 Route Table выглядит так:

Network Destination  Netmask  Gateway  Interface  Metric
0.0.0.0  0.0.0.0  192.168.1.1  192.168.1.100  25
127.0.0.0  255.0.0.0  On-link  127.0.0.1  331
192.168.1.0  255.255.255.0  On-link  192.168.1.100  281

Поле Interface здесь содержит локальный IP-адрес адаптера, а не его имя. Метка On-link равнозначна нулевому шлюзу: доставка идёт напрямую. Команда netstat -rn выдаёт ту же информацию по IPv4 в формате, привычном для Unix-администраторов. Пошаговая работа с этими командами, включая netsh, разобрана в шпаргалке по маршрутизации в Windows.

Различия таблиц маршрутизации в Linux, Windows и сетевом оборудовании

Смысл полей совпадает, а архитектура отличается. Это заметно при переходе с рабочей станции на сервер и дальше на коммутатор или маршрутизатор.

Особенности Linux: несколько таблиц и политики маршрутизации

В Linux таблиц не одна. По умолчанию существуют local (номер 255) для локальных и широковещательных адресов, main (254) для обычных маршрутов и default (253), которая пуста, пока её не заполнят. Список соответствий номеров и имён лежит в файле /etc/iproute2/rt_tables, свои таблицы добавляют туда же.

Выбор таблицы выполняют правила ip rule, которые просматриваются по возрастанию приоритета. Правило может учитывать адрес источника, метку пакета (fwmark), интерфейс или тип трафика. Пример переключения подсети на отдельную таблицу:

ip rule add from 192.168.1.0/24 table 100
ip route add default via 10.0.0.1 dev eth1 table 100

Такая схема даёт то, чего нет в Windows: разные маршруты по умолчанию для разных источников и приложений. Сценарии с двумя провайдерами, VPN и контейнерами разобраны в статье про профили маршрутизации в Linux.

Особенности Windows: простота и автоматические метрики

В Windows одна основная таблица маршрутизации для каждого семейства адресов: отдельно для IPv4, отдельно для IPv6. Метрики назначаются автоматически с привязкой к скорости интерфейса, поэтому при подключении кабеля и Wi-Fi одновременно трафик уйдёт по кабелю. Ручная метрика задаётся в свойствах протокола IPv4 или командой route change.

Постоянные маршруты добавляют ключом -p: запись сохраняется в реестре и восстанавливается после перезагрузки. Без этого ключа маршрут исчезнет при следующем старте системы. Аналог политик маршрутизации в Windows ограничен: выбор по адресу источника в стандартных средствах не поддерживается.

Сетевое оборудование: административная дистанция и протоколы

На коммутаторах и маршрутизаторах таблица делится на RIB (маршруты, выбранные программно) и FIB (записи, загруженные в аппаратный поиск). Наполняют её протоколы динамической маршрутизации: OSPF, BGP, EIGRP, IS-IS. Когда несколько протоколов сообщают об одной сети, выбор идёт по административной дистанции, затем по метрике протокола.

Поиск по FIB выполняется аппаратно, поэтому таблица на десятки тысяч префиксов обрабатывается с той же скоростью, что и на десятки. Именно поэтому на сетевом оборудовании административная дистанция работает в явном виде, а статические маршруты сознательно держат с AD 1 для перекрытия динамических анонсов.

Практические примеры работы с таблицей маршрутизации

Основные операции одинаковы на всех платформах: посмотреть текущее состояние, добавить запись, удалить её, проверить результат.

Добавление и удаление маршрутов в Linux

Маршрут к сети 10.0.0.0/8 через шлюз 192.168.1.2 на интерфейсе eth0 добавляет команда:

ip route add 10.0.0.0/8 via 192.168.1.2 dev eth0
ip route add 10.0.0.0/8 via 192.168.1.2 dev eth0 metric 50
ip route del 10.0.0.0/8
ip route replace 10.0.0.0/8 via 192.168.1.3 dev eth0

Ключ metric задаёт приоритет, replace меняет существующую запись без ошибки. Изменения, сделанные через ip route, живут до перезагрузки. Чтобы маршрут сохранился, его прописывают в конфигурации: в /etc/netplan/*.yaml для Ubuntu, в /etc/network/interfaces для Debian-подобных систем, в файлах .network для systemd-networkd или добавляют через nmcli для NetworkManager.

Добавление и удаление маршрутов в Windows

В Windows используется команда route с маской в десятичном виде:

route add 10.0.0.0 mask 255.0.0.0 192.168.1.2
route add 10.0.0.0 mask 255.0.0.0 192.168.1.2 -p
route delete 10.0.0.0
route print

Ключ -p делает маршрут постоянным. Без него запись удалится после перезагрузки, и сервис, зависящий от неё, не поднимется. Проверять результат удобно через route print или netstat -rn: новая строка появится в разделе IPv4 Route Table.

Один диагностический приём стоит запомнить: если пакет уходит не туда, где вы ожидали его увидеть, посмотрите на список совпавших маршрутов и найдите среди них самый длинный префикс. В девяти случаях из десяти причина в более специфичной записи, добавленной VPN-клиентом, контейнерной сетью или прошлой настройкой.

Типичные ошибки и советы по диагностике

Большинство проблем с маршрутизацией связано не с экзотикой, а с парой простых ошибок.

  • Неверная маска. Для сети 10.0.0.0 задана маска 255.255.255.0 вместо 255.0.0.0. Часть адресов не попадёт в маршрут и уйдёт через шлюз по умолчанию.
  • Шлюз вне подключённой подсети. Адрес 10.0.0.1 в маршруте на интерфейсе с сетью 192.168.1.0/24 недостижим. Linux отклонит такую запись, а на другом оборудовании она просто не заработает.
  • Два маршрута по умолчанию с равной метрикой. Результат зависит от внутреннего порядка выбора, трафик может уходить в неожиданный канал. Разведите записи метриками.
  • Забытая персистентность. Маршрут добавлен вручную, работает до перезагрузки и исчезает. В Linux это исправляют конфигурацией сети, в Windows - ключом -p.
  • Перехват трафика VPN-клиентом. Клиент добавляет маршрут 0.0.0.0/0 с меньшей метрикой, и весь трафик, включая рабочие сервисы, уходит в туннель.
  • Потеря управления при правке маршрута по умолчанию. Если менять таблицу на удалённом сервере без резервного канала, можно остаться без SSH-доступа до перезагрузки.

Порядок проверки при сетевой проблеме: ip route get для адреса, который не отвечает, ping до шлюза из выбранного маршрута, traceroute до цели, проверка MTU и фильтров. Если пакеты уходят, но ответа нет, стоит посмотреть счётчики интерфейса и захват трафика. Полный набор команд для проверки маршрутов, firewall, MTU и ARP собран в материале про диагностику Linux-маршрутизатора.

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

Поделиться:
Сохранить гайд? В закладки браузера