Битлента
Сетевые команды и утилиты5 мин чтения·

ip route show в Linux: как читать таблицу маршрутов и шлюз по умолчанию

Как читать вывод ip route в Linux: default via, proto dhcp, scope link, metric, ip route get, временное добавление маршрута. Примеры и разбор.

Кратко

Команда ip route show выводит таблицу маршрутов. Строка default via адрес dev интерфейс указывает шлюз по умолчанию, а ip route get адрес показывает, по какому маршруту пойдёт пакет к конкретному узлу. Изменения через ip route add действуют до перезагрузки.

Что такое таблица маршрутов

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

В Linux таблицу показывает команда ip route show, которую можно сократить до ip route или ip r. Для IPv6 используйте ip -6 route. Права администратора для просмотра не нужны. Общее понятие шлюза описано на странице словаря про шлюз по умолчанию.

Для домашней сети таблица обычно короткая: маршрут по умолчанию и запись о локальной сети. Если записей много, значит, на машине работают контейнеры, виртуальные машины или дополнительные сетевые программы, и каждая добавляет свои строки. Это нормально, но помогает объяснить сложное поведение.

Разбор типичного вывода

Пример (пример, адреса из блока документации):

default via 192.0.2.1 dev enp3s0 proto dhcp src 192.0.2.10 metric 100 192.0.2.0/24 dev enp3s0 proto kernel scope link src 192.0.2.10 metric 100 198.51.100.0/24 via 192.0.2.254 dev enp3s0

ЭлементЗначение
defaultМаршрут по умолчанию: всё, что не подошло под другие записи
via адресСледующий шаг, шлюз, которому передаётся пакет
dev имяИнтерфейс, через который отправляется пакет
proto dhcp / kernel / staticКто создал запись: DHCP-клиент, ядро автоматически или администратор вручную
scope linkСеть доступна напрямую, без шлюза
src адресАдрес источника, который подставится в пакеты
metric числоПриоритет записи: меньше значит предпочтительнее

Вторая строка появилась автоматически, когда интерфейс получил адрес: ядро знает, что сеть 192.0.2.0/24 находится прямо на интерфейсе. Третья строка добавлена вручную: пакеты для сети 198.51.100.0/24 идут через соседа 192.0.2.254.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Как узнать, куда пойдёт пакет: ip route get

Чтение таблицы полезно, но иногда нужен прямой ответ на вопрос «через какой интерфейс и шлюз пойдёт трафик к этому адресу». Для этого служит команда ip route get с адресом назначения. Пример (пример): ip route get 203.0.113.50.

Вывод показывает выбранный маршрут, шлюз, интерфейс и адрес источника, например: 203.0.113.50 via 192.0.2.1 dev enp3s0 src 192.0.2.10. Так удобно проверять поведение системы, когда у компьютера несколько интерфейсов (проводной и беспроводной, или дополнительные виртуальные). Если ответ показывает не тот интерфейс, которого вы ожидали, изучайте метрики и таблицу подробнее.

Также полезно проверить, что маршрут по умолчанию вообще есть. Без строки default ни один внешний адрес не будет доступен, хотя локальная сеть работает. Такое бывает, если DHCP не выдал шлюз или его убрали при ручной настройке.

Вывод ip route get полезен и для проверки, почему не работает доступ к конкретной подсети: если в ответе указан шлюз по умолчанию, а вы рассчитывали на прямое подключение, значит, нужного маршрута в таблице нет. Так вы находите недостающую запись без гаданий.

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

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

  1. Добавьте маршрут: ip route add 198.51.100.0/24 via 192.0.2.254 dev enp3s0 (пример).
  2. Проверьте, что запись появилась: ip route show.
  3. Проверьте выбор маршрута: ip route get 198.51.100.7.
  4. Проверьте доступность: ping в целевую сеть.
  5. Удалить маршрут можно командой ip route del 198.51.100.0/24.

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

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

Диагностика по таблице маршрутов

Типичные проблемы, которые видны в таблице сразу.

  • Нет строки default. Выход наружу невозможен. Проверьте DHCP и настройки соединения.
  • Две строки default с одинаковыми метриками или разными интерфейсами. Трафик может уходить не туда, вы получите нестабильную работу. Убедитесь, что предпочтительный интерфейс имеет меньшую метрику.
  • Шлюз в неверной подсети, вне диапазона интерфейса: пакеты не будут доставлены.
  • Лишние маршруты, оставшиеся после экспериментов или от дополнительных сетевых программ: они могут перехватывать трафик к определённым сетям.
  • Необычный proto: запись, созданная вручную или сторонней программой, а не системой.

Когда нужно просмотреть все таблицы, а не только основную, используйте ip route show table all, а правила выбора таблиц смотрят командой ip rule. Для большинства домашних систем достаточно основной таблицы. Дальше в цепочке диагностики полезны трассировка, о которой рассказывает страница про traceroute, и проверка адресов интерфейсов командой ip addr.

Перед любым изменением сохраните текущее состояние: ip route show > routes-before.txt. Если правка приведёт к потере связи, у вас будет копия исходной таблицы, по которой можно быстро восстановить рабочие настройки, в том числе через локальную консоль.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
ip routelinuxмаршрутизацияшлюз

Часто задаваемые вопросы

Читайте также