Быстрый ответ: как посмотреть таблицу маршрутизации в Linux
Таблицу маршрутизации в Linux выводят три команды: ip route show, route -n и netstat -rn. Первая входит в пакет iproute2 и работает на современных дистрибутивах. Вторая и третья пришли из net-tools и встречаются на старых хостах, в legacy-скриптах и в контейнерах, собранных на устаревших базовых образах.
Таблица маршрутизации хранит правила, по которым ядро выбирает интерфейс и шлюз для исходящего пакета. Ядро перебирает записи от самой точной к самой общей и отправляет пакет по первому совпадению. Одна строка с неверным шлюзом или приоритетом меняет путь трафика для целой подсети, поэтому просмотр таблицы входит в первые шаги диагностики.
ip route show route -n netstat -rn
Что вернёт 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.0.0.0/8 via 192.168.1.254 dev eth0
Та же конфигурация в выводе route -n:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Когда нужны все таблицы, а не только main, выполните ip route show table all: команда выведет main, local, default и любые пользовательские таблицы с их именами.
Команда ip route show: синтаксис и разбор вывода
Синтаксис: ip route show [table TABLE] [dev IFACE] [via IP] [PREFIX]. Без аргументов команда печатает таблицу main. Права root не нужны, чтение таблицы маршрутизации доступно обычному пользователю.
ip route show ip route show table main ip route show table local ip route show table default ip route show table all
Разбор строки default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100: пакеты к адресам, для которых нет более точного маршрута, уходят через шлюз 192.168.1.1 на интерфейсе eth0, запись добавил DHCP-клиент, исходным адресом выбран 192.168.1.100, приоритет равен 100.
Строка 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 описывает подключённую сеть: адреса из 192.168.1.0/24 доступны напрямую, шлюз не нужен, запись создало ядро при назначении адреса интерфейсу. Строка 10.0.0.0/8 via 192.168.1.254 dev eth0 показывает статический маршрут к удалённой сети через другой шлюз.
Что означают поля default, via, dev, proto, scope, src, metric
| Поле | Значение | Пример |
|---|---|---|
| default | маршрут по умолчанию, применяется, когда нет более специфичного совпадения | default via 192.168.1.1 |
| via | IP-адрес шлюза, которому передаётся пакет | via 192.168.1.254 |
| dev | сетевой интерфейс, через который уйдёт пакет | dev eth0 |
| proto | источник записи: kernel (создало ядро), dhcp (добавил DHCP-клиент), static (добавлен вручную), boot (при загрузке) | proto kernel |
| scope | область действия: link (адреса только внутри локального сегмента), global (маршрут пригоден для любых адресов), host | scope link |
| src | предпочтительный исходный IP для исходящих пакетов по этому маршруту | src 192.168.1.100 |
| metric | приоритет при нескольких маршрутах к одной сети, меньшее значение выигрывает | metric 100 |
Практический вывод: если к одной подсети ведут несколько записей, ядро выберет запись с меньшей метрикой, а при равных метриках - с более длинной маской. Разбор конфигураций с несколькими провайдерами приведён в руководстве по настройке маршрутизации в Linux: полное руководство по ip route, таблицам и статическим маршрутам.
Команда route -n: вывод и расшифровка
route входит в пакет net-tools. Флаг -n отключает обратное разрешение имён, поэтому вместо имён хостов и сетей выводятся IP-адреса: результат приходит быстрее и не зависит от доступности DNS.
route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
| Колонка | Что содержит |
|---|---|
| Destination | целевая сеть или адрес; 0.0.0.0 в паре с нулевой маской означает маршрут по умолчанию |
| Gateway | шлюз, которому передаётся пакет; 0.0.0.0 значит, что сеть доступна напрямую |
| Genmask | маска подсети для целевой сети |
| Flags | U - маршрут активен, G - пакет идёт через шлюз, H - маршрут указывает на отдельный хост с маской 255.255.255.255 |
| Metric | приоритет маршрута, меньшее значение выигрывает |
| Ref | счётчик ссылок, в Linux не используется и остаётся нулевым |
| Use | сколько раз маршрут был задействован при отправке пакетов |
| Iface | сетевой интерфейс |
Комбинация UG в колонке Flags означает активный маршрут по умолчанию через шлюз. Запись с маской 255.255.255.255 ведёт к единственному адресу, такие строки часто добавляют для VPN-пира или отдельного сервера.
Учтите ограничение: route меняет формат вывода между версиями net-tools и не умеет показывать таблицу по имени. Просмотреть local или пользовательскую таблицу этой командой не получится.
Команда netstat -rn: таблица маршрутизации в старом стиле
В netstat -rn флаг -r отвечает за таблицу маршрутизации, а -n отключает DNS-разрешение. Команда тоже относится к net-tools.
netstat -rn
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Отличия от route -n: добавлены колонки MSS, Window и irtt. Исторически они описывали параметры кэша маршрутов и TCP: максимальный размер сегмента, размер окна и начальное время круговой задержки. В современных ядрах эти значения обычно нулевые, поэтому при диагностике опирайтесь на Destination, Gateway, Genmask, Flags и Iface.
Если net-tools на хосте нет, используйте замену из iproute2: ss -rn выводит таблицу маршрутов. Флаги ss позволяют посмотреть сокеты, соединения и таймеры, а -r ограничивает вывод маршрутами.
Как отфильтровать маршруты по интерфейсу, шлюзу или подсети
ip route show фильтрует вывод без внешних утилит:
ip route show dev eth0 ip route show via 192.168.1.1 ip route show 192.168.1.0/24 ip route show table all | grep -w default
Фильтр по интерфейсу нужен, когда на сервере несколько сетевых карт и надо понять, куда уходит трафик через конкретный порт. Фильтр по шлюзу показывает все сети, достижимые через этот адрес. Фильтр по префиксу отвечает на вопрос, есть ли вообще маршрут к нужной подсети.
Самый точный способ узнать, какой маршрут ядро выберет для конкретного адреса:
ip route get 8.8.8.8 ip route get 192.168.1.50
Команда выводит интерфейс, шлюз и исходный адрес для одного адреса назначения и ничего не меняет в таблице. Для route и netstat фильтрация возможна только через grep или awk:
route -n | grep -w eth0 netstat -rn | awk '$8 == "eth0"'
grep ищет подстроку по всей строке, поэтому шаблон eth0 сработает и там, где этот текст попал в другое поле, например в Gateway при нестандартных именах. awk сравнивает конкретную колонку, в обоих случаях восьмую, и даёт точный результат. Если разбор вывода вызывает сомнения, сверьтесь с чеклистом по диагностике проблем маршрутизации на сервере.
Различия таблиц main, local и default
Ядро Linux работает с несколькими таблицами маршрутизации, их номера и имена перечислены в /etc/iproute2/rt_tables. По умолчанию ip route show печатает таблицу main.
| Таблица | Номер | Содержимое | Команда просмотра |
|---|---|---|---|
| main | 254 | маршруты по умолчанию для всей системы: подключённые сети, шлюзы, статические записи | ip route show table main |
| local | 255 | маршруты к локальным адресам хоста и broadcast, их создаёт ядро | ip route show table local |
| default | 253 | пустая таблица, применяется в policy routing вместе с правилами ip rule | ip route show table default |
Таблица local объясняет поведение, которое часто принимают за ошибку маршрутизации: пакет к собственному IP не уходит через шлюз, а обрабатывается на месте. Адрес закреплён за интерфейсом, значит ядро добавляет запись в local автоматически.
Понять, какая таблица задействована для конкретного трафика, помогает ip rule: правила показывают, по какому признаку ядро выбирает таблицу, будь то адрес источника, метка fwmark или интерфейс.
ip rule show ip route show table all
Просмотр безопасен для рабочего сервера, изменение таблиц способно разорвать сетевую доступность. Правки на продакшн-хосте планируйте только с доступом через консоль, а не исключительно по SSH.
Какие утилиты актуальны в 2026 году, а какие устарели
Штатный инструмент современных дистрибутивов - пакет iproute2 с командами ip и ss. Он закрывает задачи, которые раньше решали route, netstat, ifconfig и arp из net-tools. Проверить состав пакетов на конкретном хосте можно без догадок:
command -v ip route netstat ss rpm -q net-tools apt list --installed | grep net-tools
Если команда command -v route не выводит путь, пакет net-tools не установлен, и для свежих сборок это ожидаемо. Набор утилит отличается между дистрибутивами и версиями, поэтому ориентируйтесь на результат проверки на своём сервере, а не на память.
| Задача | net-tools | iproute2 |
|---|---|---|
| показать маршруты | route -n | ip route show |
| таблица маршрутов в старом стиле | netstat -rn | ss -rn |
| адреса интерфейсов | ifconfig | ip addr show |
| ARP-таблица | arp -n | ip neigh show |
| слушающие порты | netstat -tulpn | ss -tulpn |
Когда утилита нужна для совместимости со старым скриптом или runbook-ом, net-tools ставят отдельно: apt install net-tools или dnf install net-tools. Это изменение системы, на рабочем хосте согласуйте его с владельцем сервиса. Для новых задач берите ip и ss: iproute2 развивается, net-tools получает правки совместимости. Обзор практик маршрутизации в корпоративных сетях собран в материале IP-маршрутизация в 2026 году: настройка и диагностика.
Как использовать таблицу маршрутизации для диагностики сетевых проблем
Порядок проверки, который не меняет конфигурацию сервера:
- Маршрут по умолчанию. Выполните ip route show | grep -w default. Пустой результат означает, что внешние соединения не работают: ядру неизвестно, куда отправлять пакеты к адресам вне подключённых сетей. Причина обычно в настройках DHCP или в отключённом интерфейсе.
- Путь к конкретному адресу. ip route get 8.8.8.8 показывает интерфейс, шлюз и исходный адрес. Если интерфейс не тот, который вы ожидали, ищите лишний маршрут с меньшей метрикой или правило ip rule.
- Таблица local. ip route show table local выведет локальные адреса и broadcast. Так отсекаются ситуации, когда трафик к собственному IP обрабатывается на месте, а не уходит наружу.
- Метрики. При нескольких маршрутах к одной сети сравните metric: ядро выберет запись с меньшим значением.
- Доступность шлюза. ping шлюза из таблицы отличает недоступный шлюз от неверного маршрута. Если шлюз отвечает, а внешние адреса нет, проверьте NAT и firewall на стороне шлюза.
Команды просмотра не вносят изменений: ip route show, ip route get, ip rule show и ip -6 route show для IPv6 безопасны на любом сервере. Дальнейшие шаги проверки, включая разбор проблем с DNS, firewall, VPN и MTU, приведены в чеклисте по диагностике Linux-маршрутизатора.
Частые вопросы и типичные ошибки
Команда route не найдена, что делать?
Сообщение command not found означает, что пакет net-tools не установлен. Ставьте его только при реальной необходимости, а для просмотра маршрутов используйте ip route show из iproute2.
Как посмотреть маршруты для IPv6?
Добавьте флаг -6: ip -6 route show. Поля те же, что и в IPv4, а адреса сетей и шлюзов записаны в шестнадцатеричном виде.
Что делать, если маршрут по умолчанию отсутствует?
Проверьте, получил ли интерфейс адрес по DHCP (ip addr show), и посмотрите логи DHCP-клиента. Добавление маршрута вручную - это изменение конфигурации, его делают осознанно и не на единственном канале доступа к серверу.
Почему в таблице local так много записей?
Ядро добавляет маршруты для каждого адреса на интерфейсах, для broadcast-адресов и для служебных диапазонов. Количество строк растёт вместе с числом адресов на сервере.
Типичные ошибки при чтении таблицы:
- Разбор вывода через grep без учёта колонки: подстрока совпадает, а поле не то. Для точного сравнения используйте awk с номером поля.
- Правка маршрутов на рабочем сервере без резервного доступа. Смотрите таблицы командами чтения, а изменения согласуйте и проверяйте в окно обслуживания.
- Оценка метрики без учёта длины маски. Ядро сначала выбирает самый точный маршрут, и лишь при равных префиксах решает метрика.
- Ожидание, что route -n покажет таблицу local. Утилита из net-tools не умеет выводить таблицы по имени.
Проверка таблицы маршрутизации занимает минуту и отвечает на главный вопрос диагностики: куда сервер отправит пакет. Начните с ip route show, уточните путь через ip route get, сверьте правила ip rule show и только после этого планируйте изменения конфигурации.