Команда route print показывает таблицу маршрутизации Windows: активные и постоянные маршруты с адресами сетей назначения, шлюзами, интерфейсами и метриками. Флаг -p в команде route add делает маршрут постоянным: запись сохраняется в реестре и восстанавливается после перезагрузки.
Минимум команд для работы: просмотр - route print -4, добавление постоянного маршрута - route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10 if 12, удаление - route delete 10.0.0.0 mask 255.0.0.0. Изменения выполняются в командной строке или PowerShell, запущенных от имени администратора.
Дальше разбираем, что означает каждая колонка вывода, где взять индекс интерфейса, как метрика решает, через какой адаптер уйдёт пакет, и какие ошибки чаще всего ломают связность.
Что такое таблица маршрутизации в Windows и зачем она нужна
Таблица маршрутизации это набор правил, по которым Windows решает, куда отправить пакет. Каждая строка связывает сеть назначения с маской, шлюзом, локальным интерфейсом и метрикой. При отправке пакета система ищет самое точное совпадение по маске (самый длинный префикс), а при равных префиксах выбирает строку с меньшей метрикой.
Windows заполняет таблицу сама. При поднятии интерфейса появляются:
- маршрут к локальной подсети, например 192.168.1.0 с маской 255.255.255.0 через адрес интерфейса 192.168.1.100;
- маршрут по умолчанию 0.0.0.0 с маской 0.0.0.0 через шлюз, полученный по DHCP или заданный вручную;
- служебные строки для loopback 127.0.0.0/8, multicast 224.0.0.0/4 и широковещательного адреса 255.255.255.255.
Ручная правка нужна, когда автоматических правил не хватает. Типичные задачи: доступ к удалённой подсети за VPN, разделение трафика между двумя провайдерами, обход туннеля для локальных ресурсов, подключение к тестовому сегменту 10.20.30.0/24 через внутренний маршрутизатор.
Пример. Рабочая станция 192.168.1.100 выходит в интернет через 192.168.1.1, а серверы в сети 10.0.0.0/8 живут за внутренним шлюзом 192.168.1.254. Без отдельной строки для 10.0.0.0/8 пакеты уйдут в шлюз по умолчанию и до серверов не дойдут.
Как посмотреть таблицу маршрутизации: команда route print
Базовый вывод даёт команда route print. Просмотр доступен любому пользователю, а добавление и удаление маршрутов требует прав администратора.
Полезные варианты:
- route print -4 - только таблица IPv4;
- route print -6 - только таблица IPv6;
- route print 10.0.0.0 - только строки, подходящие под указанный адрес назначения.
Вывод состоит из нескольких блоков. Сначала идёт Interface List со списком адаптеров, их индексами (Idx), метриками (Met) и MTU. Затем таблица IPv4 Route Table с разделами Active Routes и Persistent Routes, после неё таблица IPv6 Route Table. Раздел Persistent Routes появляется только тогда, когда в системе есть постоянные маршруты.
Если строк десятки, вывод фильтруют по тексту: route print -4 | findstr /i "10.0.0.0". Шаблон лучше брать по началу адреса, иначе легко пропустить нужную строку.
Разбор колонок Network Destination, Netmask, Gateway, Interface и Metric
| Колонка | Что содержит | Пример |
|---|---|---|
| Network Destination | Адрес сети или хоста назначения | 192.168.1.0 |
| Netmask | Маска подсети, задаёт размер сети | 255.255.255.0 |
| Gateway | IP-адрес следующего узла, куда уходит пакет; значение On-link означает прямое подключение без шлюза | 192.168.1.1 |
| Interface | IP-адрес локального интерфейса, через который уйдёт пакет | 192.168.1.100 |
| Metric | Стоимость маршрута; меньшее значение даёт более высокий приоритет | 25 |
Полная строка выглядит так: 192.168.1.0 255.255.255.0 192.168.1.1 192.168.1.100 25. Читается она просто: в сеть 192.168.1.0/24 пакеты уходят через шлюз 192.168.1.1 с интерфейса 192.168.1.100, стоимость маршрута 25.
Строка 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.100 25 это маршрут по умолчанию. Он ловит весь трафик, для которого нет более точного правила, поэтому сбой в этой строке лишает машину связи с внешними сетями.
Значение On-link в колонке Gateway говорит о том, что сеть подключена напрямую и промежуточный шлюз не нужен. В зависимости от версии Windows на этом месте может стоять 0.0.0.0 или адрес самого интерфейса.
Колонка Interface содержит IP-адрес, а не имя адаптера. Соответствие адреса, имени и индекса смотрите в блоке Interface List: индекс из колонки Idx понадобится для команды route add.
Как добавить постоянный маршрут через route add -p
Флаг -p (persistent) сохраняет маршрут в реестре, в ветке HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes. Такая запись восстанавливается после перезагрузки и после переподключения адаптера. Без флага -p маршрут живёт до первого перезапуска системы.
Синтаксис и параметры команды route add
route [-f] [-p] add destination mask netmask gateway [metric metric] [if interface]
- destination - сеть или хост назначения, например 10.0.0.0;
- mask - маска подсети, например 255.0.0.0 для сети /8;
- gateway - IP-адрес следующего узла, например 192.168.1.1;
- metric - целое число, приоритет маршрута: чем меньше, тем выше;
- if - индекс интерфейса из колонки Idx блока Interface List;
- -p - сделать маршрут постоянным;
- -f - очистить таблицу перед добавлением, применять только осознанно.
Команду запускают от имени администратора. Без повышенных прав Windows вернёт ошибку доступа.
Индекс интерфейса берётся из вывода route print. Если параметр if не указать, Windows подберёт интерфейс сама по метрике, и на машине с несколькими адаптерами результат может оказаться не тем, который вы ожидали.
Шлюз должен быть доступен напрямую с выбранного интерфейса. Если указать адрес из чужой подсети, добавление не пройдёт: Windows ответит ошибкой о том, что запрошенный адрес недопустим в этом контексте.
Пример добавления постоянного маршрута
Задача: направить трафик к сети 10.0.0.0/8 через шлюз 192.168.1.1 с интерфейса, у которого индекс 12.
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10 if 12
Флаг -p допускается и в конце команды: route add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10 if 12 -p. Результат одинаковый.
Проверка: route print -4 | findstr /i "10.0.0.0". Строка появится в разделе Active Routes, а внизу, в разделе Persistent Routes, будет её постоянная копия. В PowerShell то же самое удобно смотреть через Get-NetRoute -DestinationPrefix "10.0.0.0/8".
Как удалить маршрут: команда route delete
Синтаксис: route delete destination [mask netmask] [gateway] [if interface]. Пример: route delete 10.0.0.0 mask 255.0.0.0.
Маску указывайте явно. Тогда команда удалит именно ту строку, которую вы видите в route print, и не заденет соседние записи с тем же адресом назначения.
Постоянный маршрут удаляется так же, одной командой. Запись уходит и из реестра, поэтому после перезагрузки она не вернётся.
Осторожно с маршрутом по умолчанию: удаление строки 0.0.0.0 обрывает связь с внешними сетями. Если работаете по RDP или SSH, держите под рукой доступ к консоли.
Проверка после удаления: route print -4 | findstr /i "10.0.0.0". Пустой ответ означает, что маршрута в таблице нет. Такого же результата по всей таблице добивается очистка вида route -f, но она сносит все шлюзовые записи, включая адреса, полученные по DHCP.
Метрика маршрутов и интерфейсов: как Windows выбирает путь
У каждой строки в таблице есть метрика, и меньшее значение означает больший приоритет. Windows отбирает строки с самым точным совпадением маски, затем среди них выбирает маршрут с меньшей суммарной метрикой.
Суммарная метрика складывается из метрики маршрута и метрики интерфейса (Interface Metric). Поэтому даже маршрут с нулевой метрикой может проиграть, если его интерфейс имеет высокую метрику. В выводе route print в колонке Metric показана именно итоговая величина.
Практический пример: две строки по умолчанию, одна через проводной адаптер, вторая через Wi-Fi. У проводного адаптера метрика ниже, поэтому весь трафик по умолчанию идёт через кабель. Часто в таких системах в колонке Metric видны значения 25 для Ethernet и 55 для Wi-Fi, но точные числа зависят от скорости подключения и настроек адаптера, поэтому смотрите фактический вывод route print.
Автоматическая метрика и её настройка
Windows назначает метрику интерфейса автоматически, ориентируясь на скорость канала: быстрее канал, меньше метрика. Отключить автоматику и задать число вручную можно в свойствах адаптера: Свойства, затем Протокол Интернета версии 4 (TCP/IPv4), кнопка Свойства, вкладка Дополнительно, снять флажок автоматического назначения метрики и указать Interface metric.
Из командной строки то же делается через netsh:
netsh interface ipv4 show interfaces netsh interface ipv4 set interface "Ethernet" metric=10
Первая команда показывает индексы и текущие метрики адаптеров, вторая задаёт метрику постоянной. Набор команд для маршрутов и интерфейсов через netsh с готовыми примерами собран в шпаргалке по управлению маршрутизацией в Windows.
Неправильная метрика уводит трафик в нежелательный канал. После правки проверьте route print -4 и трассировку до внешнего адреса.
Маршрутизация при нескольких сетевых адаптерах
Ethernet и Wi-Fi, два проводных адаптера, физическая карта и VPN-туннель: чем больше интерфейсов, тем больше конкурирующих маршрутов. Порядок выбора остаётся прежним: побеждает строка с самым точным префиксом, при равных префиксах - с меньшей суммарной метрикой.
VPN-клиенты часто прописывают маршрут по умолчанию через туннель с низкой метрикой. В результате весь трафик, включая обращения к локальным ресурсам, уходит в туннель. Исправляется это точным маршрутом для нужной подсети или повышением метрики виртуального адаптера.
Вторая частая проблема: два адаптера в одной подсети. Windows создаёт для них одинаковые или пересекающиеся on-link маршруты, и трафик может уходить через интерфейс с меньшей метрикой, а не через тот, который вы считаете основным. Явное указание if в команде route add снимает неопределённость.
Асимметричная маршрутизация это отдельный риск: запрос уходит через один шлюз, ответ приходит через другой, и сессия рвётся. Проверяйте, что обратный путь с удалённой стороны тоже настроен.
Пример настройки маршрутов для двух провайдеров
Дано: канал A со шлюзом 192.168.1.1 и индексом интерфейса 12, канал B со шлюзом 192.168.2.1 и индексом 14. Основной канал A, но конкретная сеть 203.0.113.0/24 должна ходить через B.
route -p add 203.0.113.0 mask 255.255.255.0 192.168.2.1 metric 5 if 14
Метрика 5 низкая, поэтому строка выигрывает у маршрута по умолчанию, а явный if привязывает её к нужному адаптеру.
Проверка: route print -4 | findstr /i "203.0.113", затем tracert -d 203.0.113.10, где первым хопом должен быть 192.168.2.1. Если первый хоп другой, маршрут не применился: проверьте индекс интерфейса и доступность шлюза.
Диагностика и типичные ошибки при работе с маршрутами
Набор инструментов для проверки: ping, tracert -d, pathping, Get-NetRoute, Find-NetRoute, Test-NetConnection. Команда Find-NetRoute -RemoteIPAddress 8.8.8.8 сразу показывает, какой маршрут и какой локальный адрес Windows выберет для цели, что быстрее ручного чтения таблицы.
Разбор частых ошибок:
- Неверная маска. Для 10.0.0.0/8 указали 255.255.255.0: маршрут ловит только часть адресов, остальной трафик уходит в шлюз по умолчанию.
- Шлюз вне подсети интерфейса. Команда route add завершается ошибкой, запись не создаётся.
- Дубликат маршрута с меньшей метрикой. Пакеты уходят через другой адаптер. Решение: удалить лишнюю запись или добавить более точный маршрут через нужный интерфейс.
- Забытый флаг -p. После перезагрузки маршрута в таблице нет.
- Постоянный маршрут через интерфейс с DHCP. Адрес или индекс адаптера изменились, и запись перестала работать. Проверка: route print и netsh interface ipv4 show interfaces.
- Удаление маршрута по умолчанию. Машина теряет связь со всеми внешними сетями.
Порядок поиска виновника простой. Сравните фактический route print с ожидаемой картиной, найдите строку, которая перехватывает целевой адрес, и посмотрите на её маску, шлюз и метрику. Пример: пакеты к 10.1.1.0/24 уходят в VPN-туннель с метрикой 1, хотя для офисной сети ожидался маршрут с метрикой 25. Помогает либо более точная строка через нужный интерфейс, либо ручная метрика, которая делает приоритет предсказуемым.
Если проблема не на стороне Windows, а на сервере, пригодится чеклист диагностики маршрутизации на Linux-сервере: он помогает отличить сбой маршрута от проблем DNS, firewall, VPN и MTU.
Сравнение с Linux: аналоги команд route print и route add
Логика маршрутизации в Windows и Linux похожа, отличается синтаксис и способ сохранения настроек.
| Задача | Windows | Linux |
|---|---|---|
| Показать таблицу | route print -4 | ip route show |
| Добавить маршрут | route add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10 if 12 | ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0 metric 10 |
| Удалить маршрут | route delete 10.0.0.0 mask 255.0.0.0 | ip route del 10.0.0.0/8 |
| Сохранить после перезагрузки | route -p add (запись в реестре) | конфигурация netplan, NetworkManager или systemd-networkd |
| Таблица IPv6 | route print -6, route -6 add | ip -6 route show, ip -6 route add |
Разница в метриках: в Windows суммируются метрика маршрута и метрика интерфейса, в Linux метрика принадлежит маршруту. Временный маршрут в Linux исчезает после перезагрузки так же, как в Windows без флага -p, но постоянные настройки там хранятся в конфигурационных файлах, а не в реестре.
Команды ip route и разбор таблиц с примерами разобраны в руководстве по настройке маршрутизации в Linux. Для сохранения статических маршрутов в Debian, Ubuntu, CentOS и RHEL есть отдельный материал: настройка статических маршрутов в Linux. Общая картина по IP-маршрутизации, шлюзу по умолчанию и split tunneling собрана в руководстве по IP-маршрутизации 2026.
Перед изменениями сохраните текущее состояние: route print > routes-backup.txt. После добавления или удаления маршрута проверяйте результат командой route print -4 и трассировкой до нужного адреса, чтобы не оставить сеть в промежуточном состоянии.